Java 净增通道缓冲区大小

Java 净增通道缓冲区大小,java,netty,Java,Netty,您好,我有一个Netty服务器,它有一个应该接受字符串的处理程序。它似乎只接收最多1024字节的内容。如何增加缓冲区大小。我已经试过了 bootstrap.setOption("child.sendBufferSize", 1048576); bootstrap.setOption("child.receiveBufferSize", 1048576); 没有成功 处理程序如下所示 public class TestHandler extends SimpleChannelHandler {

您好,我有一个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,则应在处理程序之前向管道中添加帧解码器和字符串解码器;大概是这样的:

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版中,UDP缓冲区大小的最终值设置为2048字节

如果要增加,请按如下所示设置ChannelOptions:

option(ChannelOption.SO_RCVBUF, int bytes)
而且

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

谢谢你,尼古拉斯。现在我注意到最后一行没有打印。为什么?好问题。你能在最后一行的末尾加上一个完整的行尾分隔符吗?谢谢Nicholas。可以使用我自己的测力仪。明亮的这是尼古拉斯的必读教程。。。p、 addLast(“frameDecoder”,新定界符rbasedframedecoder(8192,ChannelBuffers.wrappedBuffer(“.getBytes())));UDP数据包的默认最大大小为768,但如果您增加了最大大小,则最大值不会达到1024。最大大小可以增加,详见以下帖子:自4.0.10以来,其位置略有变化,
channel().config().setOption(ChannelOption.SO_RCVBUF,numobytes)