1

这对我们来说是一个真正的脑筋急转弯

我们知道 iOS 在一段时间后会在后台关闭应用程序的 WebSocket 连接。

我们注意到,每次发生这种情况,并且应用程序返回前台时,我们的套接字委托都会收到websocketDidDisconnect消息。当一切正常时,我们很快就会得到websocketDidConnect消息。

这里的假设是 StarScream 正在处理前台的自动重新连接

但是,在一小部分情况下,客户端只websocketDidDisconnect在前台接收,但从不接收websocketDidConnect消息。

此外,我们尝试在前台手动确定此断开连接:

private var serverSocket: WebSocket?

init() {
    NotificationCenter.default.addObserver(self, selector: #selector(reconnect), name: UIApplication.willEnterForegroundNotification, object: nil)        
}

@objc func reconnect() {
    LogManagerProvider.shared.info("Reconnecting WebSocket")
    LogManagerProvider.shared.info((serverSocket?.isConnected == true) ? "Before Reconnect Attempt: Already Connected" : "Before Reconnect Attempt: Disconnected")
    self.serverSocket?.connect()
}

在套接字在前台备份的情况下,我们看到serverSocket.isConnected == true 但是在失败的情况下,我们看到serverSocket.isConnected == false,并且connect调用也没有像我们预期的那样重新连接套接字

有没有人见过这个,或者知道可能是什么问题?

4

0 回答 0