您好我有一个Netty Server,其处理程序应该接受字符串.它似乎只接收最多1024个字节的内容.如何增加缓冲区大小.我已经尝试过了
bootstrap.setOption("child.sendBufferSize",1048576); bootstrap.setOption("child.receiveBufferSize",1048576);@H_502_4@没有成功. @H_502_4@处理程序如下
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(); }@H_502_4@}
解决方法
你在使用UDP吗?如果是这样,数据包将以1024字节最大.此代码注释位于QOTM代码示例中:
@H_502_4@Allow packets as large as up to 1024 bytes (default is 768). You could@H_502_4@如果您使用TCP,则应在处理之前将管道解码器和字符串解码器添加到管道中;像这样的东西:
increase or decrease this value to avoid truncated packets or to
improve memory footprint respectively. @H_502_4@Please also note that a large UDP packet might be truncated or dropped
by your router no matter how you configured this option. In UDP,a
packet is truncated or dropped if it is larger than a certain size,
depending on router configuration. IPv4 routers truncate and IPv6
routers drop a large packet. That’s why it is safe to send small
packets in UDP.
pipeline.addLast("frameDecoder",new DelimiterBasedFrameDecoder(80960,Delimiters.lineDelimiter())); pipeline.addLast("stringDecoder",new StringDecoder(CharsetUtil.UTF_8)); pipeline.addLast("myHandler",new TestHandler());@H_502_4@请注意,您需要修改测试处理程序,因为MessageEvent实际上将包含您的字符串.
@Override public void messageReceived(ChannelHandlerContext ctx,MessageEvent e) { String response = (String) e.getMessage(); System.out.println(response); }@H_502_4@合理 ?