Показать сообщение отдельно
  #1 (permalink)  
Старый 28.04.2014, 19:37
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

Как запретить пользователю делать несколько ws-соединений одновременно
Нужно запретить пользователю делать несколько подключений по вебсокетам к ресурсу. Чтоб работало по принципу: один пользователь - одно соединение

Как это сделать?

Сначала хотел создать объект с ip адресами и записывать в него id сокета.
При авторизации проверять наличие ip и в случае обнаружения принудительно закрывать соединение.

Что-то вроде:
io.set('authorization', function (handshakeData, callback) {
    var address = handshakeData.address.address;

    // если в сессиях есть ip
    if (sessions[address]) {
      io.sockets.sockets[sessions[address]].disconnect();
      callback(null, true);
    } else {
      callback(null, true);
    }
  });

  io.sockets.on('connection', function (socket) {
    var address = socket.handshake.address.address;

    sessions[address] = socket.id;   //  добавляем сессию
  });

  socket.on('disconnect', function () {
    var address = socket.handshake.address.address;

    delete sessions[address];  // удаляем сессию
  });



Но узнал, что это может создать проблемы у тех соединений где используется NAT

Плохо понимаю NAT. Возможно ли как-то идентифицировать NAT. Там же вроде порт еще есть какой-то "особенный", что дает даже не уникальному id уникальность
Ответить с цитированием