Восстановление Socket.io от отключений - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть чат с сервером и клиентом в Socket.io.Клиент отправляет и получает сообщения на / с сервера.Чтобы протестировать событие отключения, я вытащил свой Ethernet-штекер и снова подключил его через несколько секунд.

После этого отправка сообщений от клиента по-прежнему работает нормально, и все ранее отправленные сообщения во время отключения повторно отправляются наи Chrome, и Firefox.

Для получения, однако, это нормально для Chrome, но не для Firefox, который больше не получает сообщения от сервера.

Вопрос в том, что мне делать, чтобы правильносправиться с такими проблемами в сети и сделать мой чат надежным?

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Я наконец-то нашел корень проблемы.Socket.io прекрасно переподключается из коробки, поэтому вам не нужно пытаться переподключиться.Однако после успешного переподключения розетка, похоже, не воссоединяется с той же комнатой.Мне удалось решить проблему следующим образом:

socket.on('reconnect', () => {
  socket.emit('onEnter', data);
});

Здесь событие onEnter используется, чтобы сервер присоединился ко мне в комнату.Однако я не понимаю, почему он не смог сохранить комнату.

0 голосов
/ 01 декабря 2018

Как указано в документации и, как вы сказали, сокет должен нормально пересоединяться.Поскольку вы можете отправлять сообщения, кажется, что вы на полпути переподключены.

Есть пара событий, которые вам стоит добавить, чтобы увидеть, не является ли что-то необычным: reconnecting, reconnect_attempt, reconnect, reconnect_error и reconnect_failed.

Если из этого ничего не выйдет, я бы посоветовал вам проверить, получаете ли вы событие отключения в вашем клиенте, и отозватьваша функция соединения, так что вы получаете совершенно новый сокет после восстановления сети:

socket.on('disconnect', () => {
  // reconnect
})

Из прошлого опыта в объекте сокета хранилось некоторое грязное состояние, которое могло бы объяснить вашу проблему, и оно того стоитНачните все сначала с чистого листа.


Примечание. Для людей, которым не нужен клиент socket-io, есть также небольшая библиотека, которая позволяет это сделать.должен работать и с бэкэндом socket-io, reconnecting-websocket .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...