WebSocket断线后怎么优雅重连?重试太多次反而卡死页面了
我用 WebSocket 做了个聊天功能,网络不稳时经常断开,现在手动加了重连逻辑,但一断就疯狂重试,浏览器直接卡住。试过加延迟,但好像没控制好次数。
目前是这样写的:
function connect() {
const ws = new WebSocket('wss://example.com/chat');
ws.onclose = () => {
setTimeout(() => connect(), 1000);
};
}
感觉这样无限递归下去肯定不行,有没有靠谱的重连策略?比如最多重试5次、间隔递增之类的?
核心思路:计数器限制次数,指数退避拉长间隔。
直接改:
间隔递增逻辑:第1次1秒,第2次2秒,第3次4秒,第4次8秒,第5次16秒。5次都用完还没连上就直接放弃,省得一直折腾。
如果想更稳妥,可以在 onerror 里也触发重连(上面已经加了),否则有些浏览器只触发 error 不触发 close。