gpt4 book ai didi

java - 为什么 Netty 4 "proxy"示例必须将 channel "AUTO_READ"设置为 false

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:17:42 24 4
gpt4 key购买 nike

在 Netty 4 中 "proxy" example , channel 自动读取选项已被禁用:

serverBootStrap.group(bossGroup, workerGroup)
...
.childOption(ChannelOption.AUTO_READ, false)

如果注释 childOption(ChannelOption.AUTO_READ, false),代理示例将无法工作。更详细地说,在 HexDumpProxyFrontendHandler 类的方法 channelRead 中,outboundChannel 将始终处于非 Activity 状态。

我研究了 Netty 源代码,发现“自动读取”会影响类 DefaultChannelPipeline 的方法 fireChannelActivefireChannelReadComplete >

if (channel.config().isAutoRead()) {
read();
}

但是我还是搞不懂自动读取和代理示例之间的关系。在我看来,当数据发送到入站缓冲区时,Netty 应该触发 channel 读取事件。

所以有两个问题:

  • 为什么“代理”示例需要禁用自动读取?
  • 为什么启用自动读取会使 outboundChannel 始终处于非 Activity 状态?

最佳答案

如果您没有将 autoread 设置为 false,如果一个 channel 在另一个 channel 可以使用数据之前写入大量数据,您可能会遇到麻烦。由于它都是异步的,因此您最终可能会遇到数据过多的缓冲区并出现 OOME。

关于java - 为什么 Netty 4 "proxy"示例必须将 channel "AUTO_READ"设置为 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28273305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com