t-comm
Version:
专业、稳定、纯粹的工具库
38 lines (35 loc) • 1.17 kB
JavaScript
import { getNet } from '../nodejs/net.mjs';
/**
* 获取可用的端口号
* 从指定端口开始检测,如果端口被占用则自动尝试下一个端口,直到找到可用端口
* @param port - 起始端口号
* @returns {Promise<number>} - 返回可用的端口号
* @example
* ```ts
* // 从 3000 端口开始查找可用端口
* getValidPort(3000).then(port => {
* console.log(`可用端口: ${port}`);
* });
* ```
*/
function getValidPort(port) {
var net = getNet();
var server = net.createServer().listen(port);
return new Promise(function (resolve, reject) {
// 如果监听成功,表示端口没有被其他服务占用,端口可用,取消监听,返回端口给调用者。
server.on('listening', function () {
server.close();
resolve(port);
});
// 如果监听出错,端口+1,继续监听,直到监听成功。
server.on('error', function (err) {
if (err.code === 'EADDRINUSE') {
resolve(getValidPort(port + 1));
console.log("this port ".concat(port, " is occupied try another."));
} else {
reject(err);
}
});
});
}
export { getValidPort };