流式响应(Server-Sent Events,下文简称 SSE)已经成为大模型对话的事实标准——从 ChatGPT 的打字机效果到 Claude 的 artifact 渲染,背后都是一条长连接在持续推送 token。但和一次性 HTTP 请求不同,SSE 长连接天然要面对弱网断流、代理超时、Nginx 缓冲、负载均衡连接重置等十几种失效场景。我在线上跑流式对话服务的三年里,亲眼见证过:一次运营商骨干网抖动让 17% 的流式请求中途断开,前端用户感知就是"AI 突然不说话了",背后其实是 TCP 半开连接没人收尾。本文系统讲解 SSE 断流重连的两大核心机制——心跳检测与指数退避,并给出可直接落地的 Node.js 与 Python 生产代码。所有示例统一指向 立即注册 后即可获取的 HolySheep AI 接口(base_url:https://api.holysheep.ai/v1),方便国内开发者无需科学上网就直接跑通验证。
一、为什么 SSE 流式响应如此脆弱
SSE 本质是一条 keep-alive 的 HTTP/1.1 长连接,服务端通过 text/event-stream 持续 write()。这条连接在公网上要穿过 DNS、TLS、CDN、SLB、反向代理、容器网络,至少经过 6 跳。任何一跳的空闲回收(idle timeout)都会让连接无声断裂。常见失效来源有:
- Nginx 默认
proxy_read_timeout 60s,空闲 60 秒就 504; - 移动网络 NAT 表项 30~120 秒未通信即被回收;
- Kubernetes Ingress 默认 60 秒空闲切断;
- 服务端长时间没有 token 输出时(长思考链),心跳缺失被中间件误杀;
- HTTP/2 流被对端 RST_STREAM 而客户端只看到半关闭。
单纯的 try-catch 不