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