Подтвердить что ты не робот

Потребление энергии в WebSockets

На мобильном устройстве (iPhone/Android), что влияет на потребление батареи, внедряя WebSockets vs HTTP?

Предположим, что я создаю приложение для обмена мгновенными сообщениями и имею два варианта:

  • Положитесь на Push Notifications, чтобы уведомить устройство о новом сообщении, а затем выберите это сообщение через API REST.
  • Установите соединение WebSocket, когда пользователь запускает приложение, и поддерживайте это соединение, пока приложение активно. Сервер перенаправляет все сообщения непосредственно на устройство, вместо использования Push-уведомлений.

Кто-то сказал мне, что поддерживать постоянное соединение с WebSocket было бы огромным зарядом батареи, потому что требуется, чтобы антенна постоянно работала, а не отключалась после каждого запроса - но это правда?

Этот ответ предполагает, что на iOS каждое устройство постоянно поддерживает постоянное соединение с услугой Push Notification (похоже, похоже на WebSockets), так что это не означает, t, которые предполагают, что антенна устройства работает 24/7 в любом случае?

Дополнительные накладные расходы на HTTP-запросы были бы весьма незначительными для приложения мгновенного обмена сообщениями, но в приложении, где большое количество элементов необходимо загружать постоянно, постоянное соединение с WebSocket было бы очень полезно. Любое понимание поддержки долгосрочных соединений WebSocket на мобильных устройствах (особенно в отношении потребления батареи) было бы чрезвычайно полезно!

4b9b3361

Ответ 1

Решение Pure WebSockets/TCP (без пакетов ping-pong) в состоянии ожидания даже не обнаруживает потерю соединения, поскольку оно не отправляет никаких данных. После того, как произошло рукопожатие, предполагается, что соединение установлено до тех пор, пока что-то не закроет сокет, или отправитель попытается отправить некоторые данные, и обнаружено, что больше нет связи (в этом случае сокет иногда закрывается автоматически, но я не буду считать на нем).

Итак, когда соединение находится в состоянии ожидания, Wi-Fi может перейти в состояние ожидания без беспокойства и, следовательно, минимизировать потребление энергии. Но есть некоторые недостатки: он не обнаруживает потери связи, поэтому вам нужно реализовать решение для пинг-понга, пытаясь снова подключиться, если ping не удался. Пинг-контур будет влиять на потребление ЦП и энергопотребление, но он будет намного ниже, чем WiFi, который постоянно находится в состоянии "On". Конечно, вы потеряете возможность получать данные в режиме сна.

Источник: собственные приложения для Android и WebSockets.