2011-12-08 7 views
1

나는 간단한 HTTP 서버를 만들기 위해 노력하고있어 그 일시 중지 및 재개 할 수 있습니다 ,, 내가 여기 http://nodejs.org/docs/v0.6.5/api/http.htmlhttp 서버를 일시 중지하고 다시 시작하는 방법은 무엇입니까?

,, Nodejs API를 검토 한하지만 나를 도울 수 없습니다 ,, 내가 제거하려고했습니다

var httpServer = require('http').Server(); 
var resumed = 0; 

function ListenerHandler(){ 
    console.log('[-] HTTP Server running at 127.0.0.1:2525'); 
}; 

function RequestHandler(req,res){ 
    res.writeHead(200,{'Content-Type': 'text/plain'}); 
    res.end('Hello, World'); 
}; 

function pauseHTTP(){ 
    if(resumed){ 
      httpServer.removeAllListeners('request'); 
      httpServer.close(); 
      resumed = 0; 
      console.log('[-] HTTP Server Paused'); 
    } 
}; 

function resumeHTTP(){ 
    resumed = 1; 
    httpServer.on('request',RequestHandler); 
    httpServer.listen(2525,'127.0.0.1',ListenerHandler); 
    console.log('[-] HTTP Server Resumed'); 
}; 

답변

0

내가 확실히 모르는 : 여기가 일시 중지하고 다시 시작하려고 할 때마다 잘 작동하지만 콜백 호출을 듣고 증가 '요청'이벤트 다시 추가 ,, ,, 내가 한 몇 가지 코드에 이벤트 리스너 당신이하려는 일은,하지만 당신이 원하는 수준으로 일하고 있다고 생각합니다.

서버가 처리 할 준비가 될 때까지 웹 서버로 들어오는 연결 요청을 블록으로 변경하려면 소켓에서 accept(2) 시스템 호출 호출을 중지해야합니다. (node.js 또는 실제로 웹 서버 인 웹 서버는이 작업을 매우 쉽게 수행 할 수 있습니다 .콜백은 의심 할 여지없이 세션 초기화 이후에도 잘 구성된 요청을 모두받은 경우에만 호출됩니다.) 시스템 커널은 listen(2) 시스템에 제공된 최대 백로 이터까지 연결 을 계속 받아들입니다. 느린 사이트에서는 충분할 수 있습니다. 바쁜 사이트의 경우 눈 깜짝 할 사이에 없습니다.

서버가 처리 할 수있을 때까지 거부 ​​된 웹 서버에 대한 수신 연결 요청을으로 지정하려면 수신 대기 소켓 close(2)이 필요합니다. node.js는 close() method을 통해이 주소를 사용할 수있게하지만 서버의 상태를 해칩니다. 다시 실행하려면 콜백을 다시 설치해야합니다.

+0

음, httpServer.close()를 추가하십시오. pauseHTTP 함수에서 이미 resumeHTTP 함수에 콜백을 다시 설치하고 콘솔에서 같은 출력을 처음으로 일시 중지하고 다시 시작하면 한 번 청취 로그가 표시되고 두 번째로 두 번 표시됩니다 ,, !!! –

관련 문제