更新记录
1.0.4(2026-06-13)
- 修复 Web 端 WebSocket 断开/重连逻辑
- 修复 Web 端 SignalR 握手时序(不再提前标记 connected)
- 修复 Web 端 SSE EventSource 误报错误
平台兼容性
uni-app(3.8.0)
| Vue2 |
Vue2插件版本 |
Vue3 |
Vue3插件版本 |
Chrome |
Safari |
app-vue |
app-nvue |
Android |
iOS |
鸿蒙 |
| √ |
1.0.4 |
√ |
1.0.4 |
- |
√ |
√ |
√ |
√ |
√ |
× |
| 微信小程序 |
支付宝小程序 |
抖音小程序 |
百度小程序 |
快手小程序 |
京东小程序 |
鸿蒙元服务 |
QQ小程序 |
飞书小程序 |
小红书小程序 |
快应用-华为 |
快应用-联盟 |
| × |
× |
× |
× |
× |
× |
× |
× |
× |
× |
× |
× |
uni-app x(3.8.0)
| Chrome |
Safari |
Android |
iOS |
鸿蒙 |
微信小程序 |
| √ |
√ |
√ |
√ |
× |
× |
gs-realtime-message
支持 MQTT、WebSocket、SignalR、SSE 四种协议的 uni-app UTS 实时消息插件。
支持平台
| 协议 |
Android |
iOS |
H5/Web |
| WebSocket |
✅ |
✅ |
✅ |
| SSE |
✅ |
✅ |
✅ |
| MQTT |
✅ (tcp/ssl) |
✅ (tcp/ssl) |
⚠️ 仅 ws/wss |
| SignalR |
✅ |
✅ |
✅ |
注意:App 端需使用自定义基座或正式打包才能调用原生能力。
公网测试地址(演示页已配置)
| 协议 |
测试地址 |
说明 |
| WebSocket |
wss://ws.vi-server.org/mirror |
回声服务器,发送什么返回什么 |
| SSE |
https://stream.wikimedia.org/v2/stream/recentchange |
Wikimedia 公开事件流 |
| MQTT |
ws://test.mosquitto.org:8080/mqtt |
公共 Mosquitto WebSocket |
| SignalR |
http://localhost:5099/chat |
需先运行本地测试服务(见下) |
SignalR 公网几乎没有长期稳定的免费 Hub,请使用项目内本地服务联调。
启动 SignalR 本地测试服务
cd tools/signalr-test-server
dotnet run
演示页选 signalr,地址填 http://localhost:5099/chat,方法名填 Echo,连接后发送消息应收到回显。
快速开始
import { createConnection } from '@/uni_modules/gs-realtime-message'
// WebSocket 示例
const ws = createConnection({
protocol: 'websocket',
url: 'wss://ws.vi-server.org/mirror',
onOpen(res) {
console.log('已连接', res)
ws.send('Hello WebSocket')
},
onMessage(res) {
console.log('收到消息', res.data)
},
onError(res) {
console.error('连接错误', res.errMsg)
},
onClose(res) {
console.log('连接关闭', res.errMsg)
}
})
ws.connect()
MQTT 示例
const mqtt = createConnection({
protocol: 'mqtt',
url: 'ws://test.mosquitto.org:8080/mqtt',
// 也支持简写:test.mosquitto.org:8080/mqtt
// TCP 模式:tcp://test.mosquitto.org:1883
clientId: 'uniapp-client-001',
topics: ['test/topic'],
qos: 1,
onOpen() {
mqtt.send('Hello MQTT', { topic: 'test/topic', qos: 1 })
},
onMessage(res) {
console.log(`[${res.topic}] ${res.data}`)
}
})
mqtt.connect()
SignalR 示例
const signalr = createConnection({
protocol: 'signalr',
url: 'https://your-server.com/chathub',
accessToken: 'your-token',
// 额外查询参数(协商与 WebSocket 连接均会携带)
params: {
tenantId: '1001'
},
// 自定义请求头(协商请求)
headers: {
'X-Custom-Header': 'value'
},
onOpen() {
signalr.invoke('SendMessage', 'user', 'Hello SignalR')
},
onMessage(res) {
console.log(res.data)
}
})
signalr.connect()
说明:accessToken 会同时设置 Authorization: Bearer 请求头,并在 URL 中追加 access_token 参数(H5 WebSocket 无法自定义 Header,需依赖查询参数鉴权)。
SSE 示例
const sse = createConnection({
protocol: 'sse',
url: 'https://your-server.com/events',
// URL 查询参数(H5 端 EventSource 不支持自定义 Header,推荐用 params 传 token)
params: {
token: 'your-token'
},
// App 端可额外设置请求头
headers: {
Authorization: 'Bearer your-token'
},
onMessage(res) {
console.log('SSE:', res.data)
}
})
sse.connect()
API 说明
createConnection(options)
创建实时消息连接实例,返回 RealtimeClient 对象。
RealtimeClient 方法
| 方法 |
说明 |
connect() |
发起连接 |
disconnect(options?) |
断开连接 |
reconnect(options?) |
手动重试连接 |
isConnected() |
是否已连接 |
getState() |
获取连接状态 |
send(data, options?) |
发送消息 |
subscribe(topic, qos?) |
订阅 MQTT 主题 |
unsubscribe(topic) |
取消 MQTT 订阅 |
invoke(method, ...args) |
调用 SignalR 服务端方法 |
ConnectOptions 参数
| 参数 |
类型 |
说明 |
| protocol |
'websocket' \| 'sse' \| 'mqtt' \| 'signalr' |
协议类型 |
| url |
string |
服务器地址 |
| clientId |
string |
MQTT 客户端 ID |
| username / password |
string |
认证信息 |
| headers |
object |
自定义请求头(SSE / SignalR) |
| params |
object |
URL 查询参数(SSE / SignalR) |
| topics |
string[] |
MQTT 自动订阅主题 |
| accessToken |
string |
SignalR Bearer Token |
| autoReconnect |
boolean |
自动重连,默认 true |
| reconnectInterval |
number |
重连间隔(ms),默认 3000 |
| maxReconnectAttempts |
number |
最大重连次数,默认 10 |
disconnect(options?)
断开当前连接。
| 参数 |
类型 |
默认值 |
说明 |
| emitClose |
boolean |
true |
是否触发 onClose 回调 |
| disableAutoReconnect |
boolean |
true |
是否禁用后续自动重连 |
// 静默断开,不触发 onClose
client.disconnect({ emitClose: false })
// 断开后仍允许自动重连(适用于临时切换页面等场景)
client.disconnect({ disableAutoReconnect: false })
reconnect(options?)
手动重试连接:先释放当前传输层,再重新发起连接。
| 参数 |
类型 |
默认值 |
说明 |
| resetRetryCount |
boolean |
true |
是否重置自动重连计数 |
| delay |
number |
0 |
重连前等待时间(毫秒) |
// 立即重连
client.reconnect()
// 3 秒后重连,并重置重试计数
client.reconnect({ delay: 3000, resetRetryCount: true })
依赖说明
Android
- OkHttp 4.12.0(WebSocket / SSE / SignalR)
- HiveMQ MQTT Client 1.3.3(支持 tcp/ssl/ws/wss)
iOS
- CocoaMQTT 2.1.8(MQTT)
- URLSession WebSocket(WebSocket / SignalR / SSE)
开发文档