WebSockets 能耗

WebSockets Energy Consumption

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

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

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

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

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

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

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

因此,当连接处于空闲状态时,WiFi 可以放心地进入休眠状态,从而最大限度地减少功耗。但是有一些缺点:它不检测连接丢失,因此您必须实施乒乓解决方案,如果 ping 失败则尝试重新连接。 ping 循环会对 CPU 使用和功耗产生影响,但它会比一直处于 "On" 状态的 WiFi 低得多。当然,在睡眠模式下你将失去接收数据的能力。

来源:拥有 Android 和 WebSockets 经验。