2012-07-17 13 views
5

He configurado la opción "receiveBufferSize" en 1024, pero por alguna razón recibo solo 768 bytes en messageReceived. La cabecera de los datos indica que el tamaño de los datos que se envían es 1004.¿Por qué Netty me da solo 768 Bytes de los mensajes UDP?

A continuación se muestra el código de inicialización para el servidor:

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

Respuesta

8

Es necesario configurar una opción adicional - receiveBufferSizePredictorFactory.

con el fin de predecir cuánto espacio necesita asignar para mantener el mensaje entrante, netty usa un predictor que predice la cantidad de bytes para asignar.

hay dos tipos de predictores de tamaño de búfer de recepción, adaptables y de tamaño fijo. los predictores son creados por una fábrica de predictores, que crea uno para cada canal creado por el programa de arranque.

si no se establece fábrica de predicción para el arranque (o no se establece ningún predictor manualmente para el canal), el canal utiliza el predictor predeterminado de 768 bytes de tamaño fijo. todos los mensajes más grandes que 768 bytes se reducen a ese tamaño.

puede agregar:

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

se puede leer sobre los predictores y sus fábricas en la documentación Netty

ReceiveBufferSizePredictor Inteface

ReceiveBufferSizePredictorFactory Inteface

+0

¿Es posible añadir una citación por el predictor predeterminado siendo ¿Predictor de tamaño fijo de 768 bytes? – eric

+0

[DatagramChannelFactory] (http://static.netty.io/3.6/api/org/jboss/netty/channel/socket/DatagramChannelConfig.html). mira setReceiveBufferSizePredictor (ReceiveBufferSizePredictor) '_ El predictor predeterminado es FixedReceiveBufferSizePredictor (768) _ –

Cuestiones relacionadas