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

How do I recover from a WebSocket client computer going to sleep or app going to background (Safari on iPad)

本文关键字:iPad 后台 上的 恢复 Safari 应用程序 状态 WebSocket 客户端 计算机      更新时间:2023-09-26

我有一个浏览器客户端Javascript,它打开一个WebSocket(使用socket.io)来请求启动一个长时间运行的进程,然后在进程完成时得到一个回调。当我得到回调时,我会更新网页,让用户知道这个过程已经完成。

这一切都很好,除了在我的iPad上,当我切换到另一个应用程序然后回来时(它从来没有得到回调,因为我想这个应用程序当时没有在线)。我假设同样的事情也会发生在笔记本电脑或其他在等待回调时睡觉的电脑上。

有没有一种标准的方法(或任何方法)来处理这种情况?谢谢

作为参考,如果您想查看问题页面,请访问http://amigen.perfectapi.com/

在这种情况下需要考虑以下几点:

检测应用程序离线/上线

参见:onlineoffline事件

当您的应用程序在计算机唤醒后检测到online事件时,您可以获得任何遗漏的信息。

对于较旧的web浏览器,您需要以更聪明的方式来做到这一点。在Pusher,我们在客户端和服务器之间添加了一个乒乓检查。如果客户端在一定时间内没有收到ping,它就会知道存在连接问题。如果服务器发送了一个乒乓球,但在一定时间内没有收到乒乓球,它就知道有问题。

规范中定义了乒乓机制,但发送乒乓的方式尚未在WebSocket API上定义。

获取遗漏信息

大多数实时服务器只向已连接的客户端发送消息。如果客户端没有连接,可能是由于暂时的网络干扰,或者他们的计算机已经休眠了一段时间,那么这些客户端将错过消息。

有些框架确实通过历史记录/缓存提供了对消息的访问。对于那些没有的人,你需要检测到问题(如上所述),然后提取任何遗漏的消息。一个很好的方法是为每条消息提供一个时间戳或序列ID,这样你就可以打电话给你的网络服务器说";给我自X〃以来的所有消息;。