Почему 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.

Другие вопросы по тегам