@Iliyaity

Как реализовать автоматическое соединение Websocket при падении сервера?

Нужно написать функцию, которая восстанавливает соединение вебсокета при падении сервера,чтобы нотификации приходили без обновления страницы.

В голову пока что приходит только такая реализация:

this.socket.onclose = function(event) {
         if (event.wasClean) {
         console.log('Соединение закрыто чисто');
         } else {

          setInterval(function() {

        this.socket =  new WebSocket("ws://http" + hash);
   console.log("переподключение")
        }, 1000);

         console.log('Обрыв соединения'); 
         }
         console.log('Код: ' + event.code + ' причина: ' + event.reason);
       };


Подскажите пожалуйста в каком направлении двигаться?Как можно реализовать данный функционал ?
  • Вопрос задан
  • 1979 просмотров
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
1. setInterval вообще не нужен
2. this.socket = new WebSocket - на этой строке в строгом режиме будет ошибка (this === undefined), а в нестрогом (почему его нет?) создаст socket в глобальном объекте (что плохо)
3. После создания соединения, события нужно снова навесить

У меня лично вот так вот все организовано:
const url = `${location.protocol === 'http:' ? 'ws:' : 'wss:'}//${location.host}/`;

var socket;
var connected = false;

typeof WebSocket !== 'undefined' && function connect() {
    socket = new WebSocket(url);
    socket.onmessage = onMessage;
    socket.onopen = () => connected = true;
    socket.onerror = err => {
        console.error(err);
        socket.onclose = null;
        connected = false;
        socket.close();
        connect();
    };
    socket.onclose = event => {
        console.info(`WebSocket closed with code ${event.code}! ${event.reason}`);
        connected = false;
        if(event.wasClean) return;
        connect();
    };
}();

function onMessage(event) {
    //...
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы