热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

为什么Netty4"代理"示例必须将通道"AUTO_READ"设置为false

如何解决《为什么Netty4"代理"示例必须将通道"AUTO_READ"设置为false》经验,为你挑选了1个好方法。

在Netty 4 "代理"示例中,通道自动读取选项已被禁用:

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

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

我研究过Netty源代码,发现"自动读取"会影响方法fireChannelActivefireChannelReadComplete类的DefaultChannelPipeline

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

但我仍然无法弄清楚自动读取和代理示例之间的关系.在我看来,当数据发送到入站缓冲区时,Netty应该触发通道读取事件.

所以有两个问题:

为什么禁用自动读取是"代理"示例所必需的?

为什么启用自动读取会使outboundChannel总是无效?

Norman Maure.. 10

如果你没有将autoread设置为false,如果一个通道在另一个通道写入大量数据之前可能会消耗它,则可能会遇到麻烦.因为它都是异步的,所以你可以将缓冲区放到很多数据上并点击OOME.



1> Norman Maure..:

如果你没有将autoread设置为false,如果一个通道在另一个通道写入大量数据之前可能会消耗它,则可能会遇到麻烦.因为它都是异步的,所以你可以将缓冲区放到很多数据上并点击OOME.


推荐阅读
author-avatar
手浪用户2502876054
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有