2012-07-17 7 views
5

Ich habe die "receiveBufferSize" -Option auf 1024 festgelegt, aber aus irgendeinem Grund bekomme ich immer noch nur 768 Bytes in messageReceived. Der Header der Daten zeigt, dass Größe der Daten ist 1004.Warum gibt Netty nur 768 Bytes von UDP-Nachrichten

Unterhalb der Initialisierungscode ist für den Server gesendet werden:

public static void main(String[] args) throws Exception { 
    ConnectionlessBootstrap b = new ConnectionlessBootstrap(new NioDatagramChannelFactory()); 

    // Options for a new channel   
    b.setOption("receiveBufferSize", 1024); 
    System.out.println(b.getOptions()); 

    b.setPipelineFactory(new ChannelPipelineFactory() { 

     @Override 
     public ChannelPipeline getPipeline() throws Exception { 
      return Channels.pipeline(
        new MyUDPPacketDecoder(), 
        new StdOutPrintHandler()); 
     } 
    }); 

    b.bind(new InetSocketAddress(myPort)); 
} 

Antwort

8

Sie benötigen eine zusätzliche Option setzen - receiveBufferSizePredictorFactory.

Um vorauszusagen, wie viel Speicherplatz benötigt wird, um die eingehende Nachricht zu speichern, verwendet Netty einen Prädiktor, der die Menge des zuzuweisenden Bytes vorhersagt.

gibt es zwei Arten von Empfangspuffergrößen-Prädiktoren, adaptive und feste Größe. Die Prädiktoren werden von einer Prädiktor-Factory erstellt, die für jeden vom Bootstrap erstellten Kanal einen Prädiktor erstellt.

Wenn keine Prädiktor-Factory für den Bootstrap festgelegt ist (oder kein Prädiktor manuell für den Kanal festgelegt wurde), verwendet der Kanal den Standard-Prädiktor mit 768 Byte fester Größe. Alle Nachrichten, die größer als 768 Bytes sind, werden auf diese Größe reduziert.

können Sie hinzufügen:

b.setOption("receiveBufferSizePredictorFactory", new FixedReceiveBufferSizePredictorFactory(1024)); 

Sie über die Prädiktoren und ihre Fabriken in netty Dokumentation

ReceiveBufferSizePredictor Inteface

ReceiveBufferSizePredictorFactory Inteface

+0

Könnten Sie ein Zitat für die Standard-Prädiktor hinzufügen zu sein lesen 768 Byte Festgrößen-Prädiktor? – eric

+0

[DatagramChannelFactory] (http://static.netty.io/3.6/api/org/jboss/netty/channel/socket/DatagramChannelConfig.html). Sehen Sie sich "setReceiveBufferSizePredictor" (ReceiveBufferSizePredictor) an. _Der Standardprädiktor ist "FixedReceiveBufferSizePredictor" (768). –