在推送通知机制中,例如 Apple 的推送通知服务,它们使用持久 IP 连接。
我的问题是,使用持久连接如何节省设备的电池和带宽?我的印象是,由于连接是持久的,因此设备始终使用 WiFi 或 3G/LTE 无线电。
我知道通过持久连接,您不会因为没有更改时不向服务器询问更改而浪费带宽,而是服务器会“推送”这些更改给您。但是,我看不出这如何节省电池和带宽(因为您与服务器的连接始终在线)。
可以在此处找到类似的问题:
Android C2DM 如何提高带宽使用率?
但我认为答案还不够。
在推送通知机制中,例如 Apple 的推送通知服务,它们使用持久 IP 连接。
我的问题是,使用持久连接如何节省设备的电池和带宽?我的印象是,由于连接是持久的,因此设备始终使用 WiFi 或 3G/LTE 无线电。
我知道通过持久连接,您不会因为没有更改时不向服务器询问更改而浪费带宽,而是服务器会“推送”这些更改给您。但是,我看不出这如何节省电池和带宽(因为您与服务器的连接始终在线)。
可以在此处找到类似的问题:
Android C2DM 如何提高带宽使用率?
但我认为答案还不够。
首先,您必须考虑设备实现的状态机,以控制网络通信引起的功耗。你可以在这里看到 阅读后你会看到,正如亚当所说,创建连接对你的电池寿命非常不利,而轮询是关于创建/破坏连接的。
因此,C2DM 避免创建连接以提高功耗。最后,节省是由于:
有一点我不确定:我不知道他们如何在低级别保持连接。那就是我缺少的那部分。您可以阅读Android C2DM slide 15 以获得一些解释。似乎它们提供了某种巧妙的状态机处理。
它保持电池寿命和带宽使用的方式有点间接。节省的形式是让一项服务保持持久连接,而不是设备上的每个应用程序都在不断创建/破坏连接并不断使用带宽。
例如,如果您的手机上有 Facebook、Instagram 和 Twitter 应用程序,为了使所有内容保持最新,您将拥有三个应用程序不断轮询服务器以进行更改。
解决方案是让一个服务监听传入连接,并让该服务通知单个应用程序有更新。