为什么Netty的给我从UDP消息只有768个字节(Why is Netty giving me o

2019-07-30 11:30发布

我已在“receiveBufferSize”选项设置为1024,但由于某种原因,我仍然得到中的messageReceived只有768字节。 的数据的报头指示正在发送的数据的大小是1004。

下面是服务器的初始化代码:

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

Answer 1:

您需要设置附加选项 - receiveBufferSizePredictorFactory。

为了预测需要多少空间,以保持传入消息来分配,网状使用该预测字节分配量的预测。

有两种类型的接收缓冲区的大小预测器,自适应和固定大小的。 该预测是由一个预测器工厂,它创建一个用于通过自举创建的每个信道创建的。

如果没有预测出厂设置为自举(或无预测器被手动设置为信道),信道使用默认768字节的固定尺寸的预测因子。 更大然后768个字节的所有消息都砍了该尺寸。

你可以加:

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

你可以看到网状文档中的预测和他们的工厂

ReceiveBufferSizePredictor Inteface

ReceiveBufferSizePredictorFactory Inteface



文章来源: Why is Netty giving me only 768 Bytes from UDP messages