6

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

1 回答 1

10

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

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

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

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

你可以加:

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

您可以在 netty 文档中阅读有关预测器及其工厂的信息

ReceiveBufferSizePredictor 接口

ReceiveBufferSizePredictorFactory 接口

于 2012-07-23T13:42:09.333 回答