背景与价值实时连接在弱网环境容易断开;心跳与退避策略可降低抖动与资源浪费。连接与心跳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 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部