uni-app项目正常关闭后端口似乎没有释放

发布于 1周前 作者 gougou168 来自 uni-app

uni-app项目正常关闭后端口似乎没有释放

产品分类

uniapp/H5

示例代码

下次运行到浏览器 端口没有变成1234

操作步骤

下次运行到浏览器 端口没有变成1234

预期结果

下次运行到浏览器 端口没有变成1234

实际结果

下次运行到浏览器 端口没有变成1234

bug描述

运行到浏览器 成功后 端口 1234 正常关闭项目后 1234 没有施放
下次运行到浏览器 端口没有变成1234

开发环境与版本信息

信息
PC开发环境操作系统 Windows
操作系统版本号 11
HBuilderX类型 正式
HBuilderX版本号 4.45
浏览器平台 Edge
浏览器版本 版本 131.0.2903.146 (正式版本) (64 位)
项目创建方式 HBuilderX

2 回复

没有复现,具体描述下你的 vue 版本、HBuilderX 版本,怎么关闭的项目,点击的停止运行吗


在uni-app项目中,如果你发现应用正常关闭后端口似乎没有释放,可能是由于一些资源或进程未能正确关闭。这通常涉及到Node.js服务器或者其他后端服务的端口管理。以下是一些检查和解决该问题的代码示例,主要关注Node.js环境下的端口管理。

1. 检查服务器关闭逻辑

确保在关闭服务器时,你有正确的逻辑来释放端口。这通常涉及到监听processSIGTERMSIGINT事件,并优雅地关闭服务器。

const express = require('express');
const http = require('http');
const app = express();
const server = http.createServer(app);
const PORT = process.env.PORT || 3000;

// 启动服务器
server.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

// 优雅关闭服务器
const gracefulShutdown = () => {
  console.log('Received kill signal, shutting down gracefully.');
  server.close(() => {
    console.log('Closed out remaining connections.');
    process.exit(0);
  });

  // 强制关闭未完成的连接,设置超时时间
  const timeout = setTimeout(() => {
    console.error('Could not close connections in time, forcefully shutting down');
    process.exit(1);
  }, 30000); // 30秒超时

  // 监听所有未完成的连接
  server.getConnections((err, connections) => {
    if (err) {
      console.error('Error while getting the number of connections', err);
      process.exit(1);
    } else if (connections > 0) {
      console.log(`Waiting for ${connections} connections to close.`);
    } else {
      clearTimeout(timeout);
      server.close();
    }
  });
};

// 监听进程终止信号
process.on('SIGTERM', gracefulShutdown);
process.on('SIGINT', gracefulShutdown);

2. 使用PM2管理进程

如果你使用PM2来管理Node.js进程,可以利用PM2的重启和停止功能来确保端口正确释放。

# 启动应用
pm2 start app.js --name my-uni-app

# 停止应用
pm2 stop my-uni-app

# 重启应用
pm2 restart my-uni-app

PM2会在停止应用时发送正确的信号,确保所有资源被释放。

3. 检查端口占用

如果问题依旧存在,可以使用工具检查端口是否被占用。例如,在Linux或macOS上,可以使用lsofnetstat命令。

# 检查端口3000是否被占用
lsof -i :3000

# 或者
netstat -tulpn | grep :3000

这些步骤和代码示例应该能帮助你诊断和解决uni-app项目正常关闭后端口未释放的问题。如果问题依旧,可能需要进一步检查你的应用逻辑或依赖的库是否有资源泄露的情况。

回到顶部