Что происходит с соединениями WebSocket, когда экран телефона блокируется?

Если в браузере телефона есть открытое соединение, и пользователь блокирует экран, то в определенный момент у него больше не будет соединения WebSocket.

Какие события запускаются, когда это происходит? Это WebSocket.onerror или же WebSocket.onclose вызван обработчик, и если да, происходит ли это, когда экран блокируется / приложение приостанавливается или когда приложение снова запускается?

(И бонусный вопрос: это стандартизировано, или браузеры ведут себя иначе, и если да, то как?)

1 ответ

Решение

Я провел некоторое тестирование сам, и ответ, кажется, таков: никаких событий не происходит. Хотя связь не падает, нет error или же close события запускаются, даже когда браузер не возвращается. Таким образом, основным способом решения этой проблемы является периодическая проверка состояния подключения и повторное подключение в случае необходимости - с экспоненциальным отключением в случае, если подключение прерывается на стороне сервера. (Или чтобы библиотека сделала это за вас, хотя я не нашел должным образом поддерживаемой клиентской библиотеки WebSocket на основе браузера, которая бы это делала.)

Это подтверждается автором этой статьи:

Мобильные устройства представляют новую категорию проблем с подключением; если мобильное устройство заблокировано, переходит в спящий режим или приложение перемещается в фоновый режим, активное соединение WebSocket может перестать отвечать на запросы и не закрыться должным образом.

Другие вопросы по тегам