SSE、WebSocket和WebRTC怎么选?AI聊天、语音Agent与工具进度推送架构指南
文章摘要
AI应用需要传输文本Token、工具执行进度、语音、图片和用户打断事件。SSE、WebSocket与WebRTC都能实现“实时”,但它们的通信方向、网络适应性、浏览器支持、音视频能力、代理兼容性和开发复杂度完全不同。本文以AI聊天、长任务进度、实时语音、数字人和协同Agent为例,给出协议选型矩阵和混合架构建议。
一、不要只问哪个协议性能最好
真正要问的是:
数据从谁发给谁?
是否需要双向同时发送?
传的是文本还是音视频?
是否需要用户打断?
是否经过企业代理和网关?
是否需要断线恢复?
三种协议的核心定位:
SSE
→ 服务器持续推送文本事件
WebSocket
→ 客户端与服务器双向长连接
WebRTC
→ 面向低延迟音视频和实时媒体
二、SSE适合什么
SSE基于HTTP,响应类型为:
text/event-stream
特点:
- 服务器到客户端单向推送;
- 浏览器原生支持EventSource;
- 与HTTP基础设施兼容;
- 文本事件简单;
- 支持事件ID和自动重连;
- 易于经过Nginx和网关。
适合:
- AI文本逐字输出;
- 报告生成进度;
- Agent工具执行事件;
- 后台任务状态;
- 日志与通知;
- 服务端主动推送低频状态。
优点
实现简单
运维成熟
与HTTP认证体系兼容
容易调试
适合文本事件
局限
主要是服务端到客户端
EventSource默认只支持GET
不适合二进制音视频
浏览器并发连接有限制
复杂交互需要额外HTTP请求
AI聊天通常可以:
POST提交问题
→ SSE或fetch流接收回答
不一定需要WebSocket。
三、WebSocket适合什么
WebSocket握手后建立双向连接:
客户端 ⇄ 服务器
适合:
- 用户随时发送控制事件;
- 多Agent实时协同界面;
- 远程终端;
- 在线代码执行控制台;
- 高频双向状态同步;
- 复杂交互式工作台。
优点
- 真正双向;
- 可以发送文本和二进制;
- 协议开销低;
- 一个连接承载多种事件;
- 适合用户中途修改任务。
局限
- 连接状态管理更复杂;
- 断线重连需要自己设计;
- 负载均衡需要连接感知;
- 网关和安全设备兼容性需要验证;
- 消息确认、顺序和幂等需要应用层处理。
四、WebRTC适合什么
WebRTC针对实时媒体设计:
- 音频;
- 视频;
- 实时数据通道;
- 抖动控制;
- 编解码;
- 回声消除;
- NAT穿透。
适合:
- 实时语音Agent;
- 数字人;
- 视频客服;
- 实时翻译;
- 低延迟音视频互动。
优点
低延迟媒体传输
浏览器原生支持
音视频编解码
回声消除和抖动处理
适应网络变化
局限
信令仍需额外通道
ICE、STUN、TURN复杂
服务端媒体处理门槛高
企业网络可能限制UDP
调试成本高
如果只是文字聊天,不应为了“实时”直接使用WebRTC。
五、核心对比
| 维度 | SSE | WebSocket | WebRTC |
|---|---|---|---|
| 通信方向 | 服务器→客户端 | 双向 | 双向媒体 |
| 主要数据 | 文本事件 | 文本与二进制 | 音视频与数据 |
| 浏览器支持 | 原生 | 原生 | 原生 |
| HTTP代理兼容 | 高 | 中高 | 相对复杂 |
| 断线恢复 | EventSource可自动 | 自行实现 | 自行实现 |
| 音视频 | 不适合 | 可以但不专业 | 最适合 |
| 开发复杂度 | 低 | 中 | 高 |
| AI文本流 | 最适合 | 可用 | 不需要 |
| 实时语音 | 不适合 | 可传但能力有限 | 最适合 |
六、AI文本聊天怎么选
典型需求:
用户提交一条消息
→ 服务端连续返回Token
推荐:
POST+fetch ReadableStream
或者:
POST创建任务
→ EventSource订阅任务事件
WebSocket只有在以下需求明显时才值得使用:
- 一个连接内连续多轮;
- 用户频繁发送取消、暂停、修改;
- 服务端主动发起多个并行任务事件;
- 需要双向协作状态。
七、工具调用进度怎么选
Agent轨迹:
模型分析
→ 调用搜索
→ 读取文件
→ 执行代码
→ 生成报告
事件格式:
{
"type": "tool_start",
"step": 3,
"tool": "search_web",
"message": "正在检索官方资料"
}
这种场景使用SSE非常合适。
用户需要取消时,可以另外发送:
POST /tasks/{id}/cancel
不需要仅为了一个取消按钮切换到WebSocket。
八、语音Agent怎么选
实时语音要求:
- 连续上传麦克风音频;
- 连续接收模型语音;
- 用户随时打断;
- 低延迟;
- 处理网络抖动;
- 回声消除。
浏览器和移动端优先:
WebRTC
服务端电话系统可以使用:
SIP
+WebSocket或专用媒体连接
如果用普通WebSocket传PCM音频,需要自己处理:
- 音频切片;
- 时间戳;
- 抖动;
- 缓冲;
- 丢包;
- 回声;
- 编解码。
九、数字人场景
数字人包含:
语音
视频
口型
动作
文本字幕
工具状态
推荐混合:
WebRTC
→ 音视频
WebSocket或SSE
→ 字幕、工具、状态、控制
不要把所有控制元数据塞进视频流。
十、企业代理环境下的选择
企业网络通常对HTTP最友好。
优先级:
文本流:SSE
双向控制:WebSocket
音视频:WebRTC并准备TURN回退
上线前测试:
- 公司VPN;
- 代理服务器;
- WAF;
- 移动网络;
- 海外网络;
- 弱网;
- 长连接超时。
十一、认证方式
SSE EventSource
原生EventSource不方便设置自定义Authorization Header。
常见方案:
- Cookie会话;
- 短期一次性Token放Query;
- 先POST创建任务,再订阅;
- 使用fetch读取流。
敏感长期Token不要放URL。
WebSocket
可以在握手时使用:
- Cookie;
- Query短期Token;
- 子协议;
- 第一条认证消息。
WebRTC
信令阶段认证,并由后端生成短期会话凭证。
十二、断线恢复
SSE
可以使用:
id: 123
浏览器重连时携带:
Last-Event-ID
服务端从事件日志恢复。
WebSocket
自行维护:
connection_id
last_sequence
ack
resume_token
WebRTC
媒体会话通常需要重新协商或恢复,需要独立业务状态保证任务不丢失。
十三、背压与慢客户端
不论使用哪种协议,都要处理:
模型输出速度
>
客户端消费速度
策略:
- 限制缓冲;
- 合并小Token;
- 丢弃非关键进度;
- 慢客户端超时;
- 断开后保存任务结果;
- 不把完整内容无限堆在内存。
音视频还需要动态码率和抖动缓冲。
十四、推荐选型矩阵
普通AI聊天
fetch流或SSE
Agent长任务进度
SSE
交互式Agent工作台
WebSocket
语音Agent
WebRTC
电话Agent
SIP+服务端实时媒体通道
数字人
WebRTC+WebSocket或SSE
十五、最佳实践:业务事件与传输协议解耦
定义统一事件:
public record AiEvent(
String type,
long sequence,
String taskId,
Object data
) {
}
传输适配器:
AiEvent
→ SSE Adapter
→ WebSocket Adapter
→ WebRTC DataChannel Adapter
业务层不要直接依赖某一种连接对象。
这样同一个Agent可以同时服务:
- 网页SSE;
- 工作台WebSocket;
- 语音WebRTC。
总结
选型可以概括为:
只需要服务器推送文本
→ SSE
需要高频双向控制
→ WebSocket
需要低延迟音视频
→ WebRTC
成熟AI应用通常不是三选一,而是让不同协议各自承载最适合的数据类型。
延伸阅读
如果你正在关注企业级 AI 应用、Agent、RAG、MCP 与大模型工程化落地,欢迎访问 智元界:
https://www.zyentor.com/
智元界将持续分享可运行的技术实战、架构设计、问题排查与企业应用案例。