Что происходит с соединениями WebSocket, когда экран телефона блокируется?
Если в браузере телефона есть открытое соединение, и пользователь блокирует экран, то в определенный момент у него больше не будет соединения WebSocket.
Какие события запускаются, когда это происходит? Это WebSocket.onerror
или же WebSocket.onclose
вызван обработчик, и если да, происходит ли это, когда экран блокируется / приложение приостанавливается или когда приложение снова запускается?
(И бонусный вопрос: это стандартизировано, или браузеры ведут себя иначе, и если да, то как?)
1 ответ
Я провел некоторое тестирование сам, и ответ, кажется, таков: никаких событий не происходит. Хотя связь не падает, нет error
или же close
события запускаются, даже когда браузер не возвращается. Таким образом, основным способом решения этой проблемы является периодическая проверка состояния подключения и повторное подключение в случае необходимости - с экспоненциальным отключением в случае, если подключение прерывается на стороне сервера. (Или чтобы библиотека сделала это за вас, хотя я не нашел должным образом поддерживаемой клиентской библиотеки WebSocket на основе браузера, которая бы это делала.)
Это подтверждается автором этой статьи:
Мобильные устройства представляют новую категорию проблем с подключением; если мобильное устройство заблокировано, переходит в спящий режим или приложение перемещается в фоновый режим, активное соединение WebSocket может перестать отвечать на запросы и не закрыться должным образом.