nodejs检查端口是否被占用(完美方案)

nodejs检查端口是否被占用(完美方案)_第1张图片


nodejs检查端口是否被占用,先看个运行效果:

PS D:\software\wamp\www\subtitleGo> node t.js
8022 ====被占用====:

8023 ====被占用====:

8024 ====被占用====:

8025 ====端口:8025可用====

没错,它会一直递归检测端口是否可用,直到可用。

代码:

# 递归检测端口是否可用

const net = require('net');

async function portInUse(port){
    return new Promise((resolve, reject)=>{
        let server = net.createServer().listen(port);
        server.on('listening',function(){
            server.close();
            resolve(port);
        });
        server.on('error',function(err){
            if(err.code == 'EADDRINUSE'){
                port++;
                reject(err);
            }
        });        
    });
}

const tryUsePort = function(port,_portAvailableCallback){
    portInUse(port).then((port)=>{
        _portAvailableCallback(port);
    }).catch((err)=>{
        console.log(port+" ====被占用====:\n");
        port++;
        tryUsePort(port,_portAvailableCallback);
    })  
}

// 测试
tryUsePort(port=8022,function(port){
    // do something ...
    console.log(port+" ====端口:"+port+"可用====\n");
    net.createServer().listen(port);
});

参考:

  1. Node.js内部是如何捕获异步错误的 https://zhuanlan.zhihu.com/p/62210238     

你可能感兴趣的:(nodejs,JavaScript,网络通信/协议)