Fråga:
Hur kan WhatsApp ta emot meddelanden när det inte används?
Ram Rachum
2013-04-19 22:21:30 UTC
view on stackexchange narkive permalink

Jag är nyfiken på hur WhatsApp kan ta emot meddelanden när de inte används.

Jag menar, jag förstår att WhatsApp fungerar med internetanslutningen snarare än mobiltelefonnätverket. Föreställ dig att jag inte har rört min telefon på några timmar. I det ögonblicket skickar en vän mig ett meddelande på WhatsApp. Jag får det omedelbart. Betyder det att WhatsApp hela tiden håller internetanslutningen uppkopplad? Betyder det att WhatsApp fungerar som en server och öppnar portar på telefonen? Eller kanske en långvarig HTTP-begäran?

Se även https://www.whatsapp.com/faq/en/s60/20910578
Se även http://highscalability.com/blog/2014/2/26/the-whatsapp-architecture-facebook-bought-for-19-billion.html
Sex svar:
Trebor Rude
2013-04-20 00:01:10 UTC
view on stackexchange narkive permalink

Först trodde jag att detta troligen var en förekomst av Android-moln till enhetsmeddelanden, men det kan inte vara: WhatsApp förklarar inte nödvändiga behörigheter och det fungerar i Eclair ( Android 2.1), medan meddelanden från moln till enhet (och dess ersättning, Google Cloud Messaging) kräver åtminstone Froyo (Android 2.2).

Det är dock troligtvis någon form av push-meddelande-tjänst. Det är omöjligt att säga exakt hur det implementeras utan åtkomst till WhatsApps källkod.

Det är dock relativt lätt att förklara den del av det att kunna ta emot meddelanden när den inte används. Appen har nästan säkert en tjänst som körs i bakgrunden för att checka in med servern regelbundet (eller ta emot server push, eller vad det än gör). När du får ett meddelande dyker upp en avisering.

När det gäller frågan om hur servern kan göra ett tryck, här är en möjlighet (igen, jag kan inte verifiera utan källkod):

  1. WhatsApp startar och öppnar två uttag: En att lyssna på och en att skicka ett meddelande till servern.
  2. WhatsApp börjar lyssna på det första uttaget.
  3. WhatsApp skickar ett meddelande som innehåller ditt telefonnummer och lyssningsuttagets port till servern och väntar på en bekräftelse.
  4. Servern registrerar telefonnummer och portnummer i meddelandet och IP-adressen som meddelandet kom från.
  5. Servern skickar en bekräftelse till appen.
  6. Appen tar emot bekräftelsen och stänger meddelandekontakten.
  7. Ett meddelande med din telefonnummer när destinationen kommer till servern.
  8. Servern använder IP-adressen och portnumret som den har associerat med ditt telefonnummer och använder den informationen för att skicka meddelandet till din telefon.
  9. För att detta ska fungera måste appen övervaka tillståndet för nätverksanslutningen och återställa lyssningsuttaget / skicka registreringsmeddelandet igen vid behov (om IP-adressen till exempel ändras).

Beror Whatsapp på playstore-appen? Citat från Wikipedia-länken: * Det kräver enheter som kör Android 2.2 eller högre som också har Market-applikationen installerad. * Så det kanske inte är exakt det, men bygger verkligen på samma principer. Du kanske vill inkludera lite utdrag från artikelns andra styck för att göra ditt svar mer värdefullt (och få fler röster;)
Du har rätt, @Izzy, Jag borde ha lagt till mer information. Det var dock svårt att göra medan jag satt på Subway och skrev på min SGS3. Jag har uppdaterat svaret nu. :-)
Du pekade i rätt riktning :) Efter din redigering ser det perfekt ut för mig, så +1 :)
Hur kunde servern göra ett tryck? Det är kärnan i frågan.
Jag har uppdaterat mitt svar för att inkludera en möjlighet för hur servern kan åstadkomma en push.
Tack för att du var mer specifik, men jag tror fortfarande att kärnan i frågan inte sågs av din analys. Steg 8 är det besvärliga för mig: Hur "skickar meddelandet till din telefon"? Skicka ett nätverkspaket? Men hur kan din enhet ta emot ett nätverkspaket utan att vara kontinuerligt online? Eller kanske finns det någon form av mekanism som jag inte känner till som gör att anslutningen återupprättas när ett nätverkspaket skickas till din telefon?
Låt mig försöka förklara lite mer: Det finns en resurs som används kontinuerligt. Det är lyssningsuttaget som öppnades av WhatsApp-tjänsten. Den sitter bara där på din telefon och väntar på en inkommande nätverksanslutning (se [lyssna (2)] (http://linux.die.net/man/2/listen) för mer information). Detta kostar i princip inga kostnader för minne, batteriström eller något annat. När WhatsApp-tjänsten registrerar sig på servern skickar den tillräckligt med information för att servern ska kunna upprätta en nätverksanslutning till lyssningsuttaget (genom att ringa [anslut (2)] (http://linux.die.net/man/2/ ansluta).
När du säger "väntar på en inkommande nätverksanslutning" menar du väntar på att en TCP-anslutning ska upprättas? Hur kan den vänta på en sådan sak när telefonen inte är ansluten till Internet? Eller finns det någon form av mekanism som ansluter telefonen till Internet när det finns ett Whatsapp-meddelande att ta emot?
Ja, väntar på en TCP-anslutning. Så länge du inte uttryckligen har stängt av WiFi och mobildata är din telefon ansluten till Internet, även om skärmen är avstängd.
Nat tillåter inte steg 8, även om mobilen är på statisk ip, vilket aldrig kommer att vara fallet. De möjliga sätten är antingen Xmpp eller lång polling http
Det har nödvändigt tillstånd. Det är listat som "ta emot data från Internet" i Play Store. Se http://android.stackexchange.com/a/61794
Tyvärr är inkommande TCP-anslutningar nästan omöjliga på mobila enheter. Den överväldigande majoriteten av dem har inte offentliga IP-adresser, och även om de gör det (t.ex. för IPv6-kompatibla operatörer) filtreras inkommande anslutningar vanligtvis. De flesta applikationer använder idag antingen Googles push-tjänster eller rullar sin egen beständiga klient till serveruttag ( framför allt Facebook). WhatsApp verkar ta en hybrid strategi, enligt min erfarenhet: Om GCM är tillgängligt stängs det ihållande uttaget efter att ha varit inaktiv i några minuter.
Mindless152
2013-07-25 19:23:03 UTC
view on stackexchange narkive permalink

Jag är säker på att WhatsApp INTE öppnar några lyssningsportar. de flesta Internetleverantörer blockerar inkommande förfrågningar, det fungerar inte.

WhatsApp har en tjänst. I grund och botten betyder det att du tekniskt sett aldrig slutar WhatsApp. Så, hur du tar emot meddelanden medan du "inte kör" WhatsApp är exakt samma sätt som du får dem när du kör det.

Klienten, i detta fall WhatsApp, ansluter till servern. Klienten upprätthåller den anslutningen. När servern har något nytt att säga skickar den det till klienten via den anslutningen, och det är allt.

Din första gissning är korrekt.

WhatsApp har ingen riktig utloggningsmekanism. , se detta.

WhatsApp har ingen utloggningsmekanism. Applikationen är utformad för att alltid vara ansluten så att du snabbt får dina meddelanden, även när du inte aktivt använder din telefon. Detta liknar hur SMS fungerar och låter WhatsApp-meddelanden levereras nästan omedelbart.

Din [länk] (http://www.whatsapp.com/faq/en/nokia/20910578) är för Nokia - jag kunde inte hitta en liknande fråga för Android på deras webbplats. Är du säker på att detsamma gäller Android? Denna [Fråga från deras vanliga frågor om Android] (http://www.whatsapp.com/faq/en/android/20887936) indikerar att den använder en PUSH-arkitektur (under avsnittet "Tar meddelanden fortfarande för lång tid att nå din telefon? ") - snarare än en ständigt ansluten server / klient.
@DylanYaga är korrekt. Se t.ex. sista stycket i [detta svar] (http://android.stackexchange.com/a/32347/16575) och [Trebors svar här] (http://android.stackexchange.com/a/43974/16575).
Detta verkar vara det mest logiska. Många gånger kallas dessa tjänster för push-tjänster, men jag kan inte föreställa mig att klienten skulle öppna en port och faktiskt fungera som en lokal server. Det skulle verkligen orsaka säkerhetsproblem.
black
2014-02-17 17:49:58 UTC
view on stackexchange narkive permalink

Deras FAQ föreslår att de använder GCM. Kontrollera svaret på "Det tar fortfarande för lång tid att nå meddelanden till din telefon?"

Du har rätt i att FAQ föreslår att, men som Trebor Rude påpekar, har appen inte nödvändigt tillstånd, så de kan inte använda GCM själv.
Det har nödvändigt tillstånd. Det är listat som "ta emot data från Internet" i Play Store. Se http://android.stackexchange.com/a/61794
Enligt vad jag har sett använder de GCM om det är tillgängligt. Om det av någon anledning inte är tillgängligt (t.ex. på en enhet utan Play-tjänster eller om den filtreras av nätverket) hålls uttaget på obestämd tid.
Dickson
2016-02-06 05:35:04 UTC
view on stackexchange narkive permalink

Whatsapp som andra appar körs som tjänst. (Du är alltid ansluten) Meddelanden som skickas till dig lagras på whatsapp-servern till 30 dagar, inom vilken period din whatsapp ska vara aktiv för att ta emot och bekräfta mottagandet av meddelandet. Enskilda konton lagras med användarens telefonnummer @ whatsapp.net

**30 dagar**. Vänligen länka källan för det faktum
Nasir
2019-08-02 11:54:08 UTC
view on stackexchange narkive permalink

Jag tycker att det borde vara så här:

När whatsapp var nytt, skulle det ha använt PNS-baserad lösning, den här PNS skulle bara väcka enheten och när den vaknar kan den skapa en uttagsanslutning till whatsapp-servern.

Efter när whatsapp är populärt nu kommer de flesta enheter att komma som inbyggd applikation och inbyggd applikation kommer inte att dödas. I min samsung s8 kan jag inte avinstallera whatsapp, energisparläge kan inte döda det

Revanth G
2020-01-10 07:20:11 UTC
view on stackexchange narkive permalink

Google upprätthåller anslutningen med Android och APN-servern upprätthåller anslutningen med Apple-enheter, utan gcm eller fcm kan ingen tredje part skicka push-meddelanden till Android-enheter.



Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 3.0-licensen som det distribueras under.
Loading...