逐日 AI

SSE 实时进度不工作的排查:代理缓冲、超时与连接断开

作者:夸父

工作台的实时进度走 SSE(Server-Sent Events)。进度条不动、进度"一顿一顿"、或长时间后断开——三类问题的排查链路:代理配置、超时设置、网络环境。

SSE 的工作原理(排查的地图)

Server-Sent Events 是服务器到浏览器的单向长连接:任务状态变化时服务器推送事件,浏览器实时更新进度。链路上的每一环都可能"善意地"缓冲或掐断长连接——SSE 的问题几乎都是中间层配置。

进度不动:缓冲问题

nginx 的 proxy_buffering:默认开启会把 SSE 事件攒着一起发——必须对该 location 关闭(proxy_buffering off;,逐日 AI 的推荐配置已含)。gzip 压缩:对 text/event-stream 压缩会缓冲——排除该类型。CDN:多数 CDN 默认不透传 SSE——/api 路径配为回源不缓存,或 SSE 路径绕过 CDN 直连源站。

几分钟断开:超时问题

proxy_read_timeout:nginx 默认 60 秒无数据即断——服务端心跳(注释帧)+ 超时调大双保险。云 LB/防火墙的空闲超时:部分云产品的 LB 空闲超时最短 60 秒且不可调——心跳间隔必须短于它。浏览器的并发连接限制:HTTP/1.1 下同域 6 个连接——多个 SSE 同时开时注意(HTTP/2 无此限制,nginx 开 http2)。

断开后的自动重连

SSE 的浏览器端有原生自动重连(EventSource)——断开后几秒内重连并从断点继续。逐日 AI 的进度组件依赖这个机制:短暂的断开是无感的,用户看到的是进度"顿一下再走"。频繁顿说明断开频繁——回到上面的缓冲与超时排查。

内网与反代的特殊场景

企业内网的反代设备(安全网关)对长连接的处理差异大——内网部署(见内网方案)时如果 SSE 异常,优先排查网关的连接保活策略;实在不行,回退轮询模式(功能一致,实时性略降)。

常见问题

进度条完全不动是 SSE 断了吗?

先二分:任务真的在跑吗(后台日志看 worker 在干活)?在跑但进度不动 = SSE 链路断了——最常见的是中间层(nginx/CDN)缓冲了事件流。nginx 需要关 buffering,CDN 默认不支持 SSE 走特殊配置。

SSE 连接几分钟就断开?

链路上的某个节点有读超时:nginx 的 proxy_read_timeout、云 LB 的空闲超时、或浏览器的连接限制。解决:服务端加心跳(每 15~30 秒发注释帧保活)+ 各层超时调大。逐日 AI 默认已配心跳与超时。

三步,出你的第一条片

套用一个案例模板,替换成你的内容——注册后即可进入工作台逐段生成、合成导出。

反馈建议