Клиент:
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.
Как с этим бороться?