Browse Source

♻️ refactor(server): improve server shutdown process

- extract shutdown logic into dedicated shutdownServer async function
- add proper Vite development server shutdown handling with error catching
- handle both SIGINT (Ctrl+C) and SIGTERM (kill command) signals
- add error handling for server shutdown operations
- add detailed logging for shutdown process steps
- implement graceful shutdown sequence: Vite server first, then main server
yourname 7 months ago
parent
commit
4ebff26c19
1 changed files with 26 additions and 5 deletions
  1. 26 5
      server.js

+ 26 - 5
server.js

@@ -314,11 +314,32 @@ parentServer.listen(port, () => {
   console.log('========================================');
   console.log('========================================');
 })
 })
 
 
-// 处理服务器关闭事件
-process.on('SIGINT', () => {
+// 统一的服务器关闭处理函数
+const shutdownServer = async () => {
   console.log('正在关闭服务器...');
   console.log('正在关闭服务器...');
-  parentServer.close(() => {
-    console.log('服务器已关闭');
+  
+  // 1. 先关闭 Vite 开发服务器(包括 HMR 服务)
+  if (!isProduction && vite) {
+    console.log('正在关闭 Vite 开发服务器(包括 HMR 服务)...');
+    try {
+      await vite.close(); // 关闭 Vite 实例,会自动终止 HMR 服务(8081 端口)
+      console.log('Vite 开发服务器已关闭');
+    } catch (err) {
+      console.error('关闭 Vite 服务器时出错:', err);
+    }
+  }
+  
+  // 2. 关闭主服务器
+  parentServer.close((err) => {
+    if (err) {
+      console.error('关闭主服务器时出错:', err);
+      process.exit(1);
+    }
+    console.log('主服务器已关闭');
     process.exit(0);
     process.exit(0);
   });
   });
-});
+};
+
+// 处理进程终止信号(包括 Ctrl+C)
+process.on('SIGINT', shutdownServer);  // 处理 Ctrl+C
+process.on('SIGTERM', shutdownServer); // 处理 kill 命令