Swift中Socket.IO连接失败求助:无法连接到Socket.IO聊天服务
解决Swift中Socket.IO连接聊天服务的问题
我来帮你排查这个Socket.IO连接失败的问题~从你的代码和日志来看,主要是URL格式错误和版本兼容性导致的,下面一步步解决:
1. 修正Socket.IO服务器URL格式
Socket.IO的连接URL不需要手动添加/socket.io/后缀,SocketManager会自动处理这个路径。你原来的URL带了多余的后缀,导致服务器返回无效命名空间的错误(日志里的Got message: 40就是这个错误码)。
把URL改为:
let manager = SocketManager(socketURL: URL(string: "wss://socket-io-chat.now.sh")!, config: [.log(true), .compress])
2. 处理客户端与服务器的版本兼容问题
wss://socket-io-chat.now.sh是Socket.IO官方的旧示例服务器,使用的是Socket.IO v2.x版本。如果你用的是最新版的Socket.IO Swift客户端(v10+),需要显式指定版本兼容参数,否则会出现握手失败。
在config里添加.version(.two):
let manager = SocketManager(socketURL: URL(string: "wss://socket-io-chat.now.sh")!, config: [.log(true), .compress, .version(.two)])
3. 完整修正后的代码
import UIKit import SocketIO class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // 修正URL并指定版本兼容 let manager = SocketManager(socketURL: URL(string: "wss://socket-io-chat.now.sh")!, config: [.log(true), .compress, .version(.two)]) let socket = manager.defaultSocket socket.on(clientEvent: .connect) {data, ack in print("socket connected") // 连接成功后可以发送测试消息,加入聊天室 socket.emit("add user", "Swift_Client") } socket.on("new message") {data, ack in if let message = data.first as? String { print("收到新消息: \(message)") } } socket.connect() } }
日志错误解读
Got message: 40:Socket.IO错误码,代表无效的命名空间,根源是URL带了多余的/socket.io/后缀。TIC Read Status [2:0x0]: 1:57:iOS网络层的SSL连接关闭错误,是连接握手失败后的连锁反应,修正URL和版本后会自动消失。
内容的提问来源于stack exchange,提问作者Christian Bringino
相关产品推荐
相关产品推荐

