[技术调研/Agent/数据传输] AI 应用的数据传输方案:SSE / Streamable HTTP(MCP) / WebSocket‑Transport(RFD‑MCP) / 标准 WebSocket
1 AI 应用的数据传输方案
术语简释
- SSE:Server‑Sent Events,HTTP 单向流式,服务端推、客户端不能发
-
WebSocket:标准双向长连接协议
-
Streamable HTTP(MCP 协议定义):MCP 规范里的流式 HTTP 传输,单请求多 chunk 流式响应,支持会话复用
-
WebSocket Transport(RFD):MCP 的 WebSocket transport,底层就是 WebSocket,MCP 封装后的传输层
综合对比
| 特性 | SSE(Server‑Sent Events) | 标准 WebSocket | Streamable HTTP(MCP) | WebSocket Transport(RFD‑MCP) |
|---|---|---|---|---|
| 底层协议 | HTTP/1.1~HTTP2,基于普通 HTTP 响应 | HTTP 握手后升级为 WS 二进制帧 | 标准 HTTP POST,chunked 分块响应 | HTTP 握手升级为 WebSocket 帧 |
| 通信方向 | 单向:服务端→客户端,客户端只能初始请求,连接建立后客户端无法发送新消息 | 全双工双向:客户端、服务端随时互发消息 | 半双工,请求‑流式响应;一轮请求返回多段流式 chunk;如需客户端发消息,需要发起新 HTTP 请求 | 全双工双向,和原生 WebSocket 能力一致,MCP 消息封装 |
| 连接模型 | 长连接,单个 HTTP 响应持续打开 | 持久长连接,一条连接持续交互 | 无持久长连接;每个客户端发送消息都发起新 POST 请求,响应为 chunk 流;会话靠 header/cookie 维护 | 单条 WebSocket 长连接,整个会话复用同一连接 |
| 消息编码 | 文本,data: xxx\n\n事件格式 |
文本 / 二进制都支持 | MCP JSON 消息,HTTP chunk 分片 | MCP JSON 消息,WebSocket 帧分片 |
| 浏览器原生支持 | ✅原生 EventSource API | ✅原生 WebSocket API | ❌无原生 API,需要手动 fetch + 读取 response stream | ✅浏览器原生 WebSocket API |
| 跨域 | 受 CORS 限制,简单跨域 | 需要服务端配置 ws 跨域 | 受 CORS 限制 | ws 跨域配置 |
| 网络中断重连 | 浏览器 EventSource 自带简单重连 | 需要业务自己实现重连逻辑 | 业务层自己处理重试、会话恢复 | 业务层实现重连 |
| 适用 AI 场景 | LLM 流式输出,只需要看返回,不需要频繁向服务端发指令 | AI Agent 双向交互,工具调用、多轮实时对话,客户端频繁发消息 | MCP 协议推荐传输;适合服务端不方便开放 WebSocket;云环境、网关 / 代理友好;无长连接占用 | MCP 双向交互;Agent 实时工具调用;频繁双向消息交互 |
| 网关 / 代理兼容性 | 绝大多数网关、CDN 支持 | 部分老旧代理会切断长连接 | 最好,完全普通 HTTP,几乎所有代理、负载均衡、云服务商兼容 | 部分代理对 ws 长连接有超时切断策略 |
| 缺点 | 客户端无法推送消息;只能文本;不能二进制;无法双向交互 | 长连接资源占用,负载均衡需要会话保持;容易被防火墙拦截 | 每一次客户端发消息都要新建 HTTP 请求;有 HTTP 握手开销;不是真正实时双向 | 长连接运维,需要处理心跳、断线、会话保活 |
| 典型使用场景 | 简单大模型流式问答,只输出不交互 | MCP WebSocket、实时 AI 对话、语音实时交互 | MCP Streamable HTTP,云函数、serverless 环境部署 MCP | 本地 MCP 客户端对接 MCP 服务,双向 Agent 工具调用 |
- AI 开发选型小结
- 只需要看大模型流式输出,客户端不用发消息:选 SSE
- Serverless / 云函数,网关不支持 WebSocket,做 MCP:选 Streamable HTTP
- 需要双向高频交互(Agent、工具调用、多轮实时),环境允许长连接:优先 WebSocket Transport(RFD‑MCP)
Streamable HTTP不是长连接,每次客户端发送指令都要发起新 POST 请求,靠会话 ID 维持上下文;WebSocket Transport 是真正长连接,一条连接来回收发。
落地占比的统计(预估)
- 说明:
- 通用 LLM 对话场景(公有 API、普通 AI 聊天产品):不含 MCP;
- MCP 生态场景(Agent 工具调用):公开 MCP Registry 统计数据;
- WebSocket‑Transport (RFD‑MCP):MCP 规范中该传输实际公开部署占比很低,多为实验 / 内网场景,公开 registry 统计没有单独统计该条目。
1)通用 LLM 对话场景(普通 AI 聊天、大模型 API,非 MCP)
| 传输方案 | 落地占比 | 主要场景 | 备注 |
|---|---|---|---|
| SSE | 75%‑80% | 公有大模型 API(OpenAI/Anthropic/ 国内各家)、网页端流式问答 | 行业绝对主流,单向 token 输出;客户端发消息走普通 POST,SSE 只管返回流IETF Datat... |
| 标准 WebSocket | 15%‑20% | 实时语音对话(OpenAI Realtime)、需要中途打断输出、浏览器端 Agent 双向交互 | 适合高频双向;防火墙 / 代理兼容性差,运维成本高CSDN博... |
| Streamable HTTP(MCP) | <5% | 只有接入 MCP 远程服务的业务才会使用 | 不属于普通 LLM API,是 MCP 专用传输 |
| WebSocket‑Transport(RFD‑MCP) | <1% | 几乎只在内网 POC、本地调试;公开业务极少 | MCP 的 WebSocket 封装,生产公开部署很少 |
2)MCP 生态公开服务统计(MCP‑Scorecard 2026‑03 公开 registry 数据)
注意:MCP 本地绝大多数是
stdio(进程内,不属于网络传输);下面只统计网络传输(排除 stdio)
| MCP 网络传输方案 | 在网络 MCP 服务中占比 | 说明 |
|---|---|---|
| Streamable HTTP | 82% | MCP 官方主推远程传输,Serverless、网关友好,新 MCP 远程服务绝大多数选它 |
| 遗留 SSE(旧版 MCP SSE) | 15% | 老项目存量,规范标记为 deprecated,新项目不再推荐 |
| WebSocket‑Transport (RFD‑MCP) | 3% | 几乎是实验项目,公开 registry 登记数量极少;多用于内网、桌面客户端直连 |
- 完整 MCP 全量(含本地 stdio):
stdio66.7%,Streamable‑HTTP33.9%,遗留 SSE 6.2%(可同时声明多种 transport,总和 > 100%)。
3)综合落地选型判断表
| 业务类型 | 首选 | 备选 | 避坑 |
|---|---|---|---|
| 普通网页 AI 聊天,文本流式输出 | SSE | WebSocket(语音场景) | 不要盲目上 WebSocket,增加运维负担 |
| MCP 远程服务、Serverless、云函数、网关环境 | Streamable HTTP | 遗留 SSE(存量) | 不选 WebSocket‑Transport,长连接在云网关容易超时断开 |
| 内网 Agent、桌面客户端直连 MCP、高频双向消息 | WebSocket‑Transport(RFD‑MCP) | Streamable HTTP | 不适合公网多用户,连接保活、会话粘滞成本高 |
关键趋势小结
- 普通 LLM 流式:
SSE垄断公有 API,绝大多数 C 端 AI 产品采用;WebSocket主要用于语音实时交互场景。 - MCP 远程服务:
Streamable HTTP快速替代旧 SSE,成为远程 MCP 事实标准;MCP‑WebSocket‑Transport目前还是小众实验选项,公网生产落地很少。 WebSocket‑Transport (RFD‑MCP)能力最强,但长连接运维、代理超时、会话保持代价高,优先内网 POC,公网大规模生产谨慎选择。
Z FAQ for AI 应用的数据传输方案
Q: 如何理解 JSON-RPC 、SSE、Streamable HTTP、stdio 的关系?(必读)
核心分层理解
- JSON‑RPC 2.0:消息格式层(语义):定义消息长什么样(request/response/notification),与传输无关。
- stdio / Streamable‑HTTP / SSE:传输层(管道):负责把 JSON‑RPC 字节搬运到对端,是承载 JSON‑RPC 的不同通道。
- SSE 既是独立传输,又是 Streamable‑HTTP 内部用于流式返回的响应格式(旧版MCP是独立transport;新版嵌入在Streamable‑HTTP内部)。
概念对比表
| 名称 | 层级 | 本质 | JSON‑RPC承载方式 | 状态 | 典型场景 |
|---|---|---|---|---|---|
| JSON‑RPC 2.0 | 消息协议层 | 消息语义规范,定义请求/响应/通知 | 被所有传输承载,不是传输通道 | 标准 | MCP上层消息格式,不负责网络/IPC收发 |
| stdio | 传输层(本地IPC) | 子进程标准输入输出管道 | 换行分隔JSON‑RPC,stdin读、stdout写;stderr做日志 | MCP官方标准传输 | 本地MCP服务,子进程调用,桌面客户端 |
| SSE(HTTP+SSE旧MCP传输) | 传输层(已废弃) | 双端点:GET长连接收流,POST发消息 | POST body放JSON‑RPC;SSE event包裹JSON‑RPC | Deprecated,旧版MCP | 历史老版本的MCP远程服务,不要新项目使用 |
| Streamable HTTP | 传输层(MCP新标准) | 单端点HTTP,兼容普通JSON / SSE流式响应 | POST请求body携带JSON‑RPC;响应可返回普通JSON,或切换SSE流返回多条JSON‑RPC;Mcp‑Session‑Id维持会话 |
MCP官方标准远程传输 | 公网/Serverless MCP远程服务;SSE作为它内部流式能力,不是独立transport |
关键澄清:
Streamable‑HTTP不等于SSE:SSE只是它的其中一种响应模式;【短请求】直接返回普通JSON,此时不需要SSE。stdio不走网络,是【本地本机的进程间管道】;JSON‑RPC消息以换行分割,没有HTTP。JSON‑RPC本身可跑在 stdio、HTTP、WebSocket、TCP任意通信通道上。
Mermaid图示
1)协议栈分层图
graph TD
subgraph 消息格式层
A[JSON‑RPC 2.0<br/>Request / Response / Notification]
end
subgraph 传输层Transport
T1[stdio<br/>本地子进程stdin/stdout管道]
T2[Streamable‑HTTP<br/>单端点HTTP<br/> ├─普通JSON响应<br/> └─SSE流式响应(内部能力)]
T3[旧版废弃:HTTP+SSE Transport<br/>GET(/sse)+POST(/message)双端点]
end
A -->|JSON‑RPC消息被封装在不同管道| T1
A -->|JSON‑RPC消息被封装在不同管道| T2
A -->|JSON‑RPC消息被封装在不同管道| T3
2)3种传输的消息流转对比
sequenceDiagram
note over Client,Server:🔹stdio(本地子进程)
participant Client
participant Server[MCP‑Server子进程]
Client->>Server: stdin → JSON‑RPC\n
Server->>Client: stdout ← JSON‑RPC\n
note over Client,Server:🔹Streamable‑HTTP(现代MCP远程)
participant C
participant S
C->>S:POST /mcp body=JSON‑RPC<br/>Mcp‑Session‑Id
alt短请求
S-->>C:HTTP 200 JSON‑RPC结果
else长任务流式
S-->>C:Content‑Type:text/event‑stream<br/>SSE event包裹多条JSON‑RPC
end
note over Client,Server:🔹旧废弃HTTP+SSE Transport
participant CC
participant SS
CC->>SS:GET /sse(建立SSE长连接)
CC->>SS:POST /message body=JSON‑RPC
SS-->>CC:SSE event推送JSON‑RPC消息
极简总结
- JSON‑RPC = 说话的语法;stdio / Streamable‑HTTP / SSE = 传话的管道。语法不变,管道可以换。
- stdio:本机进程管道,无网络;Streamable‑HTTP:现代MCP远程标准,内部按需启用SSE做流式;旧HTTP+SSE双端点已废弃。
- SSE现在更多是Streamable‑HTTP内部的流式响应手段,不再作为独立顶层transport。
Y 推荐文献
- [JSON/RPC/MCP] JSON-RPC 2.0 : 轻量级远程过程调用协议 - 博客园/千千寰宇
- [HTTP/JS/Python] SSE(Server Send Events) :服务器 => 浏览器的消息推送解决方案 - 博客园/千千寰宇
- [HTTP/Web] WebSocket : 全双工、长连接、低延迟、双向实时通信场景的解决方案 - 博客园/千千寰宇
浙公网安备 33010602011771号