@LemanRass09

Почему после перезагрузки страницы socket.io вызывает connect callback несколько раз?

Клиент:
var token = getCookie("token");
var socket = io('http://localhost:3000/', {
    query: "&token=" + token
});

socket.on('connect', function() {
   console.log('Connected to server.');
});


Сервер:
io.on('connection', function (socket) {
        var token = socket.handshake.query.token;
        console.log("[Socket.IO] New user connected! Token: " + token + " Socket ID: " + socket.id);

        socket.on('disconnect', function() {
            console.log('[Socket.IO] User disconnected! Token:" + token + " Socket ID: ' + socket.id);
        });
});


При запуске connect callback вызывается ровно 1 раз как и должно быть.
При перезагрузке страницы сначала вызывается disconnect callback, потом 2 раза вызывается connect callback при том с одинаковым токеном и id соккета.
При следующей перезагрузке будет вызван 1 disconnect и 3 connect callback`a каждый из которых будет иметь одинаковый id соккета.
И так далее.

Все бы ничего если бы не одно НО.
При отправке ивента с клиента на сервер он приходит столько раз, сколько раз выполнился connect callback. То есть если я отправлю ивент с клиента после первого запуска страницы - на сервер придет 1 ивент от этого соккета. Если я обновлю страницу в браузере и отправлю ивент повторно - он придет уже дважды и та далее.

Вообще странно что внутри socket.io нет конфликта по поводу множества соккетов с одинаковым id.
Еще странно что хоть на серверной стороне после обновления страницы connect выполняется несколько раз - на клиенте всегда 1.
Как с этим бороться?
  • Вопрос задан
  • 675 просмотров
Решения вопроса 1
@LemanRass09 Автор вопроса
Не знаю пока с чем это было связанно, но после большого количества разных манипуляций с кодом проблема решилась. Вот сейчас вроде все вернул как было и все равно эту проблему больше не наблюдаю.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы