你好,我有应该接受一个字符串处理程序中的Netty服务器。 它似乎只收到含量高达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,应添加一帧解码器和解码器串到YOUT处理程序之前您的管道; 事情是这样的:
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为UDP缓冲区的大小设置为2048个字节。
如果你想增加它设置ChannelOptions如下:
option(ChannelOption.SO_RCVBUF, int bytes)
并且
option(ChannelOption.RCVBUF_ALLOCATOR, new FixedRecvByteBufAllocator(int Bytes))