WebSocket连接需以wss://开头保障安全,监听onopen/onmessage/onerror/onclose四大事件,发消息前校验readyState,配合指数退避重连与30秒心跳机制确保持久可靠。

直接用 new WebSocket(url) 就能建立持久化双向连接,关键不在“怎么写”,而在“怎么稳”——连接要可靠、消息要可达、断线要自愈。
创建连接并确认协议安全
URL 必须以 wss:// 开头(生产环境强制要求),避免明文传输被劫持或拦截:
- 开发阶段可用
ws://localhost:8080调试 - 上线必须用
wss://your-api.com/realtime,且后端需配置有效 TLS 证书 - 可携带鉴权参数,如
wss://api.example.com/realtime?token=abc123,服务端在握手阶段校验
监听四大核心事件,一个都不能少
只写 onopen 和 onmessage 是常见误区,缺少异常处理会导致静默失败:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- onopen:连接就绪后立即发送订阅指令或身份认证包
-
onmessage:统一用
JSON.parse()解析,加try/catch捕获非法数据 - onerror:不表示断连,而是操作异常(如向关闭中的连接 send),用于快速定位问题
-
onclose:检查
event.code(如 1006 表示异常断开,4001 可能是鉴权失败),辅助诊断
发消息前务必检查 readyState
WebSocket 不是“一建就好”,连接有延迟,状态会经历 CONNECTING → OPEN → CLOSING → CLOSED:
立即学习“Java免费学习笔记(深入)”;
- 只在
ws.readyState === WebSocket.OPEN时调用send() - 若为
CONNECTING,可暂存待发消息,等onopen触发后再批量发出 - 若为
CLOSING或CLOSED,应停止发送并启动重连逻辑
让连接真正“持久”:重连 + 心跳不能省
网络抖动、NAT 超时、服务重启都会导致断连,纯靠手动刷新不行:
- 重连策略:首次失败后延时 1s,之后按指数退避(1s→2s→4s→8s),上限建议 30s,避免雪崩请求
-
心跳机制:客户端每 30 秒发一次
{"type":"ping"},服务端必须回应{"type":"pong"};若连续 2 次未收到 pong,则主动 close 并触发重连 - 重连时复用原 token 和订阅状态,避免重复登录或漏消息

















