【问题标题】:What happens with WebSocket connections when a phone's screen locks?当手机屏幕锁定时,WebSocket 连接会发生什么?
【发布时间】:2018-10-08 18:20:12
【问题描述】:
当手机浏览器有一个打开的连接,并且用户锁定了屏幕,那么在某个时候他们将不再有一个 WebSocket 连接。
发生这种情况时会触发哪些事件?是否调用了WebSocket.onerror 或WebSocket.onclose 处理程序,如果调用了,是否会在屏幕锁定/应用暂停或应用再次启动时发生这种情况?
(还有一个额外的问题:这是标准化的,还是浏览器的行为不同,如果是,如何?)
【问题讨论】:
标签:
websocket
mobile-safari
chrome-for-android
mobile-chrome
firefox-android
【解决方案1】:
我自己做了一些测试,答案似乎是:没有触发任何事件。尽管连接确实断开,但不会触发 error 或 close 事件,即使浏览器重新启动时也不会触发。因此,处理此问题的主要方法似乎是定期检查连接状态,并在需要时重新连接 - 在连接断开服务器端的情况下使用指数回退。 (或者让一个库为您执行此操作,尽管我还没有找到一个正确维护的基于浏览器的客户端 WebSocket 库来执行此操作。)
this article的作者似乎证实了这一点:
移动设备引入了一类新的连接问题;如果移动设备被锁定、进入睡眠状态或应用程序移至后台,则活动的 WebSocket 连接可能会变得无响应并且无法正确关闭。