Netty 增加 ChannelBuffer 大小

2023-11-25

你好,我有一个 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);
}

合理 ?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Netty 增加 ChannelBuffer 大小 的相关文章

随机推荐