套接字.IO唯一变量


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

变量"VAR1"是唯一的每个用户谁触发套接字事件"什么"?假设有1000个用户将每个连接到套接字事件的变量以VAR1为真开始,其他人可以改变它吗?它对每个连接都是独一无二的吗?

您的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


供参考,如果你想为套接字添加一个唯一的变量,你也可以给套接字对象本身添加一个属性:

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

相关内容

  • 没有找到相关文章

最新更新