如何在Netty 3.2.6中手动设置动态缓冲区的最小值?例如2048字节

时间:2011-11-22 05:25:13

标签: buffer netty

我需要通过TCP / IP从其他IP(导航设备)接收完整数据包。 例如,设备必须定期发送966个字节(超过一分钟)。 在我的情况下,第一个接收缓冲区长度为256字节(第一个数据包),第二个是710字节(最后一个数据包),第三个是完整数据包(966字节)。 如何手动设置第一个接收缓冲区长度的最小值?

这是我的代码:

Executor bossExecutors = Executors.newCachedThreadPool();
Executor workerExecutors = Executors.newCachedThreadPool();
NioServerSocketChannelFactory channelsFactory =
                new NioServerSocketChannelFactory(bossExecutors, workerExecutors);
ServerBootstrap bootstrap = new ServerBootstrap(channelsFactory);
ChannelPipelineFactory pipelineFactory = new NettyServerPipelineFactory(this.HWController);
bootstrap.setPipelineFactory(pipelineFactory);
bootstrap.setOption("child.tcpNoDelay", true);
bootstrap.setOption("child.keepAlive", true);
bootstrap.setOption("child.receiveBufferSizePredictorFactory", 
  new FixedReceiveBufferSizePredictorFactory(2048)
);
bootstrap.bind(new InetSocketAddress(this.port));

1 个答案:

答案 0 :(得分:1)

无论您指定的receiveBufferSizePredictorFactory是什么,您都会看到邮件被拆分为多个MessageEvent。这是因为TCP / IP不是面向消息的协议,而是面向流的协议。请阅读the user guide,其中介绍了如何编写适当的解码器来解决此常见问题。