UNPKG

t-comm

Version:

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

42 lines (37 loc) 1.28 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var nodejs_net = require('../nodejs/net.js'); /** * 获取可用的端口号 * 从指定端口开始检测,如果端口被占用则自动尝试下一个端口,直到找到可用端口 * @param port - 起始端口号 * @returns {Promise<number>} - 返回可用的端口号 * @example * ```ts * // 从 3000 端口开始查找可用端口 * getValidPort(3000).then(port => { * console.log(`可用端口: ${port}`); * }); * ``` */ function getValidPort(port) { var net = nodejs_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); } }); }); } exports.getValidPort = getValidPort;