Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何正确关闭ExpressJs服务器?_Javascript_Node.js_Express - Fatal编程技术网

Javascript 如何正确关闭ExpressJs服务器?

Javascript 如何正确关闭ExpressJs服务器?,javascript,node.js,express,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', functi

我有一个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();
});
但是,此代码不会关闭保持活动的连接,有些客户端可以长时间保持连接


那么,如何才能正确地关闭所有连接呢?

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

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

使用中间件来控制是否允许他们发出新请求如何?如果您使用
return服务器不可用
,或者甚至正确完成。如果此应用程序正在关闭,则容器首先不应该路由到此应用程序。