2015-01-21 134 views
4

我有ExpressJs(版本4.X)服务器,我需要正确地停止服务器。由于有些请求可能需要很长时间(1-2秒),所以我必须拒绝新的连接并等待所有请求进行中的结束。在某些任务中间杀死服务器可能会使服务器处于不稳定状态。如何正确关闭ExpressJs服务器?

我试过下面的代码:

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


//Stop 
process.on('SIGINT', function() { 
    server.close(); 
}); 

然而,这个代码不密切保持活动连接,有的客户可以保留了连接很长一段时间。

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

+0

如何使用中间件来控制它们是否被允许发出新的请求? – 2015-01-21 10:26:32

回答

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;',这是否会导致客户端超时?它应该返回'服务器不可用的',或者甚至正确地完成容器不应该路由到这个应用程序的第一个地方,如果这是关闭。 – tsuz 2017-09-21 07:20:25