Websocket Safari在后台运行时,iOS上的Socket.IO会中断

Websocket Safari在后台运行时,iOS上的Socket.IO会中断,websocket,mobile-safari,socket.io,Websocket,Mobile Safari,Socket.io,我有一个移动web应用程序,它使用Socket.IO支持WebSocket,除了按下home按钮然后返回Safari时,它工作得非常好。如果我使用另一个应用程序作为Safari的后台,然后返回到它,WebSocket连接将不再工作 值得注意的是:在Safari中转到另一个选项卡,然后返回并不会破坏WebSocket-我实际上必须离开Safari应用程序 当尝试通过套接字发送消息时,我的web控制台上不会出现任何错误,它就是不起作用。有什么想法吗?当应用程序在iOS中最小化时,它不仅仅是将应用程序

我有一个移动web应用程序,它使用Socket.IO支持WebSocket,除了按下home按钮然后返回Safari时,它工作得非常好。如果我使用另一个应用程序作为Safari的后台,然后返回到它,WebSocket连接将不再工作

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


当尝试通过套接字发送消息时,我的web控制台上不会出现任何错误,它就是不起作用。有什么想法吗?

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

这就是它停止连接的原因,这是iOS的正常行为

若要恢复会话,服务器端应用程序逻辑应实现会话,并能够在新连接上恢复会话(若不久前该连接已关闭)


请注意,安卓股票浏览器上的浏览器将保持连接,但将冻结处理的JS,因此,如果应用程序实现超时,它将在服务器识别出它没有响应后删除安卓客户端。另外,转到另一个选项卡也会降低JS的性能,这样一来,计时函数和回调的内部堆栈会变慢,并且不希望它们以与您专注于选项卡时相同的频率运行。

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

这就是它停止连接的原因,这是iOS的正常行为

若要恢复会话,服务器端应用程序逻辑应实现会话,并能够在新连接上恢复会话(若不久前该连接已关闭)


请注意,安卓股票浏览器上的浏览器将保持连接,但将冻结处理的JS,因此,如果应用程序实现超时,它将在服务器识别出它没有响应后删除安卓客户端。另外,转到另一个选项卡也会降低JS的性能,这样会减慢计时函数和回调的内部堆栈,并且不希望它们以与您专注于选项卡时相同的频率运行。

是有道理的-但是客户端Socket.IO库不应该在您打开Safari备份后自动重新连接吗又一次?如果是新标签-那么是的。但如果它没有自动重新连接,因为它刚刚恢复了窗口,您可以自己尝试:只需捕获事件“disconnect”,并在延迟一段时间后再次连接,以防止垃圾邮件重新连接。这是有意义的-但客户端Socket.IO库不应该在您再次打开Safari备份后自动重新连接吗?如果是新选项卡-则是。但若它并没有自动重新连接,因为它只是恢复了窗口,你们可以自己尝试:捕捉事件“断开”,并在延迟一段时间后再次连接,以防止垃圾邮件重新连接。