背景与价值实时连接在弱网环境容易断开;心跳与退避策略可降低抖动与资源浪费。连接与心跳class WSClient { url: string; ws: WebSocket | null = null; hb?: any; backoff = 1000; max = 30000; constructor(url: string) { this.url = url; } connect() { this.ws = new WebSocket(this.url); this.ws.addEventListener('open', () => this.startHeartbeat()); this.ws.addEventListener('message', (e) => this.onMsg(e)); this.ws.addEventListener('close', () => this.scheduleReconnect()); this.ws.addEventListener('error', () => this.scheduleReconnect()); } startHeartbeat() { this.clearHeartbeat(); this.backoff = 1000; this.hb = setInterval(() => this.ws?.send(JSON.stringify({ t: 'ping' })), 15000); } clearHeartbeat() { if (this.hb) { clearInterval(this.hb); this.hb = undefined; } } scheduleReconnect() { this.clearHeartbeat(); const wait = this.backoff; this.backoff = Math.min(this.backoff * 2, this.max); setTimeout(() => this.connect(), wait); } onMsg(e: MessageEvent) { /* 业务处理与pong响应 */ } } 指标验证(Chrome 128/Edge 130 + 弱网模拟)连接恢复成功率:≥ 98%。平均恢复时延:P95 ≤ 4s(指数退避上限 30s)。误重连抑制:重复重连占比 ≤ 2%。设计要点退避上限与抖动(随机偏移)避免“同步风暴”。心跳间隔平衡能耗与检测速度;移动端建议 ≥ 15s。后端配合:支持 `ping/pong` 或应用层心跳;空闲超时策略与客户端一致。回退策略不支持长连接:回退为轮询或 SSE;根据业务选择。测试清单断网/弱网/网络切换:连接能恢复且消息不丢失或可补偿。服务端滚动重启:客户端重连稳定,无连锁崩溃。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部
1.713408s