Отправка сообщения клиенту через его socket.id

Мне кажется, что я могу отправлять сообщения пользователям только тогда, когда их идентификатор сокета был напрямую сохранен в io.sockets.on ('connect ') функция. Я не знаю, почему это не работает при попытке сохранить их идентификатор сокета после входа в систему.

Работает:

  var clients = {};
  /** A new socket connection has been accepted */
  io.sockets.on('connection', function (socket)
  {
    //Used to access session id
    var hs = socket.handshake;            
        clients[socket.id] = socket; // add the client data to the hash   
        users['brownj2'] = socket.id; // connected user with its socket.id

    socket.on('user-login', function(user){
      if(!users[username]){
        //users[username] = socket.id; // connected user with its socket.id
      }
    })

    socket.on('page-load', function(pid)
    {
      if(users['brownj2'])
      {        
        clients[users['brownj2']].emit('hello');
      }
      else
      {
        console.log("NOT FOUND BROWNJ2");
      }
    }
  }

Не работает:

  var clients = {};
  /** A new socket connection has been accepted */
  io.sockets.on('connection', function (socket)
  {
    //Used to access session id
    var hs = socket.handshake;            
        clients[socket.id] = socket; // add the client data to the hash            

    socket.on('user-login', function(user){          
      if(!users['brownj2']){
        users['brownj2'] = socket.id; // connected user with its socket.id
      }
    })

    socket.on('page-load', function(pid)
    {
      if(users['brownj2'])
      {        
        clients[users['brownj2']].emit('hello');
      }
      else
      {
        console.log("NOT FOUND BROWNJ2");
      }
    }
  }

Фрагмент клиентского кода JavaScript

var socket = io.connect('');
socket.on("hello", function(){
  alert("Hi Jack");
  console.log("WEBSOCKET RECIEVED");
})

Решение: Спасибо @alessioalex Мне пришлось удалить ссылку на socket.io со страницы входа и добавить следующее в io.sockets.on ('connection')

var hs = socket.handshake;

sessionStore.get(hs.sessionID, function(err, session){
  console.log("SESSION: " + util.inspect(session));

  clients[socket.id] = socket; // add the client data to the hash
  validUsers[session.username] = socket.id; // connected user with its socket.id
})
10
задан Jack 12 December 2011 в 11:35
поделиться