不清楚node.js;每个人都有一个变数?

时间:2014-01-27 18:31:39

标签: node.js var

我正在为node.js https://npmjs.org/package/ws

使用这个简单的WebSockets实现

想知道默认情况下服务器上的vars是用户还是服务器特定的?我无法理解许多用户和一个服务器...节点现在看起来像薛定谔的猫(它既是,也不是)

如果我设置了服务器:

var thing=(thing>0)?thing:0; 
console.log('thing='+thing+' this only seems to happen when the server born, hmm ok...');

//Normal require/set up ws stuff...
wss.on('connection',function(ws){
    thing=Math.floor(Math.random()*101);
    ws.on('message',function(_){
        ws.send('reply: thing='+thing);
        });
    });

客户:

ws=new WebSocket('ws://'+somehost+':'+(someport));
ws.onopen=function(){
    ws.onmessage=function(_){console.log(_.data);}
    ws.send('question: what is the thing now?');
    }

$('#button').click(function(){ws.send('question: what is the thing now?');});

现在如果我有两个用户(A& B)一个接一个地进入网站:

  • 用户A将打开该页面,并将var视为第一个随机数

  • 用户B将其视为第二个随机数

  • A可以点击按钮,然后将其视为第二个随机数

  • 如果B点击按钮B,也会看到第二个随机数

...因为B在服务器上为每个人改变了它?

我这样做了吗?在服务器上创建一个特定于连接的变量,而客户端没有(零)有用信息?

如果我不清楚我想要做的是A总是看到它设置的数字而B总是看到它设置的数字。

服务器可以知道差异吗?

是否只是放置代码的问题? (如示例所示,仅在服务器出生时显示控制台日志)

或者它可能类似于Javascript复制对象与引用对象之间的区别吗?

2 个答案:

答案 0 :(得分:0)

每次有人连接时,全局thing变量都会重新随机化。该变量只有一个实例。

如果您想要每个用户变量,请使用对象字典。

var things = {}

然后在连接上你可以做

things[unique_user_id] = // whatever

我认为在该连接对象ws中的某处,应该有一个可以使用的唯一标识符。

答案 1 :(得分:0)

这取决于您放置var关键字的位置。您现在拥有它的范围超出了在新连接上执行的功能,因此您在每个连接之间共享一个thing

如果您将var关键字移动到您的函数中,请执行以下操作:

var thing = Math.floor(Math.random()*101);

然后thing将是该函数的上下文的本地,这意味着将有两个单独的thing s(每个连接一个),因为每个新连接都会执行一次函数。