当前位置: 首页 > 面试题库 >

净增加ChannelBuffer大小

刘才俊
2023-03-14
问题内容

您好,我有一个带有处理程序的Netty Server,该处理程序应接受字符串。似乎最多只能接收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);
}

合理 ?



 类似资料:
  • 问题内容: 我对Java有一个基本问题。 当使用默认构造函数声明和初始化时,将创建10个元素的内存空间。现在,当我添加第11个元素时,会发生什么?是否将创建具有20个(或更多)元素容量的新内存空间(这需要将元素从第一个内存位置复制到新位置)或其他东西? 我在这里检查。但是我没有找到答案。 请分享知识。谢谢。 问题答案: 创建一个新数组,并将旧数组的内容复制过来。这就是您在API级别上所知道的。引用

  • 问题内容: 有没有办法我可以在自己的计算机上为jvm设置默认堆大小?我想将其设置为1g,因为我一直在运行自定义程序,这些程序始终会达到默认jvm大小的超额点。 我只是不想记住每次我从命令行运行Java应用程序时都要键入-XmX1g … 必须有一种管理方式来做到这一点吗? 问题答案: 显然,它也可以在Linux上运行:

  • 问题内容: 我正在使用具有8 GB RAM的Windows 2003服务器(64位)。如何增加堆内存的最大值?我正在使用该标志将堆大小增加到1500 Mb。是否可以将堆内存增加到物理内存(6 GB堆)的75%? 问题答案: 你可以在32位系统上增加到4GB。如果你使用的是64位系统,则可以更高。如果你选择的错误,不用担心,如果你在32位系统上要求5g,则Java会抱怨一个无效的值并退出。 正如其他

  • 我使用的是64位Ubuntu和java VM64位版本。 我有8GB内存。 我无法将java堆大小更改为4096M,甚至2048M也不行。 我试过这些东西: 产出: x86_64 OpenJDK 64位服务器VM(构建11.0.4+11-post-ubuntu-1ubuntu218.04.3,混合模式,共享) 当我试图更改堆大小时: 输出

  • 问题内容: 我问了这个问题,以了解如何增加JVM中的运行时调用堆栈大小。我有一个答案,而且我还有很多有用的答案和注释,这些注释和注释与Java如何处理需要大型运行时堆栈的情况有关。我在回答摘要中扩展了我的问题。 最初,我想增加JVM堆栈的大小,以便程序运行时无需安装。 相应的配置设置是具有足够大值的命令行标志。对于TT上面的程序,它可以与OpenJDK的JVM一起工作: 答案之一也指出这些-X…标

  • 问题内容: 我正在处理一个大型文本文件(500k行),其格式如下: 我正在使用下面的代码返回每个系列的相关系数,例如S!_A16: 但是,在一些大文件上,这将返回错误: 我了解这与该声明有关,但是如何解决? 编辑 :这与最大行数有关。有谁知道如何容纳更多的行? 问题答案: 错误信息: 说负一个是TypeError。如果查看回溯中的倒数第二行,您会发现唯一的减法是 所以一定是。如果您进入857号线附