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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:59:12