推送通知(如GCM)的电池效率为何以及如何?

ica*_*s74 17 push-notification android-c2dm mqtt google-cloud-messaging

想要了解推送通知的根本原因,例如谷歌云消息传递(之前称为谷歌云到设备消息传递)更适合电池,用于云< - >设备通信?

在我看来,替代技术涉及"轮询"(通过TCP/IP),同时使用keep-alives将连接保持在CONNECTED状态.还是有更好的东西?

我对GCM的有限承诺是,它还使用TCP/IP和Keepalive,但客户端从不轮询服务器的状态.相反,服务器通知客户端有关传入消息,并且订阅特定类型消息的应用程序将异步通知消息.此外,公共GCM连接在多个应用程序之间共享,因此允许设备电子设备在"协调"时间睡眠/休眠,而没有多个应用程序使电子设备保持比其需要的"开启"(电活动).这是正确的理解吗?或者还有更多吗?

最后,这与使用keepalive的TCP/IP上的MQTT相比如何?MQTT(显然)比GCM电池效率低的原因是什么?

Red*_*dth 15

它效率高的一个主要原因是它可以很好地扩展.Android设备保持对GCM服务器的单个连接,以侦听设备上所有应用程序的通知,然后将消息路由到它们所针对的相应应用程序.这比为希望获得某种推送通知的每个应用程序保持网络连接打开更具可扩展性和效率.

即使手机空闲,连接本身也可能是处于打开状态的TCP连接.它可以在收到数据时唤醒设备.我想也有某种心跳ping可以在必要时重新建立连接.

套接字的东西可能是你自己可以做的事情,但是就像我之前说的那样,效率的主要原因是所有应用程序的单一连接.非常可扩展.

  • GCM特别节省电池的另一个原因是"collapse_key"和"delay_while_idle"消息参数的组合.当只有消息序列中的最新消息很重要时(例如来自足球比赛的得分通知),空闲设备不会接收不必要的消息,而只接收设备唤醒时的最新消息.较旧的消息将被GCM服务器中的较新消息替换,并且仅提供最新消息,从而减少电池消耗. (6认同)