SocketClient
SocketClient
SocketClient 表示客户端侧的 WebSocket 连接(由你的运行时在 JS 中发起到远端服务的连接)。通过它你可以主动连接、监听事件、发送文本或二进制数据,并在断线时做清理或重连。
下面是 SocketClient 的完整说明(与 SocketServer 文档风格一致)。
构造函数
const wsCli = new SocketClient(options)
参数:options
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
url | string | 否 | 目标 WebSocket 地址,支持 ws:// / wss://,可携带查询参数 |
baseURL | string | 否 | 基础URL,当 url 为相对路径时,会与 baseURL 拼接 |
header | Record<string,string> | 否 | 自定义请求头(如鉴权 Token 等) |
subprotocols | string[] | 否 | WebSocket 子协议列表(如 ["chat.v1","json.v1"]) |
timeout | number | 否 | 连接超时时间(毫秒),默认15000 |
responseType | string | 否 | 响应数据类型,可选值:text、json、buffer,默认text |
insecureTLS | boolean | 否 | 是否跳过TLS证书校验(仅调试环境使用),默认false |
autoEventDispatch | boolean | 否 | 是否自动根据响应头 event 字段分发事件,默认true |
keepaliveMs | number | 否 | 心跳ping间隔(毫秒),<=0表示关闭,默认0 |
方法与事件总览
| 名称 | 类型 | 参数 | 返回值 | 说明 |
|---|---|---|---|---|
on | 方法 | eventName:string, callback(...args)) | void | 监听 open / message / error / close |
send | 方法 | data: string | Uint8Array | ArrayBuffer | byte[] | void | 发送文本或二进制数据 |
close | 方法 | — | void | 主动关闭连接 |
isConnected | 方法 | — | boolean | 返回当前连接是否处于已连接状态 |
getConfig | 方法 | — | object | 返回当前客户端的配置对象 |
on
使用 on 监听 4 类事件:open、message、error、close。
事件说明
on("open", callback())连接建立完成(握手成功)时触发。on("message", callback(data, messageType))收到服务器消息时触发。data:消息内容;文本为string,二进制为Buffer/Uint8Array/ArrayBuffer(取决于binaryType和运行时)messageType:"text"|"binary"(某些实现也可能是数值枚举1/2)
on("error", callback(error))连接或收发过程出现错误时触发。error:错误对象或错误信息
on("close", callback())连接关闭时触发(远端关闭或本地close())。
示例
const wsCli = new SocketClient({url: "wss://example.com/ws?token=xxx"});
wsCli.on("open", () => {
console.log("[Client] 连接已建立");
});
wsCli.on("message", (data, messageType) => {
if (messageType === "text") {
console.log("收到文本:", data);
} else {
console.log("收到二进制:", data.byteLength || data.length, "bytes");
}
});
wsCli.on("error", (err) => {
console.error("[Client] 发生错误:", err);
});
wsCli.on("close", () => {
console.log("[Client] 连接已关闭");
});
send
说明
send(data):向服务端发送一条消息;data可为字符串(文本)或二进制(Uint8Array/ArrayBuffer/Buffer)。
建议:发送 JSON 时先
JSON.stringify;发送音频/文件片段等数据时使用二进制。
示例(文本与二进制)
// 文本
wsCli.send(JSON.stringify({event: "login", data: {user: "susu"}}));
// 二进制(例如音频帧)
const pcm = new Uint8Array(320); // mock
wsCli.send(pcm);
close
说明
close():主动关闭连接;会随后触发close事件。
示例
wsCli.on("error", (e) => {
console.error("client error:", e);
wsCli.close(); // 出错时主动收尾,防资源泄漏
});
isConnected
说明
isConnected():返回当前连接是否处于已连接状态。
示例
console.log("是否已连接:", wsCli.isConnected());
getConfig
说明
getConfig():返回当前客户端的配置对象。
示例
console.log("当前配置:", wsCli.getConfig());
生命周期说明(Client)
- 连接阶段:构造
SocketClient并开始握手;成功后触发open。 - 通信阶段:使用
send()发送消息;用on("message")接收服务端推送或响应。 - 异常阶段:网络抖动、鉴权失败、协议错误等会触发
error。 - 关闭阶段:远端关闭或本地
close(),触发close,完成清理。
实践建议:在
error/close中做清理(停止定时器、关闭文件句柄、释放缓存);如需自动重连,可在close中发起新的SocketClient(避免递归重连过快,可加入退避策略)。
