t-comm
Version:
专业、稳定、纯粹的工具库
42 lines (37 loc) • 1.28 kB
JavaScript
;
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;