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

时间:2012-01-13 15:36:10

标签: javascript ipad websocket socket.io

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

这项工作正常,除了在我的iPad上切换到另一个应用程序然后再回来(它从来没有得到回调,因为我猜应用程序当时不在线)。我假设在等待回调时睡在笔记本电脑或其他计算机上会发生同样的事情。

是否有一种标准方式(或任何方式)来处理这种情况?感谢。

作为参考,如果您想查看问题页面,则它位于http://amigen.perfectapi.com/

1 个答案:

答案 0 :(得分:7)

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

检测应用程序是否已开启

请参阅:Online and offline events

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

对于较旧的网络浏览器,您需要以更聪明的方式执行此操作。在Pusher,我们在客户端和服务器之间添加了乒乓检查。如果客户端在一定时间内没有收到ping,则表示存在连接问题。如果服务器发送ping并且在某段时间内没有收到pong,则表示存在问题。

乒乓机制是defined in the spec,但尚未在WebSocket API上定义发送ping或pong的方法。

获取遗漏的信息

大多数实时服务器仅向连接到客户端的消息传递。如果客户端没有连接,可能是由于临时网络干扰或者他们的计算机已经睡了一段时间,那么这些客户端将会错过该消息。

某些框架确实通过历史记录/缓存提供对邮件的访问。对于那些不需要检测问题的人(如上所述),然后获取任何错过的消息。这样做的一个好方法是为每条消息提供一个时间戳或序列ID,这样你就可以打电话给你的网络服务器,说“从X开始给我所有的消息”。