我對WhatsApp在不使用時如何接收消息感到好奇。
我的意思是,我知道WhatsApp使用Internet連接而不是手機網絡來工作。想像一下我幾個小時都沒有觸摸手機。那時,一個朋友在WhatsApp上給我發送了一條消息。我馬上知道。這是否意味著WhatsApp始終保持Internet連接連接?這是否意味著WhatsApp充當服務器,打開電話上的端口?還是一個長時間運行的HTTP請求?
我對WhatsApp在不使用時如何接收消息感到好奇。
我的意思是,我知道WhatsApp使用Internet連接而不是手機網絡來工作。想像一下我幾個小時都沒有觸摸手機。那時,一個朋友在WhatsApp上給我發送了一條消息。我馬上知道。這是否意味著WhatsApp始終保持Internet連接連接?這是否意味著WhatsApp充當服務器,打開電話上的端口?還是一個長時間運行的HTTP請求?
起初,我以為這很可能是 Android雲到設備消息傳遞的實例,但事實並非如此:WhatsApp並未聲明必要的權限,並且可以在Eclair( Android 2.1),而云到設備的消息傳遞(及其替代品Google Cloud Messaging)至少需要Froyo(Android 2.2)。
不過,它很可能是某種推送通知服務。在沒有訪問WhatsApp的源代碼的情況下,不可能確切地說出它是如何實現的。
關於它在不使用時能夠接收消息的部分相對容易解釋。該應用程序幾乎可以肯定有一個服務,該服務在後台運行以定期向服務器簽入(或接收服務器推送或執行的任何操作)。當您收到消息時,服務會彈出通知。
關於服務器如何執行推送的問題,這是一種可能性(同樣,如果沒有源代碼,我將無法驗證):
為此,應用程序需要監視網絡連接狀態並在必要時重置偵聽套接字/重新發送註冊消息(例如,如果IP地址更改)。
我當然可以確定WhatsApp不會打開任何監聽端口。大多數ISP會阻止傳入的請求,這將不起作用。
WhatsApp擁有服務。基本上,這意味著從技術上講,您永遠不會退出WhatsApp。因此,“不運行”時接收消息的方式與運行WhatsApp時接收消息的方式完全相同。
客戶端(在本例中為WhatsApp)連接到服務器。客戶端維護該連接。當服務器上有新內容要說時,它會通過該連接將其發送給客戶端,僅此而已。
您的第一個猜測是正確的。
WhatsApp沒有真正的註銷機制,請參見。
WhatsApp沒有註銷機制。該應用程序旨在始終保持連接狀態,以便即使您沒有積極使用手機也可以快速接收消息。這類似於SMS的工作方式,並允許WhatsApp消息幾乎立即發送。
他們的常見問題解答建議他們使用GCM。檢查“消息是否仍需要很長時間才能到達手機?”
Whatsapp像其他應用一樣作為服務運行。(您始終保持連接狀態)發送給您的消息將存儲在whatsapp服務器上直到30天,在此期間您的whatsapp應該處於活動狀態以接收和確認收到消息。個人帳戶中存儲著用戶電話號碼@ whatsapp.net
我認為應該是這樣的:
當whatsapp是新的時,它將使用基於PNS的解決方案,該PNS只會喚醒設備,一旦喚醒,它就可以創建套接字連接到whatsapp服務器。
當whatsapp如今流行之後,作為本機應用程序和本機應用程序而來的大多數設備都不會被殺死。在我的三星s8中,我無法卸載whatsapp,省電模式無法將其殺死
Google保持與android的連接,而apns服務器保持與Apple設備的連接,沒有gcm或fcm的情況下,任何第三方都無法向Android設備發送推送通知。