DmitryITWorksMakarov
@DmitryITWorksMakarov

Замедляется реконнект вебсокетов в Firefox. Почему так? Как побороть?

Здравствуйте, коллеги!

Реализую общение с сервером с помощью 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: в комментарии подробно описал: как по моему мнению работает код.
  • Вопрос задан
  • 271 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы