Я намерен использовать Netty в предстоящем проекте.Этот проект будет действовать как клиент и сервер.Особенно он будет устанавливать и поддерживать множество соединений с различными серверами, одновременно обслуживая своих клиентов.
Теперь документация для NioServerSocketChannelFactory достаточно точно определяет модель потоков для серверной стороны - каждому связанному порту прослушивания потребуется выделенный поток boss во всемпроцесс, в то время как подключенные клиенты будут обрабатываться неблокирующим образом в потоках worker .В частности, один рабочий поток сможет обрабатывать несколько подключенных клиентов.
Однако документация для NioClientSocketChannelFactory менее конкретна.Похоже, что здесь также используются потоки boss и worker .Тем не менее, в документации говорится:
Один NioClientSocketChannelFactory имеет один поток босса.Это делает попытку подключения по запросу.Как только попытка подключения завершается успешно, поток босса передает подключенный канал одному из рабочих потоков, которыми управляет NioClientSocketChannelFactory.
Рабочие потоки, кажется, работают так же, как и в случае сервера.
Мой вопрос: означает ли это, что для каждого соединения моей программы с внешним сервером будет выделен один boss поток?Как это будет масштабироваться, если я установлю сотни или тысячи таких связей?
В качестве примечания.Существуют ли какие-либо неблагоприятные побочные эффекты для повторного использования одного Executor (пула кэшированных потоков) в качестве bossExecutor и workerExecutor для ChannelFactory?А как насчет повторного использования между различными клиентскими и / или серверными экземплярами ChannelFactory? Это несколько обсуждается здесь , но я не нахожу эти ответы достаточно конкретными.Кто-нибудь может уточнить это?