我正在使用这个简单的 Node.js WebSockets 实现 https://npmjs.org/package/ws
想知道服务器上的变量默认情况下是否特定于用户或服务器......?我无法理解许多用户和一台服务器... Node 现在看起来就像薛定谔的猫(它既是又不是)
如果我设置服务器:
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 复制对象与引用对象之间的区别?
最佳答案
这取决于您放置 var
关键字的位置。现在,作用域位于在新连接上执行的函数之外,因此每个连接之间共享一个事物
。
如果将 var
关键字移到函数中,如下所示:
var thing = Math.floor(Math.random()*101);
然后,thing
将位于该函数上下文的本地,这意味着将有两个单独的 thing
(每个连接一个),因为该函数针对每个新连接执行一次。
关于node.js - 对node.js不清楚;每个人都有一个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21388759/