Comment WhatsApp peut-il recevoir des messages lorsqu'il n'est pas utilisé?


23

Je suis curieux de savoir comment WhatsApp est capable de recevoir des messages lorsqu'il n'est pas utilisé.

Je veux dire, je comprends que WhatsApp fonctionne en utilisant la connexion Internet plutôt que le réseau de téléphone portable. Imaginez que je n'ai pas touché mon téléphone depuis des heures. À ce moment, un ami m'envoie un message sur WhatsApp. Je l'obtiens immédiatement. Cela signifie-t-il que WhatsApp maintient la connexion Internet connectée à tout moment? Est-ce à dire que WhatsApp agit comme un serveur, ouvrant des ports sur le téléphone? Ou peut-être une requête HTTP de longue durée?



Réponses:


18

Au début, je pensais qu'il s'agissait très probablement d'une instance de messagerie cloud vers appareil Android , mais cela ne peut pas être: WhatsApp ne déclare pas les autorisations nécessaires, et cela fonctionne dans Eclair (Android 2.1), tandis que la messagerie cloud vers appareil ( et son remplacement, Google Cloud Messaging) nécessitent au moins Froyo (Android 2.2).

Cependant, il s'agit très probablement d'une sorte de service de notification push . Il est impossible de dire exactement comment il est mis en œuvre sans accéder au code source de WhatsApp.

La partie sur le fait qu'il puisse recevoir des messages lorsqu'il n'est pas utilisé est cependant relativement facile à expliquer. L'application a presque certainement un service qui s'exécute en arrière-plan pour se connecter périodiquement avec le serveur (ou recevoir la poussée du serveur, ou quoi que ce soit). Lorsque vous recevez un message, le service affiche une notification.

Quant à la question de savoir comment le serveur pourrait faire un push, voici une possibilité (encore une fois, je ne peux pas vérifier sans code source):

  1. WhatsApp démarre et ouvre deux sockets: un pour écouter et un pour envoyer un message au serveur.
  2. WhatsApps commence à écouter sur le premier socket.
  3. WhatsApp envoie un message contenant votre numéro de téléphone et le port de la prise d'écoute au serveur et attend un accusé de réception.
  4. Le serveur enregistre les numéros de téléphone et de port dans le message et l'adresse IP d'où provient le message.
  5. Le serveur envoie un accusé de réception à l'application.
  6. L'application reçoit l'accusé de réception et ferme le socket de message.
  7. Un message avec votre numéro de téléphone comme destination arrive sur le serveur.
  8. Le serveur utilise l'adresse IP et le numéro de port qu'il a associés à votre numéro de téléphone et utilise ces informations pour envoyer le message à votre téléphone.

Pour que cela fonctionne, l'application doit surveiller l'état de la connexion réseau et réinitialiser la prise d'écoute / renvoyer le message d'enregistrement si nécessaire (si l'adresse IP change, par exemple).


2
Whatsapp dépend-il de l'application Playstore? Citant le lien Wikipedia: Cela nécessite des appareils fonctionnant sous Android 2.2 ou supérieur sur lesquels l'application Market est également installée. Ce n'est peut-être pas exactement cela, mais est certainement basé sur les mêmes principes. Vous voudrez peut-être inclure un extrait du 2ème paragraphe de l'article, cependant, pour rendre votre réponse plus précieuse (et recevoir plus de votes positifs;)
Izzy

Vous avez tout à fait raison, @Izzy, j'aurais dû ajouter plus de détails. C'était difficile à faire quand j'étais assis à Subway pour écrire sur mon SGS3. J'ai mis à jour la réponse maintenant. :-)
Trebor Rude

3
Nat n'autorisera pas l'étape 8, même si le mobile est sur IP statique, ce qui ne sera jamais le cas. les moyens possibles sont soit Xmpp soit un long polling http

1
Il dispose de l'autorisation requise. Il est répertorié comme «recevoir des données d'Internet» dans le Play Store. Voir android.stackexchange.com/a/61794
nyuszika7h

2
Malheureusement, les connexions TCP entrantes sont presque impossibles sur les appareils mobiles. La grande majorité d'entre eux n'ont pas d'adresse IP publique, et même s'ils le font (par exemple pour les opérateurs compatibles IPv6), les connexions entrantes sont généralement filtrées. Aujourd'hui, la plupart des applications utilisent les services push de Google ou déploient leur propre connexion persistante de client à serveur (notamment Facebook). WhatsApp semble adopter une approche hybride, selon mon expérience: si GCM est disponible, le socket persistant est fermé après avoir été inactif pendant quelques minutes.
lxgr

8

Je suis sûr que WhatsApp n'ouvre aucun port d'écoute. la plupart des FAI bloquent les demandes entrantes, cela ne fonctionnerait pas.

WhatsApp a un service. Fondamentalement, cela signifie que techniquement, vous ne quittez jamais WhatsApp. Ainsi, la façon dont vous recevez des messages lorsque vous "n'exécutez pas" WhatsApp est exactement la même manière que vous les recevez lorsque vous l'exécutez.

Le client, dans ce cas WhatsApp, se connecte au serveur. Le client maintient cette connexion. Lorsque le serveur a quelque chose de nouveau à dire, il l'envoie au client via cette connexion, et c'est tout.

Votre première supposition est correcte.

WhatsApp n'a pas de véritable mécanisme de déconnexion, voyez ceci .

WhatsApp n'a pas de mécanisme de déconnexion. L'application est conçue pour être toujours connectée afin que vous receviez vos messages rapidement, même lorsque vous n'utilisez pas activement votre téléphone. Cela est similaire à la façon dont SMS fonctionne et permet aux messages WhatsApp d'être livrés presque instantanément.


2
Votre lien est pour Nokia - Je n'ai pas pu trouver une question similaire pour Android sur leur site. Êtes-vous sûr que la même chose s'applique à Android? Cette question de leur FAQ Android indique qu'il utilise une architecture PUSH (dans la section "Les messages prennent-ils encore trop de temps pour atteindre votre téléphone?") - plutôt qu'un serveur / client constamment connecté.
Dylan Yaga

2
@DylanYaga est correct. Voir par exemple le dernier paragraphe de cette réponse et la réponse Trebours ici .
Izzy

Cela semble le plus logique. Plusieurs fois, ces services sont appelés services push, mais je ne peux pas imaginer que le client ouvrirait un port et agirait en fait comme un serveur local. Cela entraînerait certainement des problèmes de sécurité.
SPRBRN

1

Leur FAQ suggère qu'ils utilisent GCM. Vérifiez la réponse à "Les messages mettent-ils encore trop de temps à atteindre votre téléphone?"


Vous avez raison, la FAQ le suggère, mais comme le souligne Trebor Rude, l'application n'a pas les autorisations nécessaires, elle ne peut donc pas utiliser GCM elle-même.
Dan Hulme

2
Il dispose de l'autorisation requise. Il est répertorié comme «recevoir des données d'Internet» dans le Play Store. Voir android.stackexchange.com/a/61794
nyuszika7h

2
D'après ce que j'ai vu, ils utilisent GCM s'il est disponible. S'il n'est pas disponible pour une raison quelconque (par exemple sur un appareil sans services Play ou s'il est filtré par le réseau), le socket est conservé indéfiniment.
lxgr

0

Whatsapp comme les autres applications est exécuté en tant que service. (Vous êtes toujours connecté) Les messages qui vous sont envoyés sont stockés sur le serveur Whatsapp jusqu'à 30 jours, période pendant laquelle votre Whatsapp doit être actif pour recevoir et accuser réception du message. Les comptes individuels sont stockés avec le numéro de téléphone de l'utilisateur @ whatsapp.net


1
30 jours . Veuillez lier la source pour ce fait
beeshyams

0

Je pense que ça devrait être comme ça:

Lorsque Whatsapp était nouveau, il aurait utilisé une solution basée sur PNS, ce PNS ne ferait que réveiller l'appareil et une fois qu'il se réveille, il peut créer une connexion socket avec le serveur Whatsapp.

Après que WhatsApp soit populaire, la plupart des appareils sont désormais disponibles en tant qu'application native et application native. Dans mon Samsung S8, je ne peux pas désinstaller WhatsApp, le mode d'économie d'énergie ne peut pas le tuer

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.