В некоторых ситуациях сама ОС не знает, что соединение было потеряно (например, сбои сети). Иногда это называется полуоткрытыми соединениями.
Поскольку ОС не знает о закрытии соединения, браузер или сервер узлов не уведомляются и ваш обратный вызов WebSocket не вызывается.
Здесь есть хорошая статья блога о полуоткрытых соединениях здесь .
Вы можете смягчить проблему, например:
закрытие сокет самостоятельно при подозрительных обстоятельствах (т. е. закрывайте сокет вручную, когда страница теряет фокус).
реализует пинг на стороне клиента. Неудачная отправка ping будет указывать программе (и ОС), что соединение было потеряно, в результате чего вызывается обратный вызов onclose
.
Эти параметры всегда будут страдать от некоторая задержка Обнаружение потери сети не так просто.