Подтвердить что ты не робот

Может netty надежно обнаружить канал близко/отключить?

В частности, меня интересует случай, когда другой конец канала неожиданно умирает (например, процесс убивается). кажется, что netty не надежно запускает событие закрытого/разъединенного канала, иногда это происходит, а иногда и нет. он также не обязательно вызывает SocketException для соединения reset.

за что он стоит, я также пробовал писать на канал, но это также продолжает работать, не бросая исключений или не запуская никаких других событий.

Я тестирую это на окнах с netty 3.3.0.Final, если это имеет значение.

4b9b3361

Ответ 1

В некотором случае, как вы сказали, netty не может обнаружить, закрыт ли канал или нет. Здесь та же проблема, упомянутая в этом вопросе. Одним из способов решения проблемы является использование сообщений о сердцебиении. Netty поддерживает heartbeat с IdleStateHandler.

Также вы можете просмотреть эти ссылки для IdleStateHandler:

Ответ 2

Если канал отключается без отправки, нет способа обнаружить это. Обычно лучший способ обнаружить отключение, если это необходимо, - периодически отправлять события пульса по каналу каждые x секунд. Используя IdleStateHandler, если вы не получаете сердцебиение после сердцебиения + дельта, вы принудительно отключаете канал.