#netty #nio
#netty #nio
Вопрос:
У нас есть клиент / сервер Netty, основанный на 4.x
Клиент установит основной канал связи с сервером и будет обмениваться данными по этому единственному соединению.
Я хотел бы лучше понять использование потоков NioEventLoopGroup с точки зрения клиента.
Моя настройка имеет очень простой конвейер. SslHandler, кодировщик, декодер, обработчик сообщений
Клиент: Изначально я думал, что поток использовался для обработки входящих и исходящих данных по конвейеру. Однако я заставил своего клиента использовать только 1 поток и добавил режим ожидания в channelRead после отправки в службу исполнителя (отдельный поток) для обработки входящего сообщения вместо того, чтобы делать это в channelRead. Это задание внешнего исполнителя, когда оно будет выполнено, запишет данные в качестве ответа на тот же канал, по которому поступили данные. Сервер не получает ответа до завершения режима ожидания, чего я и ожидал. Однако затем я увеличил клиентский поток до 2. Запустил тот же тест, и сервер по-прежнему не получал ответа до истечения 30 секунд. Для проверки я добавил системные выходы в задание после того, как оно написало ответ на канал, который был выведен до того, как он перешел в спящий режим. Я ожидал, что второй поток включится и обработает исходящий ответ от задания. Итак, похоже, что для данного соединения / канала используется один клиентский поток. Это точно?
Ответ №1:
То, что вы видите, вполне ожидаемо. Каждый Channel
«привязан» к одному, EventLoop
который привязан к точному единице Thread
. Таким образом, не имеет значения, сколько EventLoop
у вас есть, один Channel
обрабатывается одним и тем же EventLoop
на протяжении всей жизни