在Netty 4 "代理"示例中,通道自动读取选项已被禁用:
serverBootStrap.group(bossGroup, workerGroup)
...
.childOption(ChannelOption.AUTO_READ, false)
Run Code Online (Sandbox Code Playgroud)
如果注释childOption(ChannelOption.AUTO_READ, false),代理示例将无法工作.更详细的是,在channelRead类的方法中HexDumpProxyFrontendHandler,outboundChannel将始终处于非活动状态.
我研究过Netty源代码,发现"自动读取"会影响方法fireChannelActive和fireChannelReadComplete类的DefaultChannelPipeline
if (channel.config().isAutoRead()) {
read();
}
Run Code Online (Sandbox Code Playgroud)
但我仍然无法弄清楚自动读取和代理示例之间的关系.在我看来,当数据发送到入站缓冲区时,Netty应该触发通道读取事件.
所以有两个问题:
outboundChannel总是无效?Nor*_*rer 10
如果你没有将autoread设置为false,如果一个通道在另一个通道写入大量数据之前可能会消耗它,则可能会遇到麻烦.因为它都是异步的,所以你可以将缓冲区放到很多数据上并点击OOME.
| 归档时间: |
|
| 查看次数: |
2904 次 |
| 最近记录: |