gpt4 book ai didi

node.js - 在 Node.js 中正确使用局部变量和全局变量

转载 作者:太空宇宙 更新时间:2023-11-04 01:07:42 27 4
gpt4 key购买 nike

我认为我越来越了解全局和本地对象在 Node.js 中的工作原理,但当涉及到像服务器这样更复杂的东西时,我就会被绊倒。

根据我对 Node.js 的理解,服务器可以被许多人访问,但只能实例化一次,所以这让我很困惑,我不知道其他服务器的行为方式(我正在使用 Web 套接字服务器 https://npmjs.org/package/ws )

我也明白:

var _global='global';
function testing(){
var _local='local';
console.log(_global+' & '+_local);// 'global & local'
return;}
testing();
console.log(_global+' & '+_local);// 'global & undefined'

现在在 node.js 中,如果我在服务器内声明 _local var 是否意味着它对于每个人来说都是唯一的变量?

如果我创建一个全局服务器:

var wss=new WebSocketServer({host:port});
wss.on('connection',function(soc){
soc['uid']=Math.floor(Math.random()*101);
console.dir(soc);
});

导航到连接到服务器的页面,我看到(在我的 putty ssh 客户端上)带有附加 ID 的 websocket 对象。

然后,如果第二个用户访问该页面,我会看到(在 ssh 中)websocket 对象现在看起来像一个新对象,没有旧 id,只是一个新对象,我看不到两个连接...

所以我在想

我应该将这个套接字服务器放入 http.server 中并使用 ajax 调用服务器来使其本地化吗?

客户:

var xhr=XHRobject();
xhr.open("POST","mysite.com:8005",true);
xhr.setRequestHeader("Content-Type","text/csv");
xhr.send('create server');

服务器:

var http = require('http');
http.createServer(function(req,res){
req.on('data',function(chunk){
chunk=chunk.toString('utf8');
if(chunk==='create server'){
wss=new WebSocketServer({host:port});//etc..
}
});
});

这会产生一个问题,尽管我认为 WebSocketServer 有一个列表 wss.clients 需要访问的已连接 Websocket 列表,所以我认为我不应该拥有多个服务器...?

如果我声明一个变量 (var localizedsocket) 并放入 wss.on('connection',function(soc){soc=localizedsocket;});在 http 服务器内部,那么每个打开 WebSocketServer 的用户都不再通过套接字对象进行写入吗?

我的理论正确吗?

最佳答案

Am I getting this theory right?

没有。您的“_global”变量只是上层作用域中的局部变量。

无论如何,经验法则是:除非您有充分的理由这样做,否则请始终使用局部变量,并将“var”放在最后可能的时刻(意味着在尽可能低的范围内)。

关于node.js - 在 Node.js 中正确使用局部变量和全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21405872/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com