如何正确关闭ExpressJs服务器?

5
我有一个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();
});

然而,这段代码没有关闭保持连接,一些客户端可能会保持连接很长时间。

那么,我应该如何正确地关闭所有连接?


使用中间件来控制是否允许进行新的请求,这个想法怎么样? - Ben Fortune
1个回答

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();
    });
});

1
如果在中间件中使用return;,这会导致客户端超时吗?它应该返回服务器不可用,或者如果正确处理,容器在首次路由到此应用程序时就不应该关闭。 - Taku

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接