2012-07-17 11 views
5

Ho impostato l'opzione "receiveBufferSize" su 1024, ma per qualche motivo sto ancora ricevendo solo 768 byte nel messaggioRicevuto. L'intestazione dei dati indica che la dimensione dei dati che vengono inviati è 1004.Perché Netty mi dà solo 768 byte dai messaggi UDP

Di seguito si riporta il codice di inizializzazione per il server:

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)); 
} 

risposta

8

È necessario impostare un ulteriore opzione - receiveBufferSizePredictorFactory.

allo scopo di prevedere lo spazio necessario da allocare per contenere il messaggio in arrivo, netty utilizza un predittore che prevede la quantità di byte da allocare.

ci sono due tipi di predittori di dimensione del buffer di ricezione, adattivi e di dimensione fissa. i predittori vengono creati da una factory predittore, che crea uno per ciascun canale creato dal bootstrap.

se non è impostato alcun predittore di fabbrica per il bootstrap (o nessun predittore è impostato manualmente per il canale), il canale utilizza il predittore di dimensioni fisse predefinito di 768 byte. tutti i messaggi più grandi di 768 byte vengono ridotti a quella dimensione.

è possibile aggiungere:

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

potete leggere i predittori e le loro fabbriche in documentazione Netty

ReceiveBufferSizePredictor Inteface

ReceiveBufferSizePredictorFactory Inteface

+0

Potrebbe aggiungere una citazione per il predittore di default essendo Predittore di dimensioni fisse di 768 byte? – eric

+0

[DatagramChannelFactory] (http://static.netty.io/3.6/api/org/jboss/netty/channel/socket/DatagramChannelConfig.html). guarda setReceiveBufferSizePredictor (ReceiveBufferSizePredictor) '_Il predittore predefinito è FixedReceiveBufferSizePredictor (768) _ –