socket.io unqiue变量

时间:2015-09-14 18:55:29

标签: javascript node.js sockets websocket

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

变量" VAR1"对于触发套接字事件的每个用户都是唯一的"某些东西"?让我们说有300个用户将每个连接到套接字事件的变量以VAR1为真开始,其他人可以改变吗?它对每个连接都是独一无二的吗?

1 个答案:

答案 0 :(得分: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

仅供参考,如果你想要一个套接字的唯一变量,你也可以只添加一个属性到套接字对象iself:

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