websocket连接成功和关闭事件通过onopen和onclose回调监听:onopen在readystate为1时触发,可安全send;onclose在关闭时触发,通过event.code、reason和wasclean区分关闭类型;onerror不专用于连接失败,需结合readystate判断状态。

WebSocket 连接成功和关闭事件通过内置的 onopen 和 onclose 回调监听,不需要额外库或轮询。
监听连接成功(onopen)
当 WebSocket 与服务端完成握手、连接建立后触发。此时可安全调用 send() 发送数据。
- 确保在
new WebSocket(url)后立即绑定,避免错过事件 -
onopen只触发一次,且仅在readyState === 1(OPEN)时发生 - 建议在回调中检查
event.target.readyState或直接使用this.readyState
示例:
const ws = new WebSocket('wss://echo.websocket.org');
ws.onopen = function(event) {
console.log('连接已建立', event);
this.send('Hello Server');
};
监听连接关闭(onclose)
当连接被服务端关闭、客户端主动调用 close()、网络中断或握手失败时触发。注意:它不区分“正常关闭”和“异常断连”。
-
event.code表示关闭码(如 1000=正常关闭,1006=异常关闭) -
event.reason是服务端传来的可选关闭原因字符串 -
event.wasClean为true表示是协议级的干净关闭(非网络中断)
示例:
ws.onclose = function(event) {console.log('连接已关闭', {
code: event.code,
reason: event.reason,
wasClean: event.wasClean
});
};
补充:错误与重连建议
onerror 不是连接失败专用事件,它在连接过程出错(如 DNS 失败、SSL 错误、跨域拒绝)或发送/接收异常时都可能触发,且不提供具体错误信息。
- 不要依赖
onerror判断连接是否失败——onopen未触发 +readyState === 0(CONNECTING)或=== 3(CLOSED)更可靠 - 若需自动重连,应在
onclose或定时检测readyState !== 1后重新创建 WebSocket 实例 - 避免频繁重连,建议加入退避策略(如首次 1s,之后每次翻倍)
检查当前连接状态
随时通过 ws.readyState 判断状态:
-
0— CONNECTING:正在连接 -
1— OPEN:已连接,可通信 -
2— CLOSING:正在关闭 -
3— CLOSED:已关闭或连接失败
例如在发送前校验:if (ws.readyState === WebSocket.OPEN) ws.send(data);
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











