Node.js 调用node server.close()时的异步任务

Node.js 调用node server.close()时的异步任务,node.js,express,Node.js,Express,我正在开发一个node+express应用程序,希望它能成为一个优雅的应用程序。目标是以“正确”的方式进行部署,即: 避免接受请求 完成当前的任务 终止节点进程 输入新代码 重新启动服务器- 对于正常关机,我使用的代码类似于: var express = require('express'); var app = express(); var server = app.listen(1337); process.on( 'SIGTERM', function () { server

我正在开发一个node+express应用程序,希望它能成为一个优雅的应用程序。目标是以“正确”的方式进行部署,即:

  • 避免接受请求
  • 完成当前的任务
  • 终止节点进程
  • 输入新代码
  • 重新启动服务器-
对于正常关机,我使用的代码类似于:

var express = require('express');
var app = express();
var server = app.listen(1337);

process.on( 'SIGTERM', function () {

   server.close(function () {
     console.log( "Closed out remaining connections.");
     // Close db connections, etc.
     //
     // How to ensure no tasks is running in the thread pool ???
   });

   setTimeout( function () {
     console.error("Could not close connections in time, forcefully shutting down");
     process.exit(1); 
   }, 30*1000);

});
我的疑问是,是否在
server.close()
中可以确保没有任务正在运行或挂起执行?


如果事件循环中的作业开始异步读取大文件并在线程池中工作,会发生什么情况执行
服务器。关闭
保证线程池中也没有运行任务?

您真的需要自己执行吗?因为你可以使用pm2运行你的应用程序,并且它已经处理了优雅的重启、集群和许多其他功能。你所说的
是指如何确保线程池中没有任务运行?@stdob假设有一个请求需要从数据库获取一些数据。该异步任务在线程池中完成,并通过回调通知我的单个线程执行。如果我关机,这些任务会发生什么?#mJehanno pm2还要求你的应用程序监听重要事件。它不会使停机时间延长you@EricSonaron我使用关键任务计数器:当关键任务开始时-计数器增加,当任务完成时-计数器减少。此外,在开始检查是否设置了“维护”标志之前,还需要执行关键任务:如果设置了,则在“重新启动”之前,这些任务不会启动。