ios - “Tried connecting on an already connected socket”-Socket.IO-客户端-Swift

标签 ios sockets socket.io swift4

我正在使用swift 4和Socket.IO-Client-Swift,“〜> 13.1.1”(最新版本)。
添加套接字处理程序后,我尝试调用socket.connect(),但出现错误“引擎未打开时尝试连接套接字”。因此,我在计时器内添加了socket.connect()代码,并在5秒钟后调用了它,因此那时引擎已经打开并且不再收到该错误。

但是,即使从未调用过connect client事件处理程序,现在也出现错误“尝试在已连接的套接字上连接”。

我已经阅读了文档以及git上发布的所有问题,但没有解释如何解决此问题或什至为什么会发生此错误。

您可以在下面找到代码和控制台日志。

 let manager = SocketManager(socketURL: URL(string: "https://socket.******.**")!, config: [.log(true),.connectParams(["token":Utils.getToken()]),.reconnects(true)])
 socket = manager.socket(forNamespace: "/**********")


console log:
   2018-02-01 02:20:00.810496+0530 *******[2476:1630437] LOG SocketIOClient{/**********}: Adding handler for event: connect
   2018-02-01 02:20:00.837403+0530 *******[2476:1630437] LOG SocketIOClient{/**********}: Adding handler for event: message
   2018-02-01 02:20:00.838168+0530 *******[2476:1630437] LOG SocketManager: Manager is being released
   2018-02-01 02:20:05.815458+0530 *******[2476:1630437] LOG SocketIOClient{/**********}: Tried connecting on an already connected socket

从控制台日志中,您可以看到我收到“正在释放Manager”错误消息。有没有保留管理器对象的方法?这是此问题背后的主要原因吗?

最佳答案

通过管理器创建的套接字由管理器保留。因此,至少必须维护对管理器的单个强烈引用,以使套接字保持 Activity 状态。 (根据文档https://nuclearace.github.io/Socket.IO-Client-Swift/Classes/SocketManager.html)

解决此问题的最简单方法是创建单例类以保留管理器对象

    open class SocketConnection {

        open static let `default` = SocketConnection()
        private let manager: SocketManager
        private var socket: SocketIOClient

        private init() {
             manager = SocketManager(socketURL: URL(string: "https://socket.******.**")!, config: [.log(true),.connectParams(["token":Utils.getToken()]),.reconnects(true)])
             socket = manager.socket(forNamespace: "/**********")
        }
    }

关于ios - “Tried connecting on an already connected socket”-Socket.IO-客户端-Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48551895/

相关文章:

ios - 无法识别 iOS OSStatus 代码

c - 唯一标识套接字

javascript - JSON 没有正确序列化......我想?

ios - NSString 中的内存泄漏 stringWithUTF8String : with ARC enabled

ios - 如何在 iOS 应用程序中从 Health 应用程序获取事件的唯一标识符?

ios - WKWebView 内容加载函数永远不会被调用

python - 使用套接字分别发送 2 条消息

wireshark - UDP 数据未正确读取(延迟)

javascript - 在resolve中使用socket.io实现一次性监听

ajax - 带有 Node (socket.io 和强大)和 ajax 的文件上传进度条