我越來越接近我認爲理解全局和本地對象如何在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的用戶都不會再寫入套接字對象了?
我的理論是否正確?
爲什麼要儘可能降低var? –
爲了限制變量的範圍,避免無意的變量共享和內存泄漏。 – alex