如何从WebSocket客户端计算机进入睡眠或应用程序进入后台(iPad上的Safari)中恢复

gstyhher  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(122)

我有一个浏览器客户端JavaScript,它打开一个WebSocket(使用socket.io)来请求一个长时间运行的进程启动,然后在进程完成时获得一个回调。当我得到回调时,我更新网页,让用户知道过程已经完成。
这工作正常,除了在我的iPad上当我切换到另一个应用程序,然后回来(它从来没有得到回调,因为我猜应用程序当时不在线)。我假设同样的事情也会发生在笔记本电脑或其他电脑上,在等待回调时睡眠。
有没有一个标准的方法(或任何方法)来处理这种情况?- 谢谢-谢谢
作为参考,如果您想查看问题页面,请访问http://amigen.perfectapi.com/

k5ifujac

k5ifujac1#

在这种情况下,有几件事需要考虑:

检测应用正在下线/上线

参见:onlineoffline事件
当您的应用在计算机唤醒后检测到online事件时,您可以获取您错过的任何信息。
对于较旧的Web浏览器,您需要以更聪明的方式做到这一点。在Pusher中,我们在客户端和服务器之间添加了一个乒乓检查。如果客户端在一定的时间内没有收到ping,它就知道有连接问题。如果服务器发送ping并且在一定时间内没有收到ping返回,它知道有问题。
在规范中定义了一个乒乓机制,但是在WebSocket API中还没有定义发送ping或pong的方式。

获取遗漏信息

大多数实时服务器只向连接到客户端的客户端发送消息。如果客户端未连接,可能是由于暂时的网络干扰或他们的计算机已经休眠了一段时间,那么这些客户端将错过消息。
一些框架通过历史/缓存提供对消息的访问。对于那些没有的,您需要检测问题(如上所述),然后获取任何丢失的消息。一个很好的方法是为每个消息提供一个时间戳或序列ID,这样你就可以调用你的Web服务器说“给予我X之后的所有消息”。

相关问题