在Netty 4 "proxy" example中,频道自动阅读选项已被禁用:
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
始终无效?答案 0 :(得分:7)
如果你没有将autoread设置为false,如果一个通道在另一个通道写入之前写入大量数据,则可能会遇到麻烦。因为它全部是异步的,所以你可能会将缓冲区放到很多数据上并点击OOME。