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