eventsource 的 readystate 属性实时反映 sse 连接状态:0(connecting)表示正在连接或重连,1(open)表示已建立连接并可接收事件,2(closed)表示已显式关闭且不重连;应结合 onopen、onerror 事件与定期轮询 readystate 来准确监控连接健康度。

在客户端通过 EventSource 实例的 readyState 属性可以实时获取 SSE 连接状态,它是一个只读整数,反映当前连接所处的生命周期阶段。
readyState 的三个可能值及含义
readyState 有且仅有以下三种状态:
-
0(CONNECTING):正在建立连接,或连接已断开、正在重试中;此时尚未收到任何事件,也未触发
open事件 -
1(OPEN):连接已建立,服务端开始发送事件;
open事件已被触发,后续的message或自定义事件可正常接收 -
2(CLOSED):连接被显式关闭(调用了
eventSource.close()),不再尝试重连;此时不会自动恢复,需手动重建实例
监控 readyState 的常用方式
不依赖轮询,推荐通过监听事件 + 定期检查结合的方式掌握连接健康度:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 在
onopen回调里确认进入OPEN状态,标志流已就绪 - 在
onerror中检查eventSource.readyState:若为0,说明正在重连;若长期卡在0,可能是网络问题或服务端未响应 - 主动轮询(如每秒一次)
eventSource.readyState,用于 UI 状态同步(例如显示“连接中…”、“已断开”、“正常接收中”)
注意 readyState 不会自动变为 0 的常见误解
当网络中断或服务端关闭连接时,浏览器会按规范自动尝试重连——此时 readyState 会先变为 0,然后发起新请求。但这个过程是异步的,onerror 可能比 readyState 变更为 0 稍晚触发。因此不要仅靠 onerror 判断断连,应以 readyState 为准。
简单实用的监控示例
可在控制台或 UI 中打印当前状态:
const es = new EventSource('/stream');
es.onopen = () => console.log('✅ 已连接,readyState:', es.readyState); // 1
es.onerror = () => console.log('⚠️ 错误发生,当前 readyState:', es.readyState); // 0 或 2
// 每秒检查一次(适合调试或状态指示)
setInterval(() => {
switch(es.readyState) {
case 0: console.log('? 正在连接或重连'); break;
case 1: console.log('? 连接正常'); break;
case 2: console.log('? 已关闭'); break;
}
}, 1000);
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










