событие попадает не к тому NIO Worker

я использую сценарий клиент-маршрутизатор-сервер с протоколом UDP с Netty (версия 3.2.3)

я вижу, что клиентские и серверные каналы нормально зарегистрированы с рабочими NIO, но ответ, который возвращается с сервера, назначается неправильному рабочему (NIODatagramWorker), поэтому это другой селектор, и сообщение попадает в неправильный конвейер. (как будто оно пришло от Клиента).

пожалуйста, посоветуйте, Яир


person yair    schedule 08.09.2011    source источник


Ответы (1)


Netty UDP немного сложен. На самом деле UDP имеет только один конвейер, поэтому, если вы измените селектор или обработчики внутри конвейера, это может не иметь желаемого эффекта. Взгляните на эту ссылку UDP Woes в группе пользователей Netty, у которой есть объяснение этого поведения от Trustin Lee.

Таким образом, ваш общий случай при использовании UDP будет следующим:
1) создать единую конвейерную фабрику и конвейер с вашими декодерами и кодировщиками.
2) использовать хэш-карту или аналогичную структуру данных для поиска и маршрутизации входящих данных в правильный сеанс, который у вас есть.
3) При обратной записи используйте метод write(data,remoteSocketAddress) вместо обычного метода записи канала.

person Abe    schedule 08.09.2011