作者:手浪用户2502876054 | 来源:互联网 | 2023-05-23 20:48
在Netty 4 "代理"示例中,通道自动读取选项已被禁用:
serverBootStrap.group(bossGroup, workerGroup)
...
.childOption(ChannelOption.AUTO_READ, false)
如果注释childOption(ChannelOption.AUTO_READ, false)
,代理示例将无法工作.更详细的是,在channelRead
类的方法中HexDumpProxyFrontendHandler
,outboundChannel
将始终处于非活动状态.
我研究过Netty源代码,发现"自动读取"会影响方法fireChannelActive
和fireChannelReadComplete
类的DefaultChannelPipeline
if (channel.config().isAutoRead()) {
read();
}
但我仍然无法弄清楚自动读取和代理示例之间的关系.在我看来,当数据发送到入站缓冲区时,Netty应该触发通道读取事件.
所以有两个问题:
为什么禁用自动读取是"代理"示例所必需的?
为什么启用自动读取会使outboundChannel
总是无效?
Norman Maure..
10
如果你没有将autoread设置为false,如果一个通道在另一个通道写入大量数据之前可能会消耗它,则可能会遇到麻烦.因为它都是异步的,所以你可以将缓冲区放到很多数据上并点击OOME.
1> Norman Maure..:
如果你没有将autoread设置为false,如果一个通道在另一个通道写入大量数据之前可能会消耗它,则可能会遇到麻烦.因为它都是异步的,所以你可以将缓冲区放到很多数据上并点击OOME.