gpt4 book ai didi

javascript - Cordova:套接字、PushNotifications 或重复轮询服务器?

转载 作者:搜寻专家 更新时间:2023-10-31 23:30:04 28 4
gpt4 key购买 nike

我有一个 Cordova/PhoneGap 应用。

当应用程序在前台运行时,我想要一些类似的实时更新。

完成此任务所需资源最少的方法是什么?我应该使用 socket.io、pushnotification 插件,还是每隔几秒就发出一次 API 请求?什么是对设备和服务器的负担最小?

最佳答案

对于移动设备,您需要在电池使用情况、网络使用情况和更新及时性之间进行经典权衡。

内置于移动操作系统中的推送通知服务旨在尝试为您提供所有这些权衡中的最佳选择,它在全局范围内运行,而不是按应用程序运行(通常效率更高),尽管它让您对实现的控制有所减少详情。

在比较 socket.io 与轮询 API 时,socket.io(更具体地说是 webSockets)被设计为一种从服务器获取异步通知的更有效方式。

在 socket.io 中,您创建到服务器的套接字连接。该连接在您的应用程序期间(在前台)保持打开状态,并且在任何时候,服务器都可以向您发送数据,您将在发送后立即收到它。由于连接可能会丢失并且端点不一定会立即收到通知,因此 socket.io 使用在客户端和服务器之间定期发送的小心跳数据包。如果心跳数据包停止响应,则 socket.io 假定连接已终止并关闭原始套接字并尝试创建新连接。它以透明和自动的方式为您完成所有这些工作。然而,这种心跳对移动设备有一些不良影响。发送的数据很小,所以这并不是真正的带宽使用问题,但移动设备的每次传输都使用电池,如果长时间运行,这可能是相关的。 socket.io 中的心跳间隔是可配置的。可以将其关闭(不推荐)或将时间间隔设置为更长的时间。

从服务器端来看,操作系统推送服务和 socket.io 都非常高效,因为服务器仅在有实际要发送给客户端的内容时才工作,而不必在没有内容的情况下发出常规请求做。

如果您想要的更新间隔很长(例如,每小时一次)或者它通常不会打开并且只是偶尔使用,那么这里轮询的唯一可能的好处是。然后,您可以每小时或按需发送一个 Ajax 调用,而服务器除了应答偶尔的 Ajax 调用外不需要做任何事情。如果所需的时间间隔更短,那么您可能会想要使用一种真正的推送机制(操作系统推送或 socket.io)。

关于javascript - Cordova:套接字、PushNotifications 或重复轮询服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29856618/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com