Netty增加ChannelBuffer大小

您好我有一个Netty Server,其处理程序应该接受字符串。 它似乎只接收最多1024个字节的内容。 如何增加缓冲区大小。 我已经试过了

bootstrap.setOption("child.sendBufferSize", 1048576); bootstrap.setOption("child.receiveBufferSize", 1048576); 

没有成功。

处理程序如下

 public class TestHandler extends SimpleChannelHandler { @Override public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) { ChannelBuffer buf = (ChannelBuffer) e.getMessage(); String response = ""; if (buf.readable()) { response = buf.toString(CharsetUtil.UTF_8); System.out.println("CONTENT: " + response); } System.out.println(response); } @Override public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) { e.getCause().printStackTrace(); Channel ch = e.getChannel(); ch.close(); } 

}

你在使用UDP吗? 如果是这样,数据包将以1024字节最大。 此代码注释位于QOTM代码示例中:

允许最大1024字节的数据包(默认为768)。 您可以增大或减小此值以避免截断数据包或分别改善内存占用。

另请注意,无论您如何配置此选项,路由器都可能会截断或丢弃大型UDP数据包。 在UDP中,如果数据包大于特定大小,则会截断或丢弃数据包,具体取决于路由器配置。 IPv4路由器截断,IPv6路由器丢弃大数据包。 这就是为什么在UDP中发送小数据包是安全的。

如果您使用TCP,则应在处理之前将管道解码器和字符串解码器添加到管道中; 像这样的东西:

 pipeline.addLast("frameDecoder", new DelimiterBasedFrameDecoder(80960, Delimiters.lineDelimiter())); pipeline.addLast("stringDecoder", new StringDecoder(CharsetUtil.UTF_8)); pipeline.addLast("myHandler", new TestHandler()); 

请注意,您需要修改测试处理程序,因为MessageEvent实际上将包含您的字符串。

 @Override public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) { String response = (String) e.getMessage(); System.out.println(response); } 

合理 ?

在版本4.0.10中.Final for UDP Buffer size设置为2048字节。

如果您想增加它,请按如下方式设置ChannelOptions:

 option(ChannelOption.SO_RCVBUF, int bytes) 

并且

 option(ChannelOption.RCVBUF_ALLOCATOR, new FixedRecvByteBufAllocator(int Bytes))