nodejs获取一个可用的端口,检查端口是否被占用(完美方案)


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

E:\wamp64\www\tmpPro\tryuseport>node t.js
端口:8022被占用

端口:8023被占用

端口:8024可用

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

代码:

const net = require('net');
 
const tryUsePort = async function(port, portAvailableCallback){
    function portUsed(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'){
                    resolve(err);
                }
            });             
        });
    }

    let res = await portUsed(port);
    if(res instanceof Error){
        console.log(`端口:${port}被占用\n`);
        port++;
        tryUsePort(port, portAvailableCallback);
    }else{
        portAvailableCallback(port);
    }
}
 
// 测试 
tryUsePort(8022 ,function(port){
    // do something ...
    console.log(`端口:${port}可用\n`);
});

参考:

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

posted @ 2020-04-05 14:00  我的五年  阅读(250)  评论(0)    收藏  举报  来源