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