Здравствуйте, коллеги!
Реализую общение с сервером с помощью WebSocket`ов.
По плану должен быть автоматический реконнект.
Делаю вот таким кодом:
"use strict";
let webSocket = undefined;
let timer = 0;
function Link (url) {
function startWebSocket () {
if (webSocket !== undefined) return;
webSocket = new WebSocket(url);
webSocket.onmessage = event => console.log(event);
webSocket.onopen = () => {
if (timer === 0) return;
clearInterval(timer);
timer = 0;
};
webSocket.onclose = () => {
webSocket = undefined;
if (timer === 0) timer = setInterval(startWebSocket, 1000);
};
}
function sendMessage (message) {
if (webSocket === undefined) return;
webSocket.send(message);
}
return {
send: sendMessage,
start: startWebSocket
};
}
export default Link;
Из кода все лишнее убрал. Есть еще предобработка принятых сообщений и генерация событий на открытие/закрытие/ошибку/принятое сообщение, но это к делу не относится.
Есть проблема. В Firefox`е. После порядка 10 попыток коннекта пауза между попытками увеличивается до 30 и более секунд. В Chrome такого не наблюдается.
Это бага или фича?
Как победить такое поведение?
UPD: в комментарии подробно описал: как по моему мнению работает код.