跳到主要内容

1 篇博文 含有标签「WebSocket」

查看所有标签

EventSource 是什么,为什么 Agent 流式接收最后都换成了 fetch + ReadableStream

· 阅读需 33 分钟

「Agent 为什么都用 fetch + ReadableStream 读流?EventSource 不是也能收 SSE 吗?」

这个问题问得对,但流传的答案「大厂从 SSE 换成了 ReadableStream」说得不准。真实情况是:

EventSource 是浏览器内置的 SSE 客户端,它在「打开一个 URL、持续收通知」这件事上是满分答案。但 Agent 场景需要的几件事——发 POST、带请求头、看状态码——它一件也做不到,重连语义也完全不由你控制。于是大家保留了 SSE 的帧格式,只把「读它的那只手」换成了 fetch + ReadableStream。

这篇按这条线讲透:① EventSource 到底是什么 → ② 为什么 Agent 场景要换掉它 → ③ 换成 fetch + ReadableStream 之后怎么写(含可跑的最小实现)→ ④ 流式端点的三个生产雷区 → ⑤ 这套也不够用时,什么时候必须上 WebSocket / WebRTC。

正文的实测都在本机 Node 上跑出来,脚本随仓库留档在 source/stream-lab/。