如何知道快递仍在处理多少请求?

Ren*_*ama 5 node.js express

我正在尝试找到一种方法来了解服务器上是否有待处理的请求,以便我可以等待它们完成以正常关闭服务器。到目前为止我尝试过的是:

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);
Run Code Online (Sandbox Code Playgroud)

那么处理这种情况的最佳方法是什么???我被困住了。

编辑:这应该是一项相当简单的任务。根据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);
    });
});
Run Code Online (Sandbox Code Playgroud)

但我的回调on close从未被调用。还尝试过:

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

但它也不起作用。

Bad*_*yon 5

您可以尝试使用server.getConnections来获取并发连接数。如果返回 0,那么您就可以安全退出。