EventSource API在连接非正常关闭时会自动发起重连,无需开发者编写任何重连代码。默认重连间隔为3000毫秒(3秒),该值由浏览器实现决定,部分浏览器可能使用不同默认值。
服务器可在事件流中随时下发retry:字段(值为毫秒数),浏览器收到后会将该值作为后续重连的等待时间。例如retry: 10000\n\n告知浏览器10秒后再尝试重连,适用于服务器即将重启、希望客户端延迟重连以减少无效连接请求的场景。
每条SSE 消息可携带id:字段,浏览器会自动记录最后一次成功接收的消息ID。重连时浏览器会在HTTP请求头中自动附带Last-Event-ID: <最后收到的ID>,服务器收到后可查询该ID之后的新消息并补发给客户端,实现"至少一次"的消息传递保证。
开发者可通过eventSource.close()主动关闭连接,此时浏览器不会再自动重连。如需实现自定义重连策略(如指数退避、最大重试次数限制),可在onerror回调中主动关闭EventSource并自行控制重连节奏,而非依赖浏览器默认行为。