Могу ли я заставить веб-сайт продолжать работать в режиме ожидания?

Я разрабатываю простое веб-приложение, которое будет использоваться для отслеживания положения GPS. Общая идея заключается в том, что каждые пару минут он будет отправлять местоположение GPS обратно на сервер с запросом AJAX. Обратите внимание, что устройство будет постоянно подключено к источнику питания.

В идеале нам это нужно, чтобы продолжать работать в фоновом режиме, когда экран выключен. Я провел тест с Nexus, работающим под управлением Lollipop и Chrome, и имел ограниченный успех. Запросы продолжают отправляться в течение 5-10 минут после выключения экрана, затем прекращаются.

Как ни странно, до сих пор появляются случайные просьбы. Для моего тестирования я делаю 10-секундный интервал запроса, в реальном мире это будет больше похоже на 5-10 минут. Какая-то очередь? Если это вещь, и я могу понять, как надежно с ней работать, это может сработать.

Можно ли как-то заставить их отправлять сообщения бесконечно? Настройки в ОС/браузере или в другом браузере (или в обоих)?

Ответы (1)

HTML5 ServiceWorker, похоже, поддерживает то, что вам нужно, с помощью функции BackgroundSync / PeriodicSync. Однако, поскольку работа над ServiceWorker все еще продолжается, я не уверен, какие функции в настоящее время реализованы в Chrome. Я не смог найти хороших демонстраций этого, только предложения: https://github.com/clelland/BackgroundSync/blob/master/explainer.md

Cordova недавно добавила поддержку фоновой синхронизации: https://github.com/MobileChromeApps/cordova-plugin-service-worker-background-sync , но для этого требуется создать приложение для Android.

Без явной поддержки браузером такой функции все ваши специальные усилия будут пустой тратой времени, поскольку ваш код гарантированно будет работать только тогда, когда браузер находится на переднем плане. В противном случае ОС может убить сам браузер и не сможет продолжить выполнение кода вашей страницы. Функция периодической синхронизации, предоставляемая ServiceWorker, подразумевает, что браузер будет планировать периодические задания с использованием соответствующих служб Android, как вы делаете это в приложении Java.

Спасибо! Я посмотрю на эту первую ссылку в ближайшие пару дней и посмотрю, смогу ли я собрать быстрое доказательство концепции для тестирования. Если нет, Cordova тоже может быть вариантом — запуск приложения, которое представляет собой не что иное, как iframe, указывающий на фактический веб-сайт, может делать то, что мне нужно, без ущерба для бюджета. Доложит.