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;
}
});
});