阅读时间:1 分钟
0 字
SSE
SSE 适合服务端单向连续推送的场景,比如:
text
AI 回复流
日志流
长任务进度
单向通知流useSSE
用于建立 SSE 流式连接,适合 AI 回复、日志流、服务端单向增量数据。
ts
const sse = useSSE<T>(options)最小连接示例
ts
import { useSSE } from '@duxweb/uni'
const sse = useSSE<{ delta?: string }>({
path: 'ai/chat-stream',
method: 'POST',
body: {
prompt: '你好',
},
immediate: true,
})如何开始和关闭流
ts
await sse.connect()
sse.close()
sse.reset()如何接收流式消息
最常用的是直接读:
ts
sse.messages.value
sse.lastMessage.value
sse.text.value也可以在选项里直接监听:
ts
const sse = useSSE({
path: 'ai/chat-stream',
onMessage(message) {
console.log('收到分段消息', message.data)
},
})如何把消息解析成 JSON
如果服务端推的是 JSON 字符串,推荐用 parse:
ts
const sse = useSSE<{ delta?: string }>({
path: 'ai/chat-stream',
parse(message) {
return JSON.parse(message.data)
},
})这样你就可以读:
ts
sse.lastMessage.value?.parsed?.delta如何读取流状态
ts
sse.status.value
sse.connecting.value
sse.streaming.value
sse.retrying.value
sse.retryCount.value
sse.error.value它返回什么
text
status
connecting
streaming
retrying
retryCount
openResult
messages
lastMessage
text
error
connect()
close()
reset()useEventSource
这是更底层的 SSE hook,useSSE() 可以理解成它的简化别名。
ts
const sse = useEventSource(options)如果你需要更底层地控制:
text
onOpen
onRetry
transport
timeout
heartbeatTimeout
executor就直接用 useEventSource()。
什么时候用 SSE
推荐场景:
text
服务端持续往前端推文本片段
前端不需要向同一连接反向发消息
你希望保留 HTTP 语义如果你的场景需要双向收发,优先看 Socket。