直接访问 WebSocket 实例的 readyState 属性可获取连接状态,其为只读数字值:0(CONNECTING)、1(OPEN)、2(CLOSING)、3(CLOSED);需确保实例存在且推荐用 WebSocket.OPEN 等常量判断,注意该值不实时反映网络可用性。

直接访问 WebSocket 实例的 readyState 属性即可获取当前连接状态。它是一个只读数字值,对应预定义的常量。
readyState 的取值和含义
WebSocket 规范定义了 4 个标准状态,对应常量如下(实际开发中建议用常量名或数值比对):
- 0(CONNECTING):正在连接中,尚未建立连接
- 1(OPEN):连接已成功建立,可以收发消息
- 2(CLOSING):连接正在关闭(如调用了 close(),但还未完成)
- 3(CLOSED):连接已关闭或连接尝试失败
如何安全地读取和判断 readyState
在使用前需确保 WebSocket 实例已创建,且未被垃圾回收。常见写法:
- 直接读取:
ws.readyState(返回 0–3 的整数) - 推荐用常量判断(提升可读性):
if (ws.readyState === WebSocket.OPEN) { ... } - 避免仅靠数值硬编码,比如不要写
if (ws.readyState === 1),除非上下文明确且无维护风险
注意 readyState 不是实时“心跳”指标
它只反映连接的**协议层状态**,不保证网络通畅或服务端可达:
- 即使
readyState === 1,也可能因网络中断、服务端宕机而实际不可用 - 断网后浏览器不会立刻更新 readyState,通常要等超时或尝试发包失败后才降为 CLOSED
- 如需确认连接可用性,应配合 ping/pong 心跳机制或业务层超时重试
实用小技巧:封装状态检查函数
可快速复用的状态判断辅助函数示例:
function isWebSocketOpen(ws) {
return ws && ws.readyState === WebSocket.OPEN;
}
function getWebSocketStatus(ws) {
const status = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];
return status[ws?.readyState] || 'INVALID';
}


















