返回

如何优雅地关闭 Express 和 Websocket 服务器?

windows

优雅地关闭 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 配置中。