为什么Netty只给我768字节的UDP消息

时间:2012-07-17 15:23:19

标签: java udp netty datagram

我已将“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));
}

1 个答案:

答案 0 :(得分:9)

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

为了预测为了保存传入消息需要分配多少空间,netty使用预测器来预测要分配的字节数。

有两种类型的接收缓冲区大小预测变量,自适应和固定大小。 预测变量由预测器工厂创建,该工厂为引导程序创建的每个通道创建一个。

如果没有为引导程序设置预测器工厂(或者没有为通道手动设置预测器),则通道使用默认的768字节固定大小预测器。所有大于768字节的消息都会减少到那个大小。

你可以添加:

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

您可以在netty文档中了解预测变量及其工厂

ReceiveBufferSizePredictor Inteface

ReceiveBufferSizePredictorFactory Inteface