You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 19:27:00