当手机屏幕锁定时,WebSocket 连接会发生什么?

Vin*_*ent 8 mobile-safari websocket chrome-for-android mobile-chrome firefox-android

当手机浏览器有一个打开的连接,并且用户锁定屏幕时,那么在某个时刻他们将不再有 WebSocket 连接。

发生这种情况时会触发哪些事件?是WebSocket.onerrorWebSocket.onclose调用处理程序,如果是,是否会在屏幕锁定/应用程序暂停或应用程序再次恢复时发生这种情况?

(还有一个问题:这是标准化的,还是浏览器的行为不同,如果是,如何?)

Vin*_*ent 8

我自己做了一些测试,答案似乎是:没有触发任何事件。尽管连接确实断开了,但没有触发errorclose触发事件,即使在浏览器恢复时也不会触发。因此,处理此问题的主要方法似乎是定期检查连接状态,并在需要时重新连接 - 使用指数退避,以防服务器端连接断开。(或者让一个库为你做这件事,尽管我还没有找到一个正确维护的基于客户端浏览器的 WebSocket 库。)

这篇文章的作者似乎证实了这一点

移动设备引入了一类新的连接问题;如果移动设备被锁定、进入睡眠状态或应用程序移至后台,则活动的 WebSocket 连接可能会变得无响应并且无法正确关闭自身。