serverManager.js 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. const { exec } = require('child_process');
  2. const axios = require('axios');
  3. const fs = require('fs');
  4. const path = require('path');
  5. const constants = require('./constants');
  6. const utils = require('./utils');
  7. let serverProcess;
  8. // 启动 Web API 的函数
  9. const startServer = () => {
  10. return new Promise((resolve, reject) => {
  11. serverProcess = exec(path.join(constants.serverPath, 'server', 'IES.ExamServer.exe'), {
  12. cwd: `${constants.serverPath}/server`, // 设置工作目录为 server 目录
  13. stdio: 'inherit'
  14. });
  15. serverProcess.stdout.on('data', (data) => {
  16. console.log(`Server stdout: ${data}`);
  17. });
  18. serverProcess.stderr.on('data', (data) => {
  19. console.log(`Server stderr: ${data}`);
  20. });
  21. serverProcess.on('close', (data) => {
  22. console.log(`Server process exited with code ${data}`);
  23. reject(new Error(`Server process exited with code ${data}`));
  24. });
  25. // 等待 Web API 启动成功
  26. const checkHealth = async () => {
  27. try {
  28. const response = await axios.get(`${constants.baseUrl}/index/health`, {
  29. httpsAgent: constants.agent
  30. });
  31. if (response.status === 200) {
  32. console.log('Server is up and running!');
  33. resolve();
  34. }
  35. } catch (error) {
  36. console.log('Waiting for server to start...');
  37. setTimeout(checkHealth, 1000); // 每隔 1 秒检查一次
  38. }
  39. };
  40. checkHealth();
  41. });
  42. };
  43. // 检查服务器健康状态的函数
  44. const checkServerHealth = async () => {
  45. try {
  46. const response = await axios.get(`${constants.baseUrl}/index/health`, {
  47. httpsAgent: constants.agent
  48. });
  49. if (response.status === 200) {
  50. console.log('Server is up and running!');
  51. return true;
  52. }
  53. } catch (error) {
  54. console.log('Server is not running yet.');
  55. return false;
  56. }
  57. };
  58. // 关闭服务器的函数
  59. const shutdownServer = async () => {
  60. if (serverProcess) {
  61. console.log('Killing server process...');
  62. serverProcess.kill();
  63. }
  64. try {
  65. console.log('index/shutdown api ...');
  66. const response = await axios.get(`${constants.baseUrl}/index/shutdown`, {
  67. httpsAgent: constants.agent
  68. });
  69. if (response.status === 200) {
  70. console.log('Server is shutdown!');
  71. }
  72. } catch (error) {
  73. console.error('关闭.NET Core Web API 时出错:', error);
  74. }
  75. };
  76. module.exports = {
  77. startServer,
  78. checkServerHealth,
  79. shutdownServer
  80. };