Как переподключить сокет с помощью собственной библиотеки WebSocket в Chrome

У меня есть это:

<script>

  const socket = new WebSocket('ws://localhost:3702');    

  socket.addEventListener('open', function (event) {
    console.log('connection made to server:', event);
  });

  socket.addEventListener('message', function (event) {
    console.log('ws client received message:', event);
    location.reload();
  });

</script>

он не будет автоматически переподключаться, если сервер перезагрузится. Как лучше всего переподключиться к серверу?


person Community    schedule 23.08.2019    source источник


Ответы (2)


Вам нужно обнаружить событие закрытия соединения и написать функцию reconnect, чтобы попытаться переподключиться к серверу:

socket.addEventListener('close', function (event) {
    console.log('Disconnected!');
    reconnect(); //----------> tries to reconnect through the websocket
  });

Обратите внимание, что запуск события close может занять много времени. В этом случае вы можете реализовать простой метод пинг-понга, как описано здесь, чтобы обнаружить разрыв соединения (вместо закрытия мероприятие).

Вы можете найти простую реализацию функции reconnect здесь< /а>.

person Ari    schedule 23.08.2019

Таким образом, похоже, что нет опции повторного подключения, что имеет смысл для библиотеки более низкого уровня. Эта логика повторного подключения работала нормально:

  const createConnection = () => {

    const socket = new WebSocket('ws://localhost:3702');

    socket.addEventListener('open', function (event) {
      console.log('connection made to server:', event);
    });

    socket.addEventListener('close', function (event) {
      console.log('connection closed:', event);
      socket.close();
      setTimeout(createConnection, 2500);  // reconnect here
    });

    socket.addEventListener('message', function (event) {
      console.log('ws client received message:', event);
      location.reload();
    });

  };

как только соединение закрыто (событие «закрыть» происходит из-за перезапуска сервера), мы ждем 2,5 секунды, а затем пытаемся снова подключиться. Если переподключение не удается, событие закрытия срабатывает повторно, поэтому мы просто пытаемся повторить попытку через 2,5 секунды.

person Community    schedule 23.08.2019