更新记录
1.1.0(2026-01-13) 下载此版本
功能优化, 入参有变动, 更新插件请注意
1.0.7(2025-11-27) 下载此版本
优化
1.0.6(2025-06-27) 下载此版本
更新文档
查看更多平台兼容性
uni-app(4.0)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ | √ | √ | √ |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ | √ | √ | √ | - | √ | √ |
说明文档
概述
websocket 模块对 uni-app WebSocket 能力做了轻量封装,提供连接初始化、消息收发、心跳保活、断线重连、关闭连接等能力,并对业务侧屏蔽部分底层细节(如 ping/pong 过滤、重连上限通知等)。
适用范围
- uni-app 运行环境(依赖
uni.connectSocket / socketTask.* / uni.closeSocket等接口)。 - 单连接场景(一个
MyWebSocket实例维护一个 socket 连接)。
功能说明
1) 消息模型 Message
用于约定消息体结构:
event: string:事件类型data: any:业务载荷(可选)
心跳消息默认发送
event = "ping"。
2) WebSocket 封装 MyWebSocket
核心能力:
- 连接管理:
init()建立连接,避免重复初始化;连接成功后自动启动心跳。 - 消息接收:仅对
string类型数据进行JSON.parse,并过滤event === "ping"/"pong",其余消息才回调给业务onMessage。 - 消息发送:默认要求发送对象是
Message实例(可关闭校验)。 - 心跳:按间隔持续发送
ping;若发现未连接,触发重连逻辑。 - 重连:断线/错误时自动重连;达到最大次数后停止并触发
onReconnectFail(仅一次,连接成功后重置)。 - 关闭:主动关闭会阻止后续重连,并清理心跳/重连定时器。
API 说明
导出项
MessageMyWebSocket
类型定义
MyWebSocketCtorOptions(构造参数)
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| onMessage | (message: any) => void |
✅ | - | 接收服务器业务消息回调(已过滤 ping/pong)。 |
| logInfo | boolean |
❌ | true |
是否打印日志。 |
| onReconnectFail | (info: {times:number,maxTimes:number,options:any}) => void |
❌ | null |
重连达到上限后的通知回调(仅触发一次;连接成功后会重置)。 |
| heartbeatIntervalTime | number |
❌ | 30000 |
心跳间隔(ms)。 |
| reconnectDelayTime | number |
❌ | 3000 |
重连延迟(ms)。 |
| reconnectMaxTimes | number |
❌ | 100 |
最大重连次数。 |
| connectOptions | Object |
❌ | - | 连接参数(透传给 uni.connectSocket);提供后可直接 ws.init()。 |
类:Message
构造函数
new Message(event, data)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| event | string |
✅ | 事件名/消息类型。 |
| data | any |
❌ | 业务数据。 |
类:MyWebSocket
构造函数
new MyWebSocket(options)
参数校验
onMessage必须为函数,否则抛错。onReconnectFail若传入则必须为函数,否则抛错。
方法:init
初始化连接(若不传 options,优先使用构造时 connectOptions / 上次缓存的 options)。
ws.init(options?, type?)
// type: 'init' | 'reconnect'
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| options | Object |
❌ | - | 透传给 uni.connectSocket,要求包含 url: string。 |
| type | 'init' \| 'reconnect' |
❌ | 'init' |
本次连接类型(用于日志/区分场景)。 |
返回值
Promise:连接成功resolve(onOpen res);失败时reject(error)。
行为要点
- 已连接时直接
resolve(),避免重复初始化。 - 连接成功后:
connected=true、重连计数清零、重连失败通知标记重置、启动心跳。 onError/onClose会触发reconnect()。
方法:send
发送消息。
ws.send(message, verifyFormat?)
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| message | Message \| any |
✅ | - | 消息体;默认要求是 Message 实例。 |
| verifyFormat | boolean |
❌ | true |
是否校验 message instanceof Message。 |
返回值
Promise:调用socketTask.send,成功resolve,失败reject。
方法:heartbeat
启动/重置心跳定时器,周期发送 new Message('ping')。
ws.heartbeat()
行为要点
- 每次调用会清理旧的心跳定时器并重新设置。
- 定时触发时:若已连接则发送
ping;否则触发reconnect()。
方法:reconnect
断线重连逻辑。
ws.reconnect()
行为要点
- 若
closeFlag === true(主动关闭)则不再重连。 - 达到
reconnectMaxTimes后停止重连,并触发一次onReconnectFail({times,maxTimes,options})。 - 每次重连:延迟
reconnectDelayTime后调用init(this.options, 'reconnect'),并累计次数。
方法:close
主动关闭连接(并阻止后续重连)。
ws.close(options?)
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| options | Object |
❌ | {} |
透传给 socketTask.close / uni.closeSocket 的关闭参数。 |
返回值
Promise:关闭成功resolve,失败reject。
行为要点
- 设置
closeFlag = true,清理心跳与重连定时器。 - 若当前未连接会直接
reject('WebSocket 连接未开启')。
消息处理约定
接收
- 仅当
data为字符串时尝试JSON.parse。解析失败会记录日志但不中断流程。 - 过滤
event === 'ping'/'pong',其余消息才回调onMessage(message)。 ArrayBuffer分支预留(当前未实现具体处理)。
发送
- 默认要求
Message实例,模块内部会JSON.stringify(message)后发送。
使用示例
import { MyWebSocket, Message } from '@/uni_modules/x-web-socket/js_sdk/index.js'
const ws = new MyWebSocket({
onMessage: (msg) => {
// 这里拿到的是业务消息(已过滤 ping/pong)
console.log('biz msg:', msg)
},
connectOptions: {
url: 'wss://example.com/ws',
// 其他 uni.connectSocket 参数可继续透传
},
onReconnectFail: ({ times, maxTimes }) => {
console.warn(`reconnect failed: ${times}/${maxTimes}`)
}
})
// 初始化连接
ws.init() // 可传入带token的url
// 发送业务消息
ws.send(new Message('chat.send', { text: 'hello' }))
// 主动关闭(不会再自动重连)
ws.close()
异常与边界情况
- 构造参数错误:
onMessage非函数直接抛错;onReconnectFail若传入但非函数也会抛错。 - 重复 init:已连接时会跳过初始化并直接
resolve()。 - 缺失/非法 url:
options.url非字符串会reject('options.url 应该是一个字符串')。 - 未连接发送:
send()在未连接状态会reject('WebSocket 连接未开启')。 - 消息格式校验:默认要求
Message实例,否则reject('消息格式错误');可通过verifyFormat=false放宽。 - 消息解析失败:接收字符串但 JSON 解析失败会捕获异常并记录日志,不会抛出到业务层。
- 重连上限:达到
reconnectMaxTimes后停止重连,并只通知一次;后续即使继续触发断线也不会重复回调,直到再次连接成功重置标记。 - 主动关闭:
close()会设置closeFlag=true,从而阻止任何后续自动重连。
依赖关系
- 外部库依赖:无(仅依赖 uni-app 运行时 WebSocket API)。

收藏人数:
下载插件并导入HBuilderX
下载插件ZIP
赞赏(0)
下载 2625
赞赏 16
下载 11222407
赞赏 1856
赞赏
京公网安备:11010802035340号