更新记录

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 即可。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

无

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

许可协议

MIT协议

暂无用户评论。