UNPKG

t-comm

Version:

专业、稳定、纯粹的工具库

38 lines (35 loc) 1.17 kB
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 };