Swift中使用Socket.IO客户端无法读取服务端响应如何解决
Socket.io iOS客户端连接成功回调未触发解决方案
问题1:实例被提前释放
你将SocketManager和socket对象定义为viewDidLoad方法内的局部变量,方法执行结束后会被ARC自动回收,日志中也明确输出了Manager is being released、Client is being released记录,连接握手还没完成实例就已销毁,自然无法触发后续回调。
解决方法:将两个对象提升为当前ViewController的成员属性,延长其生命周期。
问题2:监听事件名错误
Socket.io Swift客户端的连接成功事件名为connect,而非服务端使用的connection,事件名不匹配导致无法触发回调。
修正后客户端代码
// 定义为ViewController的成员属性 var manager: SocketManager! var socket: SocketIOClient! override func viewDidLoad() { super.viewDidLoad() // Testing Socket.io manager = SocketManager(socketURL: URL(string: "http://<你的IP地址>:3001")!, config: [.log(true), .compress]) socket = manager.defaultSocket // 监听正确的连接成功事件 socket.on("connect") { data, ack in print("EG socket connected") } socket.connect() }
额外检查项
确保服务端与客户端的Socket.io大版本匹配,你日志中显示EIO=4对应Socket.io v4版本,客户端需要使用支持v4协议的版本,否则也会出现连接异常。
内容的提问来源于stack exchange,提问作者Elijah Greene
相关产品推荐
相关产品推荐

