持久性tcp / ip连接如何保护电池并降低带宽使用?

时间:2013-10-01 08:54:20

标签: push-notification push bandwidth battery persistent-connection

在推送通知机制中,如Apple的推送通知服务,他们使用持久IP连接。

我的问题是,使用持久连接如何节省设备的电池和带宽? 我的印象是,由于连接是持久的,因此设备始终使用WiFi或3G / LTE无线电。

我知道通过持久连接,你不会因没有要求服务器进行更改而浪费带宽,而是服务器会“推送”给你这些更改。但是,我不知道如何保留电池和带宽(因为你有一个始终在线的服务器连接)。

类似的问题可以在这里找到:
How does Android C2DM improve bandwidth useage?
但我认为答案是不够的。

2 个答案:

答案 0 :(得分:0)

它保留电池寿命和带宽使用的方式有点间接。节省的成本是让一个服务维持持久连接,而不是设备上的每个应用程序不断创建/破坏连接并持续使用带宽。

例如,如果您的手机上有Facebook,Instagram和Twitter应用程序,为了使所有内容保持最新,您将有三个应用程序不断轮询服务器以进行更改。

解决方案是让一个服务侦听传入连接,并让该服务通知单个应用程序有更新。

答案 1 :(得分:0)

首先,您必须考虑设备实施的状态机,以控制网络通信造成的功耗。你可以看到它here 在阅读之后,你会看到,正如亚当所说,创建连接对你来说是非常糟糕的电池寿命和轮询是关于创建/破坏连接。

因此,C2DM避免创建连接以提高功耗。最后,节省的原因是:

  1. 持久连接并不意味着设备始终处于全功率状态。它只表示连接未关闭,然后服务器可以向客户端发送消息。
  2. C2DM提供具有不同机制的消息,您可以在GCM Advanced Topics中阅读。因此,它可以配置为仅在设备已处于全功率状态时传递消息
  3. 最后一个因素是GCM如何将消息传递给空闲设备。官方文档中不太清楚,我认为Google Play服务的源代码不可用。尽管如此,您可以通过以下答案获得一些线索here。第一篇评论似乎很有用。
  4. 有一点我不确定:我不知道他们如何保持连接处于低级别。这是我失踪的那件作品。您可以阅读Android C2DM幻灯片15以获得一些解释。它们似乎提供了对状态机的某种巧妙处理。