Express.js 解释优雅关闭
什么是优雅关闭?
当我们使用Express应用时,经常会使用像Forever、PM2、SystemD等程序管理器。当用户想要关闭连接或停止服务器时,首先所有的连接和请求需要关闭或完成,然后再关闭应用程序。这意味着没有流量或数据应该保持开放状态,使用中的应用程序资源应该被关闭。
优雅关闭的过程: 为此,向应用程序发送一个SIGTERM(由程序管理器发送的)信号告知应用程序即将被终止。收到此信号后,应用程序停止接受新的请求,并通知负载均衡器不再接受任何新请求。所有活动请求都会被处理完毕,包括清理掉所有的数据和流量,包括数据库连接。在此过程完成后,应用程序以退出状态为0退出进程。
这就是优雅关闭的整个过程。这样可以避免在关闭服务器时可能出现的冲突产生任何副作用,并且可以轻松开始新的部署。
让我们通过一个示例来理解。
步骤1: 首先,我们需要捕获发送给应用程序的SIGTERM信号。我们使用process.on()函数来实现这个目的。
function gracefulshutdown() {
console.log("Shutting down");
myApp.close(() => {
console.log("HTTP server closed.");
// When server has stopped accepting
// connections exit the process with
// exit status 0
process.exit(0);
});
}
process.on("SIGTERM", gracefulshutdown);
步骤2: 当捕获到SIGTERM信号时,我们调用优雅关闭函数来成功关闭应用程序。
示例: 在这个示例中,我们启动一个基本的express服务器。您的应用程序将会优雅地关闭。
const express = require("express");
const myApp = express();
const port = 3000;
// Starting the server
myApp.get("/", (req, res) => {
res.send("Your express app has started!");
});
// App listening on port 3000
myApp.listen(port, () => {
console.log(`App running at http://localhost:${port}`);
});
function gracefulshutdown() {
console.log("Shutting down");
myApp.close(() => {
console.log("HTTP server closed.");
// When server has stopped accepting connections
// exit the process with exit status 0
process.exit(0);
});
}
process.on("SIGTERM", gracefulshutdown);