Netty 4.x NioEventLoopGroup для жизненного цикла клиентского потока и использования

#netty #nio

#netty #nio

Вопрос:

У нас есть клиент / сервер Netty, основанный на 4.x

Клиент установит основной канал связи с сервером и будет обмениваться данными по этому единственному соединению.

Я хотел бы лучше понять использование потоков NioEventLoopGroup с точки зрения клиента.

Моя настройка имеет очень простой конвейер. SslHandler, кодировщик, декодер, обработчик сообщений

Клиент: Изначально я думал, что поток использовался для обработки входящих и исходящих данных по конвейеру. Однако я заставил своего клиента использовать только 1 поток и добавил режим ожидания в channelRead после отправки в службу исполнителя (отдельный поток) для обработки входящего сообщения вместо того, чтобы делать это в channelRead. Это задание внешнего исполнителя, когда оно будет выполнено, запишет данные в качестве ответа на тот же канал, по которому поступили данные. Сервер не получает ответа до завершения режима ожидания, чего я и ожидал. Однако затем я увеличил клиентский поток до 2. Запустил тот же тест, и сервер по-прежнему не получал ответа до истечения 30 секунд. Для проверки я добавил системные выходы в задание после того, как оно написало ответ на канал, который был выведен до того, как он перешел в спящий режим. Я ожидал, что второй поток включится и обработает исходящий ответ от задания. Итак, похоже, что для данного соединения / канала используется один клиентский поток. Это точно?

Ответ №1:

То, что вы видите, вполне ожидаемо. Каждый Channel «привязан» к одному, EventLoop который привязан к точному единице Thread . Таким образом, не имеет значения, сколько EventLoop у вас есть, один Channel обрабатывается одним и тем же EventLoop на протяжении всей жизни