从HTTP到SSE再到WebSocket:大模型流式输出与实时交互的工程演进
从 HTTP 到 SSE 再到 WebSocket:大模型流式输出与实时交互的工程演进
目录
- 一、SSE 是什么
- 二、SSE 与 HTTP 的关系
- 三、为什么不直接用 HTTP
- 四、SSE 在大模型中的应用
- 五、SSE vs WebSocket
- 六、停止生成与连接管理
- 七、SSE + Backpressure 机制
- 八、为什么 AI 框架开始转向 WebSocket
- 九、总结
一、SSE 是什么
SSE(Server-Sent Events)是一种基于 HTTP 的服务器推送技术,用于实现:
服务端 → 客户端的单向流式通信
其核心机制:
- 客户端发起一次 HTTP 请求
- 服务端保持连接不关闭
- 持续返回数据(流式)
👉 本质可以理解为:
一个“不会立即结束”的 HTTP 响应
二、SSE 与 HTTP 的关系
2.1 核心结论
SSE 不是独立协议,而是建立在 HTTP 之上的一种通信模式。
2.2 通信流程
2.2.1 客户端请求
1 | GET /sse |
2.2.2 服务端响应
1 | 200 OK |
随后持续返回数据:
1 | data: hello |
2.3 SSE 依赖的 HTTP 能力
- 长连接(Keep-Alive)
- 分块传输(Chunked Transfer)
- 流式响应(Streaming Response)
👉 一句话:
SSE = HTTP Streaming + 规范化协议 + 浏览器 API
三、为什么不直接用 HTTP
3.1 普通 HTTP 的局限
传统 HTTP 模型:
1 | 请求 → 一次性响应 → 结束 |
问题:
- 无法边生成边返回
- 用户体验差(必须等待完整结果)
- 实时性差
3.2 SSE 的改进
SSE 在 HTTP 上增加:
| 能力 | HTTP | SSE |
|---|---|---|
| 流式输出 | ⚠️ 原始支持 | ✅ 标准化 |
| 数据格式 | ❌ 无 | ✅ data: |
| 事件机制 | ❌ | ✅ |
| 自动重连 | ❌ | ✅ |
👉 本质:
SSE 让 HTTP 具备“实时推送能力”
注意
SSE一般是基于HTTP/1.1实现的,HTTP/1.0默认是短连接,不支持chunked encoding,缺乏稳定的持久连接机制,因此无法支持SSE所需的流式长连接。
四、SSE 在大模型中的应用
4.1 典型链路
1 | 用户输入 prompt |
4.2 一个关键认知
SSE 只负责“返回”,不负责“发送”
- prompt:HTTP 请求发送
- token:SSE 流返回
👉 两个阶段:
| 阶段 | 通信方式 |
|---|---|
| 发送 prompt | HTTP |
| 返回结果 | SSE |
五、SSE vs WebSocket
| 维度 | SSE | WebSocket |
|---|---|---|
| 通信方向 | 单向 | 双向 |
| 协议 | HTTP | 独立协议 |
| 实现复杂度 | 低 | 高 |
| 适用场景 | 流式输出 | 实时交互 |
本质区别
SSE = 流式输出
WebSocket = 实时通信
六、停止生成与连接管理
6.1 核心机制
当用户点击“停止生成”:
前端:
- 使用
AbortController终止请求 - 或关闭 EventSource
后端:
- 感知连接断开
- 主动取消 LLM 生成任务
6.2 关键点
断开连接 ≠ 自动停止生成
必须:
- 前端断开连接 ✅
- 后端取消任务 ✅
6.3 关于连接复用
- Abort 后当前请求结束 ❌
- 下次请求必须重新建立 HTTP 请求 ✅
- TCP 连接可能复用(Keep-Alive)✅
七、SSE + Backpressure 机制
7.1 问题
服务端生成速度 > 前端消费速度
导致:
- 内存堆积
- UI 卡顿
- 延迟逐步放大
7.2 解决方案
- 解决方案一:前端队列
1 | queue.push(chunk); |
- 解决方案二:服务端限速
1 | send(token); |
- 解决方案三:显式 backpressure
1 | client → pause signal → server stop streaming |
(SSE 原生不支持,需要扩展协议)
八、为什么 AI 框架开始转向 WebSocket
8.1 场景变化
早期(SSE 足够)
1 | 用户 → prompt |
现在(Agent 时代)
1 | 用户 ↔ Agent ↔ 工具 ↔ LLM |
8.2 SSE 的瓶颈
- 单向通信
- 无法表达复杂交互
- 控制能力弱(无法实时插入指令)
8.3 WebSocket 的优势
- 全双工通信
- 单连接承载所有交互
- 支持复杂协议(tool call / interrupt)
8.4 对比
SSE
1 | 请求 → 流式响应 → 结束 |
WebSocket
1 | 连接建立 |
九、总结
HTTP 是请求-响应模型,SSE 是流式响应模型,WebSocket 是实时通信模型。
9.1 技术演进路径
1 | HTTP(一次性响应) |
9.2 工程选型建议
| 场景 | 推荐方案 |
|---|---|
| 简单问答 / ChatGPT | SSE |
| 流式生成 | SSE |
| Agent / Copilot | WebSocket |
| 实时协作 | WebSocket |
9.3 最后一层理解
SSE 解决的是“怎么把答案流出来”,
WebSocket 解决的是“怎么和 AI 持续对话”。