2011-12-08 78 views
1

我試圖做簡單的HTTP服務器,可以暫停和繼續,,我看API的NodeJS這裏,, http://nodejs.org/docs/v0.6.5/api/http.html如何暫停http服務器並恢復它?

但不能幫助我,,我試圖刪除

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

我不太知道:在「請求」事件,並添加回,,運作良好,但聽回撥電話增加每次我嘗試暫停和恢復時間,,這裏一些代碼,我做了事件偵聽器你正在嘗試做的,但我認爲你在錯誤的一級合作,做你想做的。

如果你想進入的連接請求到Web服務器,以直到服務器準備處理它們,你需要停止呼籲在插座上的accept(2)系統調用。 (我不能想象的node.js,或者實際上任何 Web服務器,將使這個任務很容易的。只有當整個結構良好的請求已被接收,會話啓動好後request回調無疑是調用。)你的工作系統內核會繼續接受連接,直到給予listen(2)系統調用最大積壓。在緩慢的網站上,這可能就足夠了。在繁忙的網站上,這不是一眨眼的事。

如果您希望傳入的連接請求到您的網絡服務器被拒絕直到服務器準備好處理它們,您需要close(2)的監聽套接字。 Node.js的,使通過close() method這個可用,但將推倒服務器的狀態。當你想再次運行時,你必須重新安裝回調。

+0

好,我添加httpServer.close();在pauseHTTP功能,,和我已經重新安裝在resumeHTTP功能的回調,,並在控制檯相同的輸出,,暫停和恢復的第一次展示了聽登錄一次,,第二次顯示兩次,, !!! –