RAM*_*RAM 1 sockets ios 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
Run Code Online (Sandbox Code Playgroud)
从控制台日志中,您可以看到我收到“正在释放Manager”错误消息。有没有办法保留经理对象?这是此问题背后的主要原因吗?
小智 7
通过管理器创建的套接字由管理器保留。因此,至少必须维护对管理器的单个强烈引用才能使套接字保持活动状态。(根据文档,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: "/**********")
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3006 次 |
| 最近记录: |