Node.js 如何为koajs服务器进行优雅的停止?
expressjs中有很多优雅的stop示例,我如何才能在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服务
我有一个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.....')
}
}
);