3
您好,我正在使用Node.js集羣模塊運行我的應用程序,並試圖找到一種優雅地退出工作程序而不丟失任何請求的方式。Node.js:知道所有http請求何時完成
因此,我使用server.close()停止接受新請求,但如何知道正在處理的實際請求是否已完成?
我想出了這個技巧的正常工作:
var http = require('http');
var server = http.createServer(function(res, req) {
setTimeout(function() { // simulate a request which takes time (1sec) to finish
req.end('hallo');
}, 1000);
}).listen(8080);
server._requests = 0;
server.on('request', function(req, res) {
server._requests += 1;
res.once('finish', function() {
server._requests -= 1;
if (server._requests === 0)
server.emit('no_more_requests');
});
});
function gracefulExit() {
server.close();
if (server._requests === 0) process.exit(0); // exit right away
server.once('no_more_requests', process.exit); // or wait
}
process.on('SIGTERM', gracefulExit);
process.on('SIGINT', gracefulExit);
但有這樣做的更優雅的方式?
如果您可以使用Ajax調用請求,則可以使用$(document).ajaxStart和$(document).ajaxStop檢查進程請求是否完成 –