当 Safari 处于后台时,iOS 上的 Socket.IO 中断

ska*_*ous 1 mobile-safari websocket socket.io

我有一个使用 Socket.IO 来支持 WebSocket 的移动网络应用程序,它运行良好,除非我按下主页按钮然后返回 Safari。如果我通过转到不同的应用程序将 Safari 设为后台,然后再返回到它,WebSocket 连接将不再起作用。

值得注意的是:在 Safari 中转到不同的选项卡然后返回不会破坏 WebSocket——我实际上必须离开 Safari 应用程序。

尝试通过套接字发送消息时,我的 Web 控制台上没有任何错误,它只是不起作用。有任何想法吗?

mok*_*oka 5

当应用程序在 iOS 中被“最小化”时,它不仅仅是将应用程序放在后台,更重要的是,它缓存应用程序,实际上阻止它处理,以节省电池并防止任何后台应用程序工作和做“坏事” ”。

这就是为什么它会中断连接,这是 iOS 的正常行为。

要恢复会话,您的服务器端应用程序逻辑应该实现会话,并且如果它不久前关闭,则可以在新连接上恢复它。

有关信息,在 Android 股票浏览器上将保持连接,但会冻结处理的 JS,因此如果您的应用程序实现超时,它将在您的服务器将其识别为未响应后丢弃 Android 客户端。转到另一个选项卡也会降低 JS 的性能,这样内部的定时函数和回调堆栈会变慢,并且不要期望它们以与您专注于选项卡时相同的频率运行。