更新记录
1.0.0(2026-11-06)
下载此版本
首次发布
平台兼容性
uni-app(3.8.10)
| Vue2 |
Vue3 |
Chrome |
Safari |
app-vue |
app-nvue |
Android |
iOS |
鸿蒙 |
| √ |
√ |
√ |
√ |
√ |
- |
5.0 |
- |
- |
| 微信小程序 |
支付宝小程序 |
抖音小程序 |
百度小程序 |
快手小程序 |
京东小程序 |
鸿蒙元服务 |
QQ小程序 |
飞书小程序 |
小红书小程序 |
快应用-华为 |
快应用-联盟 |
| √ |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
UTS 流式请求插件(xiake-uts-sse)
一套 API 覆盖 Android / 微信小程序 / Web(H5) 三端的流式请求插件。把服务端逐片下发的文本实时回调给业务层,适用于 AI 对话打字机、LLM 流式输出、消息推送、日志流等场景。
功能
| 能力 |
说明 |
| 四协议 |
sse、line、jsonl、raw |
| 三端统一 |
Android、微信小程序、Web(H5) 使用同一套 API |
| POST 流式 |
支持 jsonBody 与自定义请求头,适配 LLM 请求 |
| 终止标记 |
命中标记(默认 [DONE])触发 onTerminal 并结束 |
| 自动重连 |
异常断开按指数退避重连,可设最大次数 |
| 超时控制 |
连接超时、读取超时独立配置 |
| 诊断指标 |
字节数、消息数、重连次数、首字节延迟、耗时 |
| 多连接 |
每个连接返回独立句柄,可分别取消 |
安装
将 uni_modules/xiake-uts-sse 放入项目的 uni_modules 目录,然后在页面中导入:
import { connectStream, abortStream, getStreamMetrics } from '@/uni_modules/xiake-uts-sse'
快速上手
const handle = connectStream({
url: 'https://your-api.com/stream',
protocol: 'sse',
onMessage(m) { console.log(m.data) },
onError(e) { console.log(e.errMsg) },
onComplete(ev) { console.log(ev.reason) }
})
// 离开页面 / 停止时调用(可重复调用)
abortStream(handle)
// 随时读取诊断指标
console.log(getStreamMetrics(handle))
POST 请求(LLM 场景)
const handle = connectStream({
url: 'https://your-api.com/chat',
method: 'POST',
jsonBody: JSON.stringify({ prompt: '你好' }),
headerList: new Map([['Authorization', 'Bearer <token>']]),
protocol: 'sse',
onMessage(m) { console.log(m.data) }
})
API
导出函数
| 函数 |
返回 |
说明 |
connectStream(options) |
string |
建立连接,返回连接句柄 |
abortStream(handle) |
void |
取消指定连接,幂等;不触发自动重连 |
getStreamMetrics(handle) |
StreamMetrics |
读取诊断指标快照 |
连接参数 ConnectOptions
| 参数 |
类型 |
默认值 |
说明 |
url |
string |
必填 |
流式接口地址 |
protocol |
'sse' \| 'line' \| 'jsonl' \| 'raw' |
'sse' |
解析协议 |
method |
'GET' \| 'POST' |
'GET' |
请求方法 |
headerList |
Map<string, string> |
— |
自定义请求头 |
jsonBody |
string |
— |
POST 请求体(JSON 字符串) |
connectTimeout |
number |
15000 |
连接超时(ms) |
readTimeout |
number |
0 |
读取超时(ms),0 表示不限 |
terminalMark |
string |
'[DONE]' |
终止标记 |
reconnect |
boolean |
false |
异常断开后自动重连 |
maxReconnect |
number |
3 |
最大重连次数 |
reconnectDelay |
number |
1000 |
重连基础延迟(ms),按指数退避 |
debug |
boolean |
false |
调试开关 |
回调
| 回调 |
参数 |
触发时机 |
onMessage |
StreamMessage |
收到一条完整消息 |
onTerminal |
StreamTerminalEvent |
命中 terminalMark,随后流结束 |
onError |
StreamFail |
连接/读取出错、HTTP 非 2xx、超时 |
onComplete |
StreamCompleteEvent |
流结束;reason 为 done / terminal / error |
消息对象 StreamMessage
| 字段 |
类型 |
说明 |
data |
string |
业务文本 |
id |
string |
SSE 事件 id(仅 sse) |
event |
string |
SSE 事件名(仅 sse) |
raw |
string |
累计原始缓冲(仅 raw) |
错误对象 StreamFail 含 errCode、errMsg;onTerminal 事件含 mark。
诊断指标 StreamMetrics
| 字段 |
说明 |
bytesReceived |
已接收字节数(估算) |
messagesReceived |
已回调消息数 |
reconnectCount |
已发生的重连次数 |
firstByteLatencyMs |
首字节延迟(ms),未收到为 -1 |
elapsedMs |
调用时的累计耗时(ms) |
协议说明
| 协议 |
解析行为 |
sse |
按 data: / id: / event: 与空行组装事件,空行触发一条消息 |
line |
每收到一行触发一条消息 |
jsonl |
每行按 JSON 文本触发(data 为该行文本) |
raw |
按裸分片触发,data 为该片,raw 为累计缓冲 |
运行附带示例
工程 pages/index/index.vue 为三端通用示例页。启动本地 mock 服务:
cd test-server
node sse-test-server.js
在示例页填入 http://127.0.0.1:8787/?protocol=sse 即可。