retry字段是SSE协议定义的保留字段,值为毫秒整数,用于在连接异常断开后指导客户端重连等待时间;它仅影响自动重连,不适用于首次连接或主动close,且需以“retry: 5000”标准格式独立发送。

在 SSE(Server-Sent Events)中,服务器可以通过发送 retry: 字段来指示客户端重连的时间间隔(单位:毫秒),浏览器会自动识别并应用该值——无需手动解析或设置,但需注意其生效条件和常见陷阱。
retry 字段的格式与位置
retry: 必须作为独立字段行出现在事件流中,末尾需有换行符,且不能与其他字段(如 data:、event:)混在同一行。它只对后续连接生效,不影响当前连接的断开行为。
- ✅ 正确写法:
retry: 5000\n(注意末尾换行) - ❌ 错误写法:
retry:5000(缺少空格)、retry: 5000\r(应为\n或\r\n)、data: hello\nretry: 5000\n(必须独占一行)
浏览器自动应用 retry,但有前提
只有当连接因网络中断、服务器关闭等“非 2xx 响应”原因意外断开时,浏览器才会使用上一次收到的 retry 值进行重试。若调用 EventSource.close() 主动关闭,或服务器返回非 200 响应(如 404、500),则不会触发自动重连,retry 不起作用。
- 服务端返回 200 +
Content-Type: text/event-stream是基础要求 - 连接建立后,服务器中途发送
retry: 10000\n,下次断连后将以 10 秒间隔重试 - 多个
retry行以最后一条为准
手动控制重连逻辑(绕过默认行为)
若需更灵活的重连策略(如指数退避、失败计数、用户手动触发),应禁用浏览器默认重连,改用自定义逻辑:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 创建 EventSource 时传入
{ withCredentials: false }等参数,不改变重连行为;真正禁用默认重连需主动close()并自行管理连接 - 监听
error事件,在回调中清除旧实例、延迟后新建 EventSource - 可在服务器响应的
data:中嵌入 JSON 指令(如{"cmd":"reconnect","delay":8000}),客户端解析后执行自定义延迟重连
调试与验证方法
可通过浏览器开发者工具的 Network 面板观察 SSE 连接的请求头、响应头及接收的原始数据流,确认 retry: 行是否被正确发送;也可在 onerror 回调中打印 eventSource.readyState(0=关闭,0=正在连接,2=已连接)辅助判断重连状态。
不复杂但容易忽略细节,关键在服务端输出格式规范和客户端对连接生命周期的理解。

















