Практически, нет способа обнаружить неожиданно оборванное соединение в TCP / IP. Если есть способ сделать это, его не следует называть «неожиданно». : -)
Самый надежный способ обнаружения разорванного соединения - это периодически отправлять сообщение или ждать сообщения с истечением времени ожидания, например, отправив сообщение проверки связи.
Для реализации этого поведения вы можете использовать IdleStateHandler
. Вставьте его в свой конвейер и сделайте так, чтобы ваш обработчик расширил IdleStateAwareChannelHandler
или IdleStateAwareChannelUpstreamHandler
.
В качестве альтернативы, если клиенты и серверы работают в хорошо управляемой сети, такой как ЛВС, вы можете настроить свою операционную систему так, чтобы она чаще отправляла пакеты поддержания активности TCP. Для получения дополнительной информации см. TCP keepalive HOWTO . Однако я сомневаюсь, что это будет надежно работать в среде WAN. (Если кто-то экспериментировал с тайм-аутом активности активности TCP в среде WAN, поделитесь своей историей.)