// 服务器的基础 URL
const serverUrl = "http://example.com:3000";
作用:指定 Socket.IO 服务器的地址
// Socket.IO 服务的路径(默认是 "/socket.io/")
opts.path = "/socket.io/";
作用:
/socket.io/URL 构建:
http://example.com:3000/socket.io/?EIO=4&transport=websocket
↑ ↑
服务器地址 服务路径
// 传输方式数组,Socket.IO 会按顺序尝试
opts.transports = ["websocket", "polling"];
作用:
传输方式:
"websocket" - WebSocket 传输(实时双向通信)"polling" - HTTP 长轮询(降级方案)自动降级连接机制实际上是两个传输方式:
opts.transports = ["websocket", "polling"];
流程:
1. 尝试 WebSocket 连接
↓ 失败
2. 自动降级到 HTTP 长轮询
↓
3. 连接成功
优势:
opts.transports = ["polling", "websocket"];
// 或者不设置,使用默认值
流程:
1. 先使用 HTTP 长轮询连接
↓ 成功
2. 尝试升级到 WebSocket
↓
3. 使用 WebSocket(如果升级成功)
优势:
opts.transports = ["websocket"];
问题:
opts.transports = ["polling"];
问题:
const options = {
// 1. 服务器地址(必需)
serverUrl: "http://example.com:3000",
// 2. Socket.IO 服务路径(可选,默认 "/socket.io/")
path: "/socket.io/",
// 3. 传输方式(可选,默认 ["polling", "websocket"])
transports: ["websocket", "polling"], // 推荐:先 WebSocket,失败则降级
// 4. 查询参数(可选,用于传递 token 等)
query: {
token: "your_token"
},
// 5. HTTP 头(可选,用于传递认证信息)
extraHeaders: {
"Authorization": "Bearer your_token"
}
};
const options = {
serverUrl: "http://example.com:3000", // 必需
// 其他使用默认值
};
val options = IO.Options().apply {
// ① 主连接地址(在 IO.socket() 中指定)
// socket = IO.socket("http://example.com:3000", options)
// ② path(默认 "/socket.io/",可以不设置)
// path = "/socket.io/" // 默认值
// ③ transports(默认 ["polling", "websocket"],可以不设置)
// transports = arrayOf("polling", "websocket") // 默认值
// ④ query(用于传递 token)
query = "token=$token"
// ⑤ extraHeaders(用于传递认证信息)
extraHeaders = mapOf("Authorization" to listOf("Bearer $token"))
// ⑥ 其他配置
reconnection = false
}
// 当前实现:手动实现自动降级
// 1. 先尝试 WebSocket
// 2. 失败则降级到 HTTP 长轮询
// 需要扩展:支持 transports 配置
为了让鸿蒙端与 Android 端完全一致,需要支持:
["websocket", "polling"]){
serverUrl: "http://example.com:3000",
path: "/socket.io/", // 默认值,可以不设置
transports: ["websocket", "polling"], // 推荐:先 WebSocket,失败则降级
query: { token: "xxx" }, // 可选
extraHeaders: { "Authorization": "Bearer xxx" } // 可选
}