2014-01-28 2 views
1

점점 더 가까워지고 있습니다. node.js에서 전역 객체와 로컬 객체가 어떻게 작동하는지 이해하는 데는 다소 어려움이 있습니다.node.js에서 로컬 변수와 전역 변수를 올바르게 사용하기

node.js에 대한 이해에서 많은 서버가 서버에 액세스하지만 한 번만 인스턴스화해야합니다. 이렇게하면 혼란스럽고 다른 서버가 어떻게 작동하는지 알 수 없습니다 (웹 소켓 서버를 사용하고 있습니다. https://npmjs.org/package/ws는)

는 또한 이해 : Node.js를 지금의

var _global='global'; 
function testing(){ 
    var _local='local'; 
    console.log(_global+' & '+_local);// 'global & local' 
    return;} 
testing(); 
console.log(_global+' & '+_local);// 'global & undefined' 

을 나는 그게 각 사람의 고유 한 변수 있다는 의미 서버 내부에 그 _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와 웹 소켓 객체를 참조하십시오.

그런 다음 웹 소켓 객체가 이제 새로운 객체없이 기존 아이디 나는 두 개의 연결이 표시되지 않는 단지 새처럼 보이는 것을 두 번째 사용자가 방문하는 내가 (SSH에서)를 참조 해당 페이지 ... 경우

그래서 내가 생각하고 있었어요

이 소켓 서버를 http.server에 놓고 ajax로 서버를 호출하여 로컬로 설정해야합니까?

클라이언트 :

var xhr=XHRobject(); 
xhr.open("POST","mysite.com:8005",true); 
xhr.setRequestHeader("Content-Type","text/csv"); 
xhr.send('create server'); 

서버 : 나는 WebSocketServer 그래서 난 액세스 할 필요가 연결된 WebSocket을의 목록 wss.clients 목록이로 생각하지만이 문제를 만들 것

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.. 
      } 
     }); 
    }); 

하나 이상의 서버가 있어야한다고 생각하지 않습니까?

변수 (var localisedsocket)를 선언하고 wss.on ('연결', 함수 (soc) {soc = localisedsocket;})을 넣으면; http 서버 내부에서 WebSocketServer를 여는 모든 사용자는 더 이상 소켓 객체를 덮어 쓰지 않을까요?

나는이 이론을 올바르게 알고 있습니까?

답변

0

http 서버 또는 아약스가 필요 없습니다. 다음과 같이해야합니다.

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이 제공됩니다!

마침내 나는 로컬과 글로벌의 차이점을 보지 못했지만, 마침내 자바 스크립트에서이 기능의 유용성을 보았습니다!

1

나는이 이론을 올바르게 알고 있습니까?

아니요. 귀하의 "_global"변수는 상위 범위의 로컬 변수 일뿐입니다.

어쨌든, 어림짐작은 : 그렇지 않으면 좋은 이유가없는 한, 항상 지역 변수를 사용하고 마지막 가능한 순간에 "var"를 배치하십시오 (가능한 한 가장 낮은 범위에 있음).

+0

왜 var을 가능한 한 낮 춥니 까? –

+2

변수의 범위를 제한하려면 의도하지 않은 변수 공유 및 메모리 누출을 피하십시오. – alex

관련 문제