WebSockets 能耗
Posted
技术标签:
【中文标题】WebSockets 能耗【英文标题】:WebSockets Energy Consumption 【发布时间】:2015-05-30 16:22:45 【问题描述】:在移动设备(iPhone/android)上,实现 WebSocket 与 HTTP 对电池消耗有何影响?
假设我正在构建一个即时消息应用程序并且有两个选择:
-
依靠推送通知将新消息通知设备,然后通过 REST API 获取该消息。
在用户启动应用程序时建立 WebSocket 连接,并在应用程序处于活动状态时保持该连接。服务器将所有消息直接转发到设备,而不是使用推送通知。
有人告诉我,保持持久的 WebSocket 连接会消耗大量电量,因为它需要天线始终处于活动状态,而不是在每次请求后关闭 - 但真的是这样吗?
This 的回答表明,在 ios 上,每台设备都始终与推送通知服务保持持久连接(我想类似于 WebSockets),所以这不表明设备的天线正在运行 24/7还是?
HTTP 请求的额外开销对于即时消息应用程序来说是微不足道的,但在需要不断下载大量项目的应用程序中,持久的 WebSocket 连接将非常有用。任何有关在移动设备上维护长期 WebSocket 连接(尤其是关于电池消耗)的见解都会非常有帮助!
【问题讨论】:
【参考方案1】:处于空闲状态的纯 WebSockets/TCP 套接字解决方案(没有 ping-pong 数据包)甚至不会检测到连接丢失,因为它不发送任何数据。一旦发生握手,它假定连接已建立,直到关闭套接字或发送方将尝试发送一些数据并且检测到不再有连接(在这种情况下套接字有时会自动关闭,但我不会计算就可以了)。
因此,当连接处于空闲状态时,WiFi 可以毫无顾虑地进入睡眠状态,从而最大限度地降低功耗。但是有一些缺点:它不会检测连接丢失,因此您必须实施 ping-pong 解决方案,并在 ping 失败时尝试重新连接。 ping 循环会对 CPU 使用率和功耗产生影响,但会比一直处于“开启”状态的 WiFi 低很多。当然,在睡眠模式下您将失去接收数据的能力。
来源:自己的 Android 和 WebSockets 经验。
【讨论】:
那么 FCM 是最好的选择吗?或者还有其他方法可以制作移动即时通讯工具。 请打开您自己的问题。生活中没有简单的方法。以上是关于WebSockets 能耗的主要内容,如果未能解决你的问题,请参考以下文章
Go 实现 WebSockets:1.什么是 WebSockets
WebSockets Tutorial(教程一)————WebSockets简介
Rails 中的 WebSockets:在使用 websockets 时,我们是不是必须在现有应用程序中创建一个新的 WebSocketController?