Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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
Node.js 如何为koajs服务器进行优雅的停止?_Node.js_Oracle_Express_Mongoose_Koa - Fatal编程技术网

Node.js 如何为koajs服务器进行优雅的停止?

Node.js 如何为koajs服务器进行优雅的停止?,node.js,oracle,express,mongoose,koa,Node.js,Oracle,Express,Mongoose,Koa,expressjs中有很多优雅的stop示例,我如何才能在koajs中实现同样的效果 我也想断开数据库连接 我有一个mongoose数据库连接,还有2个oracle db连接()我不久前创建了一个npm包http()。这与http、express和koa完美配合。由于您还想添加自己的清理功能,我修改了该包,以便您现在可以添加自己的清理功能,该功能将在关机时调用。因此,基本上,这个包处理所有http关闭的事情,并调用清理函数(如果选项中提供): 我在不同的支持渠道上多次回答了“如何终止HTTP服务

expressjs中有很多优雅的stop示例,我如何才能在koajs中实现同样的效果

我也想断开数据库连接


我有一个mongoose数据库连接,还有2个oracle db连接()

我不久前创建了一个npm包
http
()。这与
http
express
koa
完美配合。由于您还想添加自己的清理功能,我修改了该包,以便您现在可以添加自己的清理功能,该功能将在关机时调用。因此,基本上,这个包处理所有http关闭的事情,并调用清理函数(如果选项中提供):


我在不同的支持渠道上多次回答了“如何终止HTTP服务器”的变体。不幸的是,我不能推荐任何现有的库,因为它们以某种方式存在。从那以后,我已经准备好了一个包(我相信)来处理所有预期的优雅HTTP服务器终止情况

其主要好处是:

  • 它不支持monkey patch Node.js API
  • 它会立即销毁所有套接字,而无需附加HTTP请求
  • 它允许对正在进行的HTTP请求的套接字进行正常超时
  • 它可以正确处理HTTPS连接
  • 它通过设置connection:close标头,使用keep alive通知连接服务器正在关闭
  • 它不会终止Node.js进程
与Koa一起使用:

<代码>膝关节炎从“膝关节炎”进口; 进口{ 创建HttpTerminator, }来自“http终止符”; const-app=新Koa(); const server=app.listen(); const httpTerminator=createHttpTerminator({ 服务器, }); 等待httpTerminator.terminate();
要确保Oracle DB连接正常关闭,您可以使用连接池,并使用0或更大的
drainTime
调用。这将使应用程序相对干净地中断当前正在使用连接的任何操作。它允许释放连接的DB端,而无需DB在清理自身之前等待任何超时时间。即使有两个连接,这也是一个解决方案,因为池小并不重要。您可能还需要设置Oracle Net带外中断检测,请参阅。

我建议在生产中使用
pm2
,它支持优雅的重新加载等。
const koa = require('koa');
const gracefulShutdown = require('http-graceful-shutdown');
const app = new koa();

...
server = app.listen(...); // app can be an express OR koa app
...

// your personal cleanup function - this one takes one second to complete
function cleanup() {
  return new Promise((resolve) => {
    console.log('... in cleanup')
    setTimeout(function() {
        console.log('... cleanup finished');
        resolve();
    }, 1000)       
  });
}

// this enables the graceful shutdown with advanced options
gracefulShutdown(server,
    {
        signals: 'SIGINT SIGTERM',
        timeout: 30000,
        development: false,
        onShutdown: cleanup,
        finally: function() {
            console.log('Server gracefulls shutted down.....')
        }
    }
);