Intereting Posts
Как ускорить сборку android ndk Android – OpenGL ES 2.0: эмулятор (работает) – устройство (не) SetURLStreamHandlerFactory и "java.lang.Error: Factory уже установлен" Преобразование точки касания View в местоположение экрана HTML WebView Я получаю «Command Not Found», когда я пытаюсь запустить Android Emulator на Mac OS X Получите Мобильный нет от реального устройства Где вы загружаете ошибки для продуктов и сервисов Google Android / iOS (AppInvites, Maps и т. Д.)? S3 (GT-I9300) Ошибка предварительного просмотра камеры Android: Получить текущую ориентацию устройства Предложение SearchView не работает с одним символом Android – для измерения времени между двумя нажатиями кнопок Как закончить HandlerThreads? Почему он говорит «устарело» для метода, когда его единственный, который я могу использовать для выбранного уровня API? CustomTabs показывает ERR_UNKNOWN_URL_SCHEME после перенаправления 302 Как определить, когда телефон отвечает или отклонен

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

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

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

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

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

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

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

Solutions Collecting From Web of "Потребление энергии в WebSockets"

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

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

Источник: собственный опыт работы с Android и WebSockets.