2013-06-24 44 views
2

我想找到一種方法來知道是否有請求在服務器上掛起,所以我可以等待它們完成以便正常關閉服務器。我到目前爲止所嘗試的是:如何知道有多少請求仍在通過快遞處理?

var express = require("express"); 
var app = express(); 

var count = 0; 
app.use(function(req, res, next){ 
    count++; 
    console.log(count); 
    next(); 
    res.on("end", function(){ //PROBLEM HERE! This event does not exists!!! 
     count = count - 1; 
     console.log(count); 
    }); 
}); 

app.get("/", function(req, res, next){ 
    res.send("Ok!"); 
}); 

process.on('SIGINT', function() { 
    if(count === 0) process.exit(); 
    else console.log("Can't shutdown! Pending requests..."); 
}); 

var server = app.listen(8021); 

那麼,處理這種情況的最佳方法是什麼?我被困住了。

編輯:這應該是一個相當簡單的任務。根據http://nodejs.org/api/net.html#net_server_close_callback

停止服務器接受新連接並保持現有連接。這個函數是異步的,當所有連接結束並且服務器發出'close'事件時服務器最終關閉。或者,您可以傳遞迴調來監聽「關閉」事件。

我可以簡單地做:

process.on('SIGINT', function() { 
    console.log("Exiting"); 
    server.close(); 
    server.on("close", function(){ 
     console.log("Exited"); 
     process.exit(0); 
    }); 
}); 

但我對on close回調永遠不會被調用。還試過:

process.on('SIGINT', function() { 
    console.log("Exiting"); 
    server.close(function(){ 
     console.log("Exited"); 
     process.exit(0); 
    }); 
}); 

但它也不起作用。

回答

1

您可以嘗試使用server.getConnections來獲取併發連接數。如果它返回0,那麼你可以安全地退出。