你好,我有一个 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(使用前将#替换为@)