当前位置: 首页 > 知识库问答 >
问题:

如果网络通道是可写的,数据将在哪里排队返回false

贺奕
2023-03-14

从 Netty api 中,它显示如果可写返回 false,请求将被排队。我能知道请求将在哪里排队吗?在什么情况下,队列可能已满并导致 OOM 问题?

以下是isWritable()的文档

当且仅当I/O线程将立即执行请求的写入操作时返回true。当此方法返回false时发出的任何写入请求都将排队,直到I/O线程准备好处理排队的写入请求。

https://netty.io/4.1/api/io/netty/channel/Channel.html#isWritable--

共有1个答案

黄博艺
2023-03-14

它将在netty维护的内部缓冲区中排队。为了避免系统出现OOM,您必须覆盖ChannelInoundHandler的方法channelWritabilityChanged并进行背压处理。

在这里,您可以使用频道的autoread配置来减慢入站数据的读取速度,并按此处所述手动读取请求。或者,如果您正在另一个线程上编写,则可能需要阻止该线程。

 类似资料:
  • 我正在关注TensorFlow的“专家深度列表”教程:https://www.tensorflow.org/tutorials/mnist/pros/ 第二卷积层具有形状【5、5、32、64】;也就是说,它有32个输入,而第一个卷积层有1个输入(该输入是我了解原始图像的灰度值)。 第二个卷积层有32个输入通道意味着什么?这是否意味着在第二层中学习的64个过滤器将全部应用(移位)到每像素具有32个点

  • 问题内容: 当使用将方法标记为“潜在的返回值”,其中把注释?在方法上还是返回类型? 有什么技术差异,还是严格说来是样式问题? 风格A: 风格B: 问题答案: 严格来说,这是一个样式问题。 无论您在源代码中的何处编写注释,注释实际上都在方法上。这是因为对的定义进行了元注释,从而使方法成为注释。您可以在任何位置编写注释,因为Java语言规范语法允许方法注释中插入方法修饰符,例如。 我认为将批注放置在返

  • 我的客户通过订单订购了许多包裹。 我想退回包裹数量超过0且状态仅为成功的客户。但我不知道如何添加包裹状态的条件。目前,这份声明给了我一份有包裹的客户名单<代码>$customers=Customer::has('包裹','

  • 问题内容: 我在此链接中看到了一些代码,并感到困惑:http : //www.darkcoding.net/software/go-lang-after-four- months/ 第二个值(确定)是什么意思? 问题答案: 接收操作符返回的布尔变量指示接收的值是在通道上发送的(true)还是由于通道关闭且为空而返回的零值(false)。 当Go程序的其他部分关闭或通道时,循环终止。在这种情况下,其

  • 我正在为在线游戏运行Netty服务器,但是我遇到了一些奇怪的行为: 随机地,通道只是停止能够从服务器写入,即用户仍然连接,传入的数据被接收,但传出的数据没有到达客户端。 我花了时间来调试这个问题,我发现channel.isWriteable()为连接有问题的客户端返回false。 有人能解释一下为什么会发生这种情况吗? 通道无法写入的原因是什么? 顺便说一句,这在本地主机连接上也会发生。 编码器: