在node.js中正确使用本地和全局variables

我越来越近了,我想了解全局和本地对象如何在node.js中工作,但是当涉及更复杂的服务器时,我正在被绊倒。

在我的理解node.js服务器被许多访问,但应该只实例一次,所以这混淆了我的地狱,我不知道其他服务器如何行为(我使用的networking套接字服务器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意味着它是每个人的唯一variables?

如果我创build一个全球服务器:

 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只是一个新的我没有看到两个连接…

所以我在想

我应该把这个socketserver放在一个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.. } }); }); 

这将创build一个问题,虽然我认为WebSocketServer有一个列表wss.clients连接的websockets列表需要被访问,所以我不认为我应该有多个服务器…?

如果我声明一个variables(var localisedsocket)并把wss.on('connection',function(soc){soc = localisedsocket;}); 在http服务器内部,那么每一个打开WebSocketServer的用户都不会再写套接字对象了?

我理解这个理论吗?

我理解这个理论吗?

不可以。您的“_global”variables只是上部范围中的局部variables。

无论如何,经验法则是:除非你有充分的理由不这样做,否则总是使用局部variables,并在最后可能的时刻放置“var”(意思是在可能的最小范围内)。

不需要http服务器或ajax。 所有需要做的是这样的:

 var wss=new WebSocketServer({host:port});//-----global for everyone wss.on('connection',function(soc){ var s={};//------------------------------s is local and unique to the user! s[1]=soc; s[1]=Math.floor(Math.random()*101); console.dir(s[1]); console.dir(wss);//-------now everyone can see all connected clients }); 

问题是服务器必须是全局的,但是套接字必须是本地的。 每个人都使用相同的服务器,但是当用户连接时,他们得到他们自己的WebSocket!

我认为最后我不只是看到本地和全球的区别,但是,我终于看到这个function在JavaScript的有用性!