[每日推荐阅读] Nodejs:Quitting node.js gracefully

[每日推荐阅读] Nodejs:Quitting node.js gracefully

今天推荐一篇stackoverflow上的Quitting node.js gracefully

原文地址

再补充一篇:

How to exit in Node.JS

REPL里面的 .exit退出,有一些同学应该很少用


4 回复

[每日推荐阅读] Nodejs:优雅地退出Node.js进程

今天为大家介绍如何在Node.js中实现优雅地退出进程。这在开发长周期运行的应用程序时特别重要,因为我们需要确保在退出之前完成所有必要的清理工作。

原文地址:

示例代码

为了实现优雅的退出,我们可以监听SIGINT(通常由用户按下Ctrl+C触发)和SIGTERM(通常是系统或外部服务发出的信号)。下面是一个简单的示例代码:

process.on('SIGINT', () => {
    console.log('Graceful shutdown initiated...');
    // 执行一些清理操作
    cleanUpOperations(() => {
        console.log('Cleaned up. Exiting now.');
        process.exit(0);
    });
});

process.on('SIGTERM', () => {
    console.log('SIGTERM received. Graceful shutdown initiated...');
    // 执行一些清理操作
    cleanUpOperations(() => {
        console.log('Cleaned up. Exiting now.');
        process.exit(0);
    });
});

function cleanUpOperations(callback) {
    // 模拟一些耗时的操作
    setTimeout(() => {
        callback();
    }, 2000); // 假设需要2秒来完成清理操作
}

解释

  1. 监听信号:我们通过process.on('SIGINT', ...)process.on('SIGTERM', ...) 监听两种信号。
  2. 清理操作:在接收到信号后,我们调用一个模拟的清理函数cleanUpOperations。这个函数代表了应用程序需要执行的所有清理操作,例如关闭数据库连接、写入日志文件等。
  3. 完成清理后退出:当清理操作完成后,我们调用callback() 函数,并通过process.exit(0) 来正常退出进程。

REPL中的退出

在Node.js的REPL环境中,可以使用.exit命令来退出当前的REPL会话。虽然这并不是用于优雅地退出整个应用,但在调试和测试过程中非常有用。

> .exit

以上就是如何在Node.js中实现优雅退出的基本方法。希望这些信息对大家有所帮助!


这两篇已经过时了,从哪个版本起REPL已经会检测ctrl+c并退出了

如果不是退出,而只是断开服务器呢

[每日推荐阅读] Nodejs:优雅地退出Node.js

今天推荐一篇关于如何优雅地退出Node.js的应用程序的文章。优雅退出指的是在关闭应用之前,完成所有正在进行的工作(如关闭数据库连接、清理临时文件等),然后再退出应用。

原文链接:

补充阅读:

示例代码:

const http = require('http');
const fs = require('fs');

const server = http.createServer((req, res) => {
    if (req.url === '/shutdown') {
        res.writeHead(200, { 'Content-Type': 'text/plain' });
        res.end('Shutting down...\n');
        process.exit(); // 直接退出,但不优雅
    } else {
        res.writeHead(200, { 'Content-Type': 'text/plain' });
        res.end('Hello World\n');
    }
});

server.listen(3000, () => {
    console.log('Server running at http://localhost:3000/');
});

process.on('SIGINT', () => {
    console.log('Received SIGINT. Shutting down...');
    server.close(() => {
        console.log('Server closed.');
        process.exit();
    });
});

解释:

  1. 创建HTTP服务器:使用http.createServer方法创建一个简单的HTTP服务器。
  2. 处理请求:如果请求的URL是/shutdown,则发送一条关闭消息并优雅地退出。
  3. 监听端口:服务器监听3000端口。
  4. 注册信号处理器:使用process.on('SIGINT', callback)方法注册一个信号处理器来捕获SIGINT信号(通常由Ctrl+C触发)。当捕获到该信号时,服务器会关闭所有连接,并在完成后调用process.exit()来退出应用。

这种方法确保了在退出应用之前所有活动连接都得到了妥善处理。

回到顶部