EventSource 是什么,为什么 Agent 流式接收最后都换成了 fetch + ReadableStream
「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/。
