← 中文资源

简体中文版本

诊断 SSE 心跳超时断连

测量服务端事件的心跳间隔与代理空闲超时,避免长连接在安静期被中途切断。

阅读英文原文

目标

实时看板的事件流约一分钟后断开,即使安静期本应保持连接。本配方用 curl -N 观察原始流的注释心跳节奏,对照代理的空闲超时,找出断连原因,并把心跳周期设置到低于最短空闲超时,从而保持长连接;同时在客户端处理重连与 Last-Event-ID 补发。

步骤要点

  1. 用 curl -N 观察原始 SSE 流的心跳节奏。
  2. 把心跳周期设到低于最短空闲超时。
  3. 在客户端实现断线重连与 Last-Event-ID 补发。
  4. 把心跳放到独立定时器,避免被慢处理拖垮。
curl -N -s https://api.example.com/events | \
  awk '{ print strftime("%H:%M:%S"), $0; fflush() }'

排错提示

  • 断线重连需处理补发,否则会丢事件。
  • 高负载下心跳可能被业务处理饿死。
  • HTTP/2 多路复用会改变超时行为。

适用边界

  • 心跳流量随连接数线性增长。
  • 不负责持久化事件供重连补发。