作者:雄鹰访谈录 | 来源:互联网 | 2023-01-10 10:56
我有一个CordovaPhoneGap应用程序.当应用程序处于前台时,我希望有一些相似的实时更新.实现这一目标的资源最少的方法是什么?我应该使用socket.io,pushnoti
我有一个Cordova / PhoneGap应用程序.
当应用程序处于前台时,我希望有一些相似的实时更新.
实现这一目标的资源最少的方法是什么?我应该使用socket.io,pushnotification插件,还是每隔几秒钟发一次API请求?设备和服务器上最不重要的是什么?
解决方法:
对于移动设备,您需要在电池使用情况,网络使用情况和更新及时性之间进行经典权衡.
内置于移动操作系统中的推送通知服务旨在为您提供最佳的所有这些权衡,并且它可以全局运行而不是按应用程序运行(通常效率更高),但它可以减少对实现细节的控制.
在比较socket.io与轮询API时,socket.io(更具体地说是webSockets)被设计为从服务器获取异步通知的更有效方式.
在socket.io中,您创建到服务器的套接字连接.该连接在应用程序的持续时间内(在前台)保持打开状态,并且在任何时候,服务器都可以向您发送数据,并且您将在发送数据时立即收到数据.由于连接可能会丢失并且端点不一定立即得到通知,因此socket.io使用在客户端和服务器之间定期发送的小心跳包.如果心跳包停止响应,则socket.io假定连接已经死亡并将关闭原始套接字并尝试创建新连接.它为您透明地自动完成所有这些工作.然而,这种心跳对移动设备有一些不良后果.发送的数据很小,因此它并不是带宽使用的问题,但是来自移动设备的每次传输都使用电池,如果长时间运行则可能是相关的. socket.io中的心跳间隔是可配置的.它可以关闭(不推荐)或时间间隔可以设置为更长的时间.
操作系统推送服务和socket.io都非常有效,因为服务器端只有在实际发送到客户端时才能正常工作,并且无需在没有任何操作的情况下进行常规请求.
这里轮询的唯一可能的好处是,如果你想要的更新间隔很长(例如每小时一次),或者它通常不在,并且只是偶尔使用.然后,您可以每小时或根据需要发送一个Ajax调用,除了回答偶尔的Ajax调用之外,服务器不必执行任何操作.如果所需的时间间隔较短,那么您可能希望使用其中一种真正的推送机制(OS push或socket.io).