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

时间:2014-01-28 12:43:45

标签: node.js websocket

我越来越接近我想要理解全局和本地对象在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的每个用户是否都不再通过套接字对象进行写入了?

我的理论是否正确?

2 个答案:

答案 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中的用处!