Вам категорично надо, чтобы пользователя дисконектило, если он открывает новую вкладку?
В принципе вы все верно делаете. Но я бы рекомендовал sessions сделать не объектом, а массивом, где будут храниться объекты сессий. Исходя из этого получится что-то вроде этого:
Подключите в начале файла модуль underscore (библиотека
underscore.js)
var _ = require('underscore');
Далее пишете в
io.sockets.on('connection')
// массив сессий
var sessions = [],
ip = ?; // ваша реализация
// проверяем, имеется ли уже активная сессия
var found = (_.find(sessions, function(session) {
return session.ip === ip;
}));
// обновляем (не удаляем!) сессию, если нашли, сказав предыдущей вкладке "пока-пока"
if (found) {
found.socket.emit('bye_bye', 'You are disconnected from server');
found.socket.disconnect();
found.socket = socket;
found.ip = ip;
}
else {
// добавляем сессию
sessions.push({
socket: socket,
ip: ip
});
}
Все это пишется в
connection
, т.к. в
autzorizathion
вы еще не подключены к сокету.
P.S. Код лишь не оптимизированный и не протестированный прототип