11

希望瞭解像Google雲消息傳遞(以前稱爲Google Cloud到設備消息傳遞)這樣的推送通知的基本原因更加電池友好,適用於雲< - >設備通信?爲什麼以及如何推送通知(如GCM)電池效率?

在我看來,替代技術涉及「輪詢」(通過TCP/IP),同時保持連接處於CONNECTED狀態,使​​用保持活動。還是有更好的?

我對GCM有限的認識是,它也使用TCP/IP和Keepalive,但客戶端從不輪詢服務器的狀態。相反,服務器通知客戶有關傳入消息,而訂閱特定類型消息的應用程序會異步通知消息。此外,通用的GCM連接在多個應用之間共享,從而允許設備電子設備在「協調」的時間進行休眠/休眠,而不需要多個應用程序保持電子設備比其需要的更「開啓」(電活動)。這是正確的理解嗎?或者還有更多嗎?

最後,這與使用Keepalive的TCP/IP的MQTT相比如何? MQTT(顯然)電池效率低於GCM的原因是什麼?

回答

10

它的高效率的主要原因之一是它的規模很好。 Android設備保持一個連接對GCM服務器開放,以偵聽設備上所有應用程序的通知,然後將消息路由到他們打算使用的相應應用程序。這比保持網絡連接對於希望具有某種推送通知的每個應用程序開放的可擴展性和高效性要高得多。

即使電話閒置,連接本身也可能是處於打開狀態的TCP連接。它可以在收到數據時喚醒設備。我會想象有一些心跳ping也可以在必要時重新建立連接。

插座的東西可能是你自己可以做的事情,但就像我之前說的那樣,效率的主要原因是所有應用程序的單一連接。非常可擴展。

+6

GCM特別節省電池的另一個原因是「collapse_key」和「delay_while_idle」消息參數的組合。當只有消息序列中的最新消息很重要時(例如來自足球比賽的得分通知),空閒設備不會收到不必要的消息,而只會在設備醒來時收到最近的消息。較舊的消息被GCM服務器中較新的消息取代,只有最新的消息被傳送,這導致較少的電池消耗。 – Piovezan