nodejs檢查端口是否被佔用(完美方案)


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     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章