如何正确关闭 ExpressJs 服务器?

BAK*_*BAK 5 javascript node.js express

我有一个 ExpressJs(版本 4.X)服务器,我需要正确停止服务器。

由于某些请求可能需要很长时间(1-2 秒),我必须拒绝新连接并等待所有正在进行的请求结束。在某些任务中间杀死服务器可能会使服务器处于不稳定状态。

我试过以下代码:

//Start
var app = express();
var server = https.createServer(options, app);
server.listen(3000);


//Stop
process.on('SIGINT', function() {
    server.close();
});
Run Code Online (Sandbox Code Playgroud)

但是,此代码不会关闭保持活动连接,并且某些客户端可以长时间保持连接。

那么,如何正确关闭所有连接?

Ben*_*une 4

如果服务器关闭,您可以使用一些中间件来阻止新请求。

var app = express(),
    shuttingDown = false;

app.use(function(req, res, next) {
    if(shuttingDown) {
        return;
    }
    next();
});

var server = https.createServer(options, app);
server.listen(3000);

process.on('SIGINT', function() {
    shuttingDown = true;
    server.close(function(){
        process.exit();
    });
});
Run Code Online (Sandbox Code Playgroud)