如何优雅地关闭 Express 和 Websocket 服务器?
2024-03-12 00:26:44
优雅地关闭 Express 和 Websocket 服务器
在使用 Git Bash 终端开发 Node.js 应用程序时,应用程序在关闭终端窗口时不关闭的问题可能会很令人沮丧。这会导致资源泄漏,并且使服务器无法在关闭终端后关闭。本文将指导你如何使用信号处理程序、Websocket 服务器关闭和自定义脚本,优雅地关闭你的 Express 和 Websocket 服务器。
信号处理程序
当操作系统想要终止某个进程时,它会发送一个信号。对于关闭终端窗口,相关信号是 SIGTERM
。我们可以使用 process.on('SIGTERM', ...)
函数来监听此信号,并在此信号触发时执行特定操作。
process.on('SIGTERM', () => {
// 关闭 Websocket 服务器
wss.close();
// 关闭 Express 服务器
server.close();
// 退出进程
process.exit();
});
通过这样做,当终端窗口关闭时,我们的服务器应用程序将自动关闭,避免资源泄漏。
关闭 Websocket 服务器
在关闭 Express 服务器之前,我们需要明确关闭 Websocket 服务器。这将释放由 Websocket 服务器持有的任何资源。
wss.close();
自定义脚本
为了更方便地关闭服务器,我们可以创建一个自定义脚本。此脚本将使用 pkill
命令,该命令用于终止匹配特定条件的进程。
#!/bin/bash
pkill -f "node ./src/server/server.ts"
确保脚本具有可执行权限:
chmod +x close-server.sh
然后,将此脚本添加到你的 Git Bash 配置中,以方便使用。
echo "alias close-server='./close-server.sh'" >> ~/.bashrc
现在,你可以使用 close-server
别名轻松关闭服务器。
常见问题解答
1. 为什么在关闭终端窗口时关闭服务器很重要?
关闭服务器可以避免资源泄漏,并确保服务器在关闭终端后干净地关闭。
2. 如何自定义脚本以关闭我的服务器?
编辑 close-server.sh
脚本,并用你的服务器进程的路径替换 node ./src/server/server.ts
。
3. 如何避免资源泄漏?
通过在关闭终端窗口时优雅地关闭服务器,可以避免资源泄漏。
4. 什么信号触发了服务器的关闭?
SIGTERM
信号触发了服务器的关闭。
5. 如何在我的 Git Bash 配置中添加自定义脚本?
使用 echo "alias close-server='./close-server.sh'" >> ~/.bashrc
命令将脚本添加到你的 Git Bash 配置中。