网状加大尺寸ChannelBuffer类型(Netty Increase ChannelBuffer

2019-07-02 16:48发布

你好,我有应该接受一个字符串处理程序中的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();
}

}

Answer 1:

您是否使用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);
}

合理 ?



Answer 2:

在版本4.0.10.Final为UDP缓冲区的大小设置为2048个字节。

如果你想增加它设置ChannelOptions如下:

option(ChannelOption.SO_RCVBUF, int bytes)

并且

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


文章来源: Netty Increase ChannelBuffer Size
标签: java netty