2015-09-14 3 views
0
io.sockets.on('connection', function (socket) { 
     socket.on('something', function(data){ 
      var VAR1 = true; 
      if(VAR1 === true){ 
      VAR1 = false; 
      } 
     }); 
}); 

Является ли переменная «VAR1» уникальной для каждого пользователя, который вызывает событие сокета «что-то»? Предположим, что есть 1000 пользователей, каждая связь с переменной события сокета начинается с того, что VAR1 является истинным, а другие могут его изменить? Это уникально для всех подключений?socket.io unqiue variable

+0

Это уникальный как для подключения и сообщения. Он будет потерян, как только обратный вызов к 'socket.on ('something'' вернется, поэтому ни один другой пользователь не может его изменить, даже сообщения от одного и того же пользователя не могут его изменить. –

ответ

0

Ваш VAR1 уникален для каждого события .on('something'), которое происходит и будет потеряно, как только обработчик событий будет завершен. Это локальная переменная внутри этого обработчика событий, так что новый VAR1 создается каждый раз, когда вызывается обработчик событий, и это будет мусор, собранный Javascript, как только обработчик событий закончит работу. При следующем запуске обработчика событий будет создан новый VAR1, а затем собран мусор.

Теперь, если вы хотите, чтобы это были уникальными для каждого отдельного соединения и последними на протяжении этой связи, вы можете объявить его в несколько ином более высоком объеме, как это:

io.sockets.on('connection', function (socket) { 
     var VAR1 = true; 
     socket.on('something', function(data){ 
      if(VAR1 === true){ 
       VAR1 = false; 
      } 
     }); 
}); 

Теперь, новом VAR1 будет создан для каждого сокета, который будет подключаться, и эта переменная будет длиться в течение всего времени этого соединения (поскольку она находится в закрытии), и каждое событие .on('something', ...), которое происходит, сможет получить доступ к уникальному VAR1 для каждого отдельного сокета.


FYI, если вы хотите уникальную переменную для сокета, вы можете просто добавить свойство объекта сокета iself:

io.sockets.on('connection', function (socket) { 
     socket.VAR1 = true; 
     socket.on('something', function(data){ 
      if(socket.VAR1 === true){ 
       socket.VAR1 = false; 
      } 
     }); 
}); 
Смежные вопросы