当手机浏览器具有打开的连接并且用户锁定屏幕时,在某个时候他们将不再具有WebSocket连接。
发生这种情况时会触发哪些事件?是否调用了WebSocket.onerror
或WebSocket.onclose
处理程序,如果是,当屏幕锁定/应用挂起时,或者当应用再次启动时,是否会发生这种情况?
(还有一个奖励问题:这是标准化的,还是浏览器的行为不同,如果是,如何
?我自己做了一些测试,答案似乎是:没有触发任何事件。尽管连接确实断开,但不会触发error
或close
事件,即使浏览器重新启动也是如此。因此,处理此问题的主要方法似乎是定期检查连接状态,并在需要时重新连接 - 在连接断开服务器端的情况下呈指数退避。(或者让一个库为你做这件事,尽管我还没有找到一个正确维护的基于客户端浏览器的 WebSocket 库来做到这一点。
本文的作者似乎证实了这一点:
移动设备引入了一类新的连接问题;如果移动设备被锁定、进入睡眠状态或应用程序被移动到后台,则活动的 WebSocket 连接可能会变得无响应,并且无法正确关闭。