Я пытаюсь внедрить защищенную оболочку websocket. И проблема, которую я имею, имеет дело с ошибками тайм-аута. Логика должна быть: если сокет не открывается во время $ timeoutInMiliseconds - он должен быть закрыт и снова открыт $ N раз.Время ожидания подключения к WebSocket
Я пишу что-то вроде этого.
var maxReconects = 0;
var ws = new WebSocket(url);
var onCloseHandler = function() {
if (maxReconects < N) {
maxReconects++;
// construct new Websocket
....
}
};
ws.onclose = onCloseHandler;
var timeout = setTimeout(function() {
console.log("Socket connection timeout",ws.readyState);
timedOut = true;
ws.close(); <--- ws.readyState is 0 here
timedOut = false;
},timeoutInMiliseconds);
Но проблема обработки тайм-аут WebSockets правильный путь - если я пытаюсь закрыть несвязно сокет я получать предупреждения в хроме:
«WebSocket подключение к«WS: //127.0.0.1: 9010/timeout 'failed: WebSocket закрыт до установления соединения. "
И у меня нет идеи, как этого избежать - интерфейс ws не имеет функции прерывания.
Другой aproach, который я пробовал, заключается не в том, чтобы закрыть сокет по таймауту, если он не подключен, а просто пометьте его как не использованный больше и закроет его, если он получит readyState более одного, - но он может создавать возможные утечки и сложный для такая простая задача.