android - WebSockets 能耗

标签 android ios http websocket push-notification

在移动设备(iPhone/Android)上,实现 WebSocket 与 HTTP 对电池消耗有何影响?

假设我正在构建一个即时消息应用程序并且有两个选择:

  1. 依靠推送通知将新消息通知设备,然后通过 REST API 获取该消息。
  2. 在用户启动应用时建立 WebSocket 连接,并在应用处于 Activity 状态时保持该连接。服务器将所有消息直接转发到设备,而不是使用推送通知。

有人告诉我,保持持久的 WebSocket 连接会消耗大量电量,因为它需要天线始终处于 Activity 状态,而不是在每次请求后关闭 - 但真的是这样吗?

This答案表明,在 iOS 上,每台设备始终与推送通知服务保持持久连接(我想类似于 WebSockets),所以这是否表明设备的天线无论如何都在 24/7 运行?

HTTP 请求的额外开销对于即时消息应用程序来说是微不足道的,但在需要不断下载大量项目的应用程序中,持久的 WebSocket 连接将非常有用。任何有关在移动设备上维护长期 WebSocket 连接(尤其是关于电池消耗)的见解都会非常有帮助!

最佳答案

处于空闲状态的纯 WebSockets/TCP 套接字解决方案(没有 ping-pong 数据包)甚至不会检测到连接丢失,因为它不发送任何数据。一旦发生握手,它假定连接已建立,直到关闭套接字或发送方将尝试发送一些数据并且检测到不再有连接(在这种情况下套接字有时会自动关闭,但我不会计算就可以了)。

因此,当连接处于空闲状态时,WiFi 可以毫无顾虑地进入休眠状态,从而最大限度地降低功耗。但是有一些缺点:它不会检测连接丢失,因此您必须实现 ping-pong 解决方案,如果 ping 失败则尝试重新连接。 ping 循环会对 CPU 使用率和功耗产生影响,但会远低于 WiFi 一直处于“开启”状态。当然,在 sleep 模式下您将失去接收数据的能力。

来源:自己的 Android 和 WebSockets 经验。

关于android - WebSockets 能耗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29282070/

相关文章:

ios - 带按钮的一个 ViewController 中的多个音频文件

iphone - 如果我只支持 iPhone 4+,我还需要标准分辨率资源吗

自定义矢量上的 Android 投影

java - 插入android数据库

ios - TableView 在某些索引后显示重复数据

c - 如何检查 C 中的文件是否被禁止?

ios - 是否可以将通过 3G 发出的 HTTP 请求与其他请求区分开来

django - 为什么 Django 为我的页面提供下载服务?

java - Android:如何将 ArrayList 的每个值绑定(bind)到一个变量?

Android Studio2.1 preview 5 on ubuntu 打不开项目