Как восстановить систему, если клиентский компьютер WebSocket переходит в спящий режим или приложение переходит в фоновый режим (Safari на iPad) - PullRequest
6 голосов
/ 13 января 2012

У меня есть браузерный клиент Javascript, который открывает WebSocket (используя socket.io) для запроса запуска долго выполняющегося процесса, а затем получает обратный вызов, когда процесс завершен.Когда я получаю обратный вызов, я обновляю веб-страницу, чтобы сообщить пользователю, что процесс завершен.

Это работает нормально, за исключением того, что на моем iPad я переключаюсь на другое приложение и затем возвращаюсь (он никогда не получаетобратный вызов, потому что я думаю, что приложение не онлайн в то время).Я предполагаю, что то же самое произойдет на ноутбуке или другом компьютере, который спит в ожидании обратного вызова.

Есть ли стандартный (или любой способ) справиться с этим сценарием?Спасибо.

Для справки, если вы хотите увидеть страницу проблемы, она находится на http://amigen.perfectapi.com/

1 Ответ

7 голосов
/ 16 января 2012

В этом сценарии необходимо учитывать несколько моментов:

Обнаружение отключения / включения приложения

См .: Онлайн и офлайн события .

Когда ваше приложение обнаруживает событие online после пробуждения компьютера, вы можете получить любую информацию, которую вы пропустили.

Для старых веб-браузеров вам нужно сделать это более умным способом. На Pusher мы добавили проверку пинг-понга между клиентом и сервером. Если клиент не получает пинг в течение определенного времени, он знает, что существует проблема с подключением. Если сервер отправляет эхо-запрос и не возвращает pong в течение определенного времени, он знает, что есть проблема.

Механизм пинг-понга определен в спецификации , но способ отправки пинга или понга еще не определен в API WebSocket.

Получение пропущенной информации

Большинство серверов реального времени доставляют сообщения только подключенным клиентам. Если клиент не подключен, возможно, из-за временного нарушения работы сети или его компьютера некоторое время спит, эти клиенты пропустят сообщение.

Некоторые платформы предоставляют доступ к сообщениям через историю / кеш. Для тех, кому это не нужно, вам нужно обнаружить проблему (как указано выше), а затем извлечь пропущенные сообщения. Хороший способ сделать это - предоставить временную метку или идентификатор последовательности для каждого сообщения, чтобы вы могли позвонить на свой веб-сервер и сказать «дайте мне все сообщения, начиная с X».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...