WebSockets Consommation D'Énergie

Sur un appareil mobile (iPhone / Android), Quel est l'impact sur la consommation de la batterie en implémentant WebSockets vs HTTP?

Supposons que je construise une application de messagerie instantanée et que j'ai deux options:

  1. comptez sur les Notifications Push pour notifier le périphérique d'un nouveau message, puis récupérez ce message via une API REST.
  2. établissez une connexion WebSocket lorsque l'utilisateur lance l'application et maintenez cette connexion pendant que l'application est active. Le serveur transmet tous les messages directement sur l'appareil, plutôt que D'utiliser des Notifications Push.

Quelqu'un m'a dit que le maintien d'une connexion WebSocket persistante serait un énorme fardeau de batterie car il nécessite que l'antenne soit constamment active, plutôt que de s'éteindre après chaque demande - mais est-ce vraiment vrai?

Cette réponse suggère que sur iOS, chaque périphérique maintient une connexion persistante avec le service de Notification Push à tout moment (similaire à WebSockets, je suppose), donc cela ne suggère-t-il pas que l'antenne de l'appareil fonctionne 24/7 de toute façon?

La surcharge supplémentaire des requêtes HTTP serait assez insignifiante pour une application de messagerie instantanée, mais dans une application où un grand nombre d'éléments doivent être téléchargés en permanence, une connexion WebSocket persistante serait très utile. Toute idée sur le maintien des connexions WebSocket à long terme sur les appareils mobiles (en particulier en ce qui concerne la consommation de la batterie) serait extrêmement utile!

30
demandé sur Community 2015-03-26 18:11:04

1 réponses

La solution pure WebSockets/TCP sockets (sans paquets ping-pong) à l'état inactif ne détecte même pas une perte de connexion car elle n'envoie aucune donnée. Une fois la connexion établie, il suppose que la connexion est établie jusqu'à ce que quelque chose ferme le socket ou que l'expéditeur tente d'envoyer des données et il est détecté qu'il n'y a plus de connexion (dans ce cas, le socket est parfois fermé automatiquement, mais je ne compterais pas dessus).

Ainsi, lorsque la connexion est en WiFi pourrait aller à l'état de sommeil sans souci et donc minimiser la consommation d'énergie. Mais il y a un inconvénient: il ne détecte pas la perte de connexion, vous devez donc implémenter une solution ping-pong avec une tentative de reconnexion Si ping a échoué. La boucle ping aura un impact sur L'utilisation du processeur et la consommation d'énergie, mais elle sera beaucoup plus faible que le WiFi qui est constamment à l'état "On". Bien sûr, vous perdrez la possibilité de recevoir des données en mode veille.

Source: posséder Android et WebSockets expérience.

20
répondu Paul 2015-09-25 23:09:30