Почему Netty 4 "прокси" пример должен установить канал "AUTO_READ" как ложный
В примере Netxy 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
всегда неактивен?
1 ответ
Если вы не установите для autoread значение false, вы можете столкнуться с проблемами, если один канал запишет много данных, прежде чем другой сможет их использовать. Поскольку все это асинхронно, вы можете в конечном итоге создать буферы для большого количества данных и нажать OOME.