node.js - 对node.js不清楚;每个人都有一个变量?

标签 node.js var

我正在使用这个简单的 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/

相关文章:

xcode - 如何访问另一个类中的变量?

jQuery 找到正确的 id

c# - 有没有 "public var Method()"这样的东西?

javascript - 在 Node.js 中禁用 GC

node.js - 如何编写将在chrome和node.js中运行的javascript Web套接字代码?

javascript - 错误 TS2307 : Cannot find module (external, 私有(private)模块)

json - 通过 socket.io 传输文本文件的内容会生成 ArrayBuffer 对象

javascript - Node.js automapper-ts 包不映射嵌套对象/属性

c# - 锐锐器 : Visual Studio : warning use VAR

c# - 通过方法将现有的 IEnumerable<int> 转换为字符串 (#,#,#,..)