我越来越接近我想要理解全局和本地对象在node.js中是如何工作的,但是当涉及像服务器这样更复杂的东西时,我会被绊倒。
根据我对node.js的理解,很多人都会访问服务器,但只应该实例化一次,这样会让我感到困惑,我不知道其他服务器是如何运行的(我正在使用Web套接字服务器{ {3}})
我也理解:
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只是一个新的我没有看到两个连接......
所以我在想
我应该将这个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..
}
});
});
这会产生一个问题虽然我认为WebSocketServer有一个列表wss.clients需要访问的连接websockets列表所以我不认为我应该有多个服务器......?
如果我声明一个变量(var localisedsocket)并放入wss.on('connection',function(soc){soc = localisedsocket;});在http服务器内部,那么打开WebSocketServer的每个用户是否都不再通过套接字对象进行写入了?
我的理论是否正确?
答案 0 :(得分:1)
我的理论是否正确?
没有。您的“_global”变量只是较高范围内的局部变量。
无论如何,经验法则是:除非你有充分的理由不这样做,否则总是使用局部变量,并在最后可能的时刻放置“var”(意味着,在可能的最低范围内)。
答案 1 :(得分:0)
不需要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!
我认为最后我不仅仅看到本地和全球之间的区别,但我终于看到了这个功能在javascript中的用处!