Подтвердить что ты не робот

Событие соединения socket.io не запускается в firefox

Im имеет что-то вроде приведенного ниже кода.

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io('http://localhost:8080');
  socket.on('connect', function(){
      socket.on('some-event', function(data) {});
  });
  socket.on('disconnect', function(){});
</script>

Внутри обратного вызова connect у меня есть код, который отвечает на сообщения. Это отлично работает на хроме. При загрузке первой страницы он отлично работает на firefox. Если вы перезагрузите страницу, событие connect не будет вызвано.

Im с использованием версии сервера 1.4.8 и клиента js

4b9b3361

Ответ 1

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

function attachEventListners() {
    socket.on('some-event', function(data) {});
}

var attached = false;
socket.on('connect', function(){
      attachEventListners();
      attached = true;
});

setTimeout(function() {
    if (!attached) {
        attachEventListners();
    }
}, 1000);

Ответ 2

Вам не нужно объявлять прослушиватели событий внутри прослушивателя connect, поэтому, хотя я не знаю прямого решения вашей проблемы, я думаю, что это обойдется:

<script>
  var socket = io('http://localhost:8080');
  socket.on('some-event', function(data) {});
  socket.on('disconnect', function(){});
</script>

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

Ответ 3

Вместо таймаута вы должны использовать прослушиватель событий нагрузки в окне

window.addEventListener("load",attachEventListners);