【发布时间】:2014-02-01 12:12:10
【问题描述】:
我越来越接近于理解全局和本地对象在 node.js 中的工作原理,但是当涉及到更复杂的东西(如服务器)时,我却被绊倒了。
在我对 node.js 的理解中,一个服务器可以被许多人访问,但应该只被实例化一次,所以这让我很困惑,我不知道其他服务器的行为如何(我使用的是 web sockets 服务器@ 987654321@)
我也明白了:
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 的用户都不会再写入套接字对象了吗?
我的理论正确吗?
【问题讨论】: