SSE(Server-sent Events)

一.基本概念

SSE(Server-sent Events) 是一种基于 HTTP 的服务端→客户端单向实时推送协议。浏览器(或客户端)发起一次请求后,服务器保持连接,不断往响应里写事件文本,客户端边收边处理------很适合聊天打字机效果、进度推送、状态更新。

二.解决什么问题

传统 HTTP:请求 → 等完整响应 → 断开。

若要实时感,常见做法:

SSE 的定位:服务器持续往下推事件,客户端基本只听。

三.协议信息

  • 响应头:
bash 复制代码
Content-Type: text/event-stream
Cache-Control: no-cache
Connection: keep-alive
  • 响应体是纯文本,按空行分块。每块常见字段:
bash 复制代码
event: text_delta
data: {"content":"你好","mode":"append"}

event: done
data: {}
  • 规则要点:
    • event::事件名(可省略,默认 message)
    • data::载荷;多行 data: 会拼成一条
    • 空行 \n\n:一条事件结束
    • 还可有 id:(断线续传)、retry:(重连间隔毫秒)

四.客户端接收

标准浏览器 API 是 EventSource(只能 GET,自动重连)。

很多 AI/Agent 场景用 fetch + ReadableStream。

前端:fetch → response.body.getReader() → 按 \n\n 拆块解析:

javascript 复制代码
export async function streamAgentMessage(threadId, payload, { signal, onEvent }) {
  // ...
  const response = await fetch(url, {
    method: 'POST',
    headers: { Accept: 'text/event-stream', 'Content-Type': 'application/json' },
    body: JSON.stringify(payload),
    signal,
  })
  // reader.read() → 按空行分块 → parseBlock → onEvent(event, data)
}

注意:这叫"SSE 格式 的流式 HTTP",不完全等于原生 EventSource,但线上很常见。

五.SSE vs WebSocket(怎么选)

聊天机器人打字机输出:SSE(或 fetch 流)通常够用;若还要频繁从浏览器推二进制/高频双向消息,再上 WebSocket。

一句话:SSE = 用长连接 HTTP 响应体,按 event/data 文本格式,让服务器持续推事件。

六.LangChain Event streaming 与 SSE

二者不是同一层技术,也没有官方绑定关系;常见做法是:用 LangChain Event streaming 产生过程事件,再用 SSE(或 WebSocket)把事件送到浏览器。

bash 复制代码
LangChain Event streaming  = "发生了什么"(业务/运行时事件)
SSE                        = "怎么把这些事推给网页"(传输通道)
  • 容易混淆的点
  1. 名字都带 "stream/event",但协议不同

    LangChain 的 event 是 Python 对象/字典;SSE 是 HTTP 文本行(event: / data:)。

  2. LangChain 不会自动开 SSE

    stream_events 只是在服务端给你一个可迭代流;要不要挂到 HTTP、怎么命名事件,都是你自己的事。

  3. SSE 也不依赖 LangChain

    SSE 可以推任何东西(股票价、日志、进度)。只是 AI Agent 场景里,数据源经常是 Event streaming。

  4. 前端也可以不碰 SSE

    例如后端用 WebSocket、或 gRPC stream,照样消费 stream_events。选 SSE,是因为单向推送、HTTP 好接、够用。

结论 :Event streaming 是事件源,SSE 是推送管道;二者通过后端适配层串联。

经典路径:stream_events(v3) → 业务事件 → text/event-stream → Dashboard。

相关推荐
装不满的克莱因瓶4 天前
【SpringAI Alibaba】ReactAgent响应SSE实时流式传输案例实战
java·人工智能·ai·sse·springai
goehou5 天前
Ollama 的流式接口不是 SSE,客户端要改三处
sse·ollama·流式输出·客户端开发
孤狼GPT12 天前
ChatGPT、Codex工程实战:Spring Boot的SSE一直在推送,为什么经过Nginx后前端才一次性显示?
spring boot·chatgpt·sse·codex·chatgptplus
上火的金鱼妹15 天前
关于多进程sse连接通知的实战
javascript·状态模式·sse
七点半.24 天前
FastAPI · SSE · async/await
fastapi·sse
goehou24 天前
LLM ChatServer 实战 - 会话管理、SSE 流式与错误语义的接口设计(附清单)
llm·sse·流式输出·服务端开发·chatserver
流烟默1 个月前
SSE 实战:在 SpringBoot + Vue 项目中零依赖实现轻量级实时消息推送
vue.js·spring boot·后端·sse
Light Gao1 个月前
AI 对话助手如何实现动态交互?一文讲清 AG-UI、SSE、组件与工具调用
人工智能·ui·交互·大语言模型·sse·智能体·ag-ui
goehou1 个月前
流式输出实战:SSE 解析、chunk 拼装与断流重试
python·ai·llm·sse·流式