29 votes

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

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 du téléphone portable. Imaginez que je n'ai pas touché à mon téléphone depuis des heures. À ce moment-là, un ami m'envoie un message sur WhatsApp. Je le reçois immédiatement. Cela signifie-t-il que WhatsApp garde la connexion Internet connectée à tout moment ? Est-ce que cela signifie 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 ?

0 votes

0 votes

22voto

Trebor Rude Points 1044

Au début, j'ai pensé qu'il s'agissait probablement d'un cas de Messagerie Android entre le nuage et l'appareil mais ce n'est pas possible : WhatsApp ne déclare pas les autorisations nécessaires, et il fonctionne sous Eclair (Android 2.1), alors que la messagerie cloud to device (et son remplaçant, Google Cloud Messaging) nécessite au moins Froyo (Android 2.2).

Cependant, il est plus probable que ce soit une sorte de service de notification push . Il est impossible de dire exactement comment elle est mise en œuvre sans avoir accès au code source de WhatsApp.

La partie concernant la possibilité de recevoir des messages lorsqu'elle n'est pas utilisée est relativement facile à expliquer. L'application a très certainement un service qui s'exécute en arrière-plan pour vérifier périodiquement le serveur (ou recevoir le push du serveur, ou quoi qu'il en soit). Lorsque vous recevez un message, le service fait apparaître 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 le code source) :

  1. WhatsApp démarre et ouvre deux sockets : Une pour écouter et une 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 du socket 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 du message ainsi que 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 connecteur 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 devrait surveiller l'état de la connexion réseau et réinitialiser le socket d'écoute / renvoyer le message d'enregistrement lorsque cela est nécessaire (si l'adresse IP change, par exemple).

2 votes

Whatsapp dépend-il de l'application Playstore ? Citation du lien Wikipedia : Elle nécessite des appareils fonctionnant sous Android 2.2 ou plus et sur lesquels l'application Market est également installée. Ce n'est donc peut-être pas exactement cela, mais c'est certainement basé sur les mêmes principes. Vous pourriez cependant inclure un extrait du deuxième paragraphe de l'article pour donner plus de valeur à votre réponse (et recevoir plus de votes positifs ;).

0 votes

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

0 votes

Vous étiez dans la bonne direction :) Après ta modification, ça me semble parfait, donc +1 :)

8voto

Mindless152 Points 89

Je suis certainement sûr que WhatsApp n'ouvre PAS de ports d'écoute. La plupart des FAI bloquent les requêtes entrantes, cela ne fonctionnerait pas.

WhatsApp a un service. En gros, ça veut dire que techniquement, tu ne quittes jamais WhatsApp. Ainsi, la façon dont vous recevez les messages lorsque vous n'exécutez pas WhatsApp est exactement la même que celle dont 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, voir ceci .

WhatsApp ne dispose pas d'un 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. Ce système est similaire à celui des SMS et permet aux messages WhatsApp d'être délivrés presque instantanément.

2 votes

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 ? Voici Question tirée de leur FAQ Android indique qu'il utilise une architecture PUSH (dans la section "Les messages mettent-ils toujours trop de temps à atteindre votre téléphone ?") - plutôt qu'un serveur/client constamment connecté.

2 votes

@DylanYaga est correct. Voir, par exemple, le dernier paragraphe de cette réponse y Réponse de Trebors ici .

0 votes

Cela semble le plus logique. Souvent, ces services sont appelés services push, mais je ne peux pas imaginer que le client ouvre un port et agisse en fait comme un serveur local. Cela poserait certainement des problèmes de sécurité.

2voto

black Points 121

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

0 votes

Vous avez raison de dire que la FAQ le suggère, mais comme le souligne Trebor Rude, l'application n'a pas l'autorisation nécessaire, elle ne peut donc pas utiliser le MCG lui-même.

2 votes

Il a l'autorisation requise. Elle est listée comme "recevoir des données d'Internet" dans le Play Store. Voir Android.stackexchange.com/a/61794

2 votes

D'après ce que j'ai vu, ils utilisent le 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.

0voto

Dickson Points 1

Whatsapp, comme d'autres applications, fonctionne comme un service (vous êtes toujours connecté). Les messages qui vous sont envoyés sont stockés sur le serveur de 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 votes

30 jours . S'il vous plaît lien source pour ce fait

0voto

Nasir Points 101

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

Lorsque whatsapp était nouveau, il aurait utilisé une solution basée sur un PNS, ce PNS réveillait simplement l'appareil et une fois qu'il était réveillé, il pouvait créer une connexion socket au serveur whatsapp.

Après quand whatsapp est populaire maintenant la plupart des dispositifs son venir comme application native et application native ne sera pas tué. Dans mon Samsung S8, je ne peux pas désinstaller Whatsapp, le mode économie d'énergie ne peut pas le tuer.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X