Разрыв соединения websocket при отключении подсветки экрана?
Здравствуйте, суть вопроса в том что когда включена подстветка телефона все работает хорошо, с сервера websocket приходят уведомление пользователю на сайте, но как только подстветка выключается перестает работать ping с сервером. И вылазят ошибки в консоль где запущен сервер python websocket
ConnectionResetError: [WinError 64] The specified network name is no longer available
websockets.exceptions.ConnectionClosedError: no close frame received or sent
function keepAlive(timeout = 5000) { if (socket.readyState == socket.OPEN) { console.log('ping'); let json_info = JSON.stringify({'ping' : 1}); socket.send(json_info); } timerId = setTimeout(keepAlive, timeout); } |
function keepAlive(timeout = 5000) { if (socket.readyState == socket.OPEN) { console.log('ping'); let json_info = JSON.stringify({'ping' : 1}); socket.send(json_info); } timerId = setTimeout(keepAlive, timeout); }
async def handler(websocket, path): print("Client connected"); async for message in websocket: jsons = json.loads(message) if 'register_personal' in jsons: await ADD_REGISTER_USER(websocket,jsons['user_id']); print(CONNECTIONS); if 'add_client' in jsons: await ADD_CLIENT(websocket,jsons['add_client']) print(CONNECTIONS); if 'action_staff_call' in jsons: await STAFF_CALL(websocket,jsons['data']); if 'confirmation' in jsons: await CONFIRMATION_ORDER(websocket,jsons['data']); if 'uploader_to_user' in jsons: await UPLOADER_USERS(websocket,jsons); await asyncio.sleep(1) start_server = websockets.serve(handler, "localhost", 5000) |
async def handler(websocket, path): print("Client connected"); async for message in websocket: jsons = json.loads(message) if 'register_personal' in jsons: await ADD_REGISTER_USER(websocket,jsons['user_id']); print(CONNECTIONS); if 'add_client' in jsons: await ADD_CLIENT(websocket,jsons['add_client']) print(CONNECTIONS); if 'action_staff_call' in jsons: await STAFF_CALL(websocket,jsons['data']); if 'confirmation' in jsons: await CONFIRMATION_ORDER(websocket,jsons['data']); if 'uploader_to_user' in jsons: await UPLOADER_USERS(websocket,jsons); await asyncio.sleep(1) start_server = websockets.serve(handler, "localhost", 5000)
Что делать что бы соединение было даже когда отключен экран телефона? и уведомление приходили
Дополнительно:
Ответы:
я так понимаю питон на сервере у провайдера. явоскрипт в хроме на телефоне у пользователя.
Верно ?
А ответ почему не работает связан с особенностями поведения мобильных телефонов.
Во главе угла стоит экономия батарейки. Поэтому при отсутвии активности пользователя все фризиться.
https://caniuse.com/?search=Screen%20Wake%20Lock%20API
запретить гасить экран так себе вариант.
https://habr.com/ru/articles/321924/
Можете в офлайн посылать пуши (нотифи)
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для решения проблемы разрыва соединения websocket при отключении подсветки экрана необходимо учитывать особенности работы браузера и настройки сервера websocket.
Когда экран устройства отключается или устройство переходит в режим сна, браузер может автоматически приостановить выполнение JavaScript кода, что может привести к разрыву соединения websocket. Для того чтобы предотвратить такое поведение, можно использовать специальные события и методы браузера.
Один из способов решения этой проблемы - использование события Page Visibility API. Это API позволяет отслеживать изменения видимости страницы и принимать соответствующие действия. Например, при срабатывании события `visibilitychange` можно отправить сообщение на сервер websocket о том, что страница стала невидимой, и при возвращении видимости - повторно установить соединение.
Пример кода на JavaScript:
document.addEventListener("visibilitychange", function() { if (document.visibilityState === "hidden") { // отправить сообщение на сервер websocket о переходе в режим невидимости } else { // отправить сообщение на сервер websocket о возвращении в режим видимости } });
Кроме того, необходимо также учитывать настройки сервера websocket. Некоторые сервера могут автоматически закрывать соединение при отсутствии активности с клиентом. Для предотвращения этого можно настроить сервер таким образом, чтобы он не закрывал соединение при отключении экрана.
В целом, для успешного решения проблемы разрыва соединения websocket при отключении подсветки экрана необходимо учитывать как особенности браузера, так и настройки сервера websocket, и принимать соответствующие меры для обеспечения непрерывной работы соединения.