Закрытие канала в Netty и ожидание удаления его обработчиков - PullRequest
0 голосов
/ 25 июня 2019

У меня есть вопрос о channel.close() и channel.deregister() в Netty 4.1.32 с использованием NioSocketChannel.

Я заметил, что будущее, возвращаемое channel.close(), завершается после закрытия нижележащего сокета, до отмены регистрации конвейера и удаления из него обработчиков.

У меня есть сценарий использования, в котором я должен ждать, пока все обработчики будут удалены. Я заметил, что могу добиться этого, явно вызвав channel.deregister() после завершения будущего из channel.close() и ожидая завершения будущего, возвращаемого deregister(). Это, однако, вызвало еще одну проблему: channel.deregister() не запускает channelInactive() в конвейере и не позволяет предыдущему channel.close() также вызвать channelInactive().

Это предназначено? Если да, можете ли вы порекомендовать что-нибудь закрыть канал и безопасно дождаться полного разрушения его конвейера, сохраняя нормальный поток событий жизненного цикла? (У меня есть некоторые идеи, такие как размещение обработчика в начале конвейера и ожидание его handlerRemoved(), или как-то врезаться в HeadContext конвейера, но мне не очень нравится ни один из них.)

1 Ответ

0 голосов
/ 25 июня 2019

Я думаю, что вы предложили как способ сделать это, по сути, единственный способ сделать это (добавить обработчик и затем ждать handlerRemoved (...).

...