2014-01-28 47 views
1

我越來越接近我認爲理解全局和本地對象如何在node.js中工作,但當涉及更復雜的服務器時,我越來越沮喪。在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); 
    }); 

導航到連接到服務器的頁面,我看到(我的膩子SSH客戶端)與附加的ID WebSocket的對象。

然後,如果第二個用戶瀏覽該網頁時我看到(在SSH)的WebSocket的對象現在看起來像一個新的對象沒有舊標識只是一個新的我沒有看到兩個連接...

所以我在想

我應該把這個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具有連接的WebSockets的列表wss.clients列表,需要加以所以我訪問這將創建一個問題不要以爲我應該有多個服務器......?如果我聲明一個變量(var localisedsocket)並把wss.on('connection',function(soc){soc = localisedsocket;});在http服務器內部,那麼每個打開WebSocketServer的用戶都不會再寫入套接字對象了?

我的理論是否正確?

回答

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中的實用性!

1

我是否明白這個理論的正確性?

號你「_global」變量只是在上面範圍的局部變量。

無論如何,經驗法則是:除非你有一個很好的理由不這樣做,一定要使用局部變量,並將「VAR」在最後一刻(指在最低的範圍內的可能)。

+0

爲什麼要儘可能降低var? –

+2

爲了限制變量的範圍,避免無意的變量共享和內存泄漏。 – alex