Node.js检测端口(port)是否被占用的简单示例

前言

在网络技术中,端口(Port)大致有两种意思:一是物理意义上的端口,比如,ADSL Modem、集线器、交换机、路由器用于连接其他网络设备的接口,如RJ-45端口、SC端口等等。二是逻辑意义上的端口,一般是指TCP/IP协议中的 端口,端口号的范围从0到65535,比如用于浏览网页服务。这篇文章的目的是为了解决ssr工具起多个服务的时候端口被占用的情况,下面跟大家分享研究的代码片段,有需要的可以参考借鉴。

示例代码

// 检测port是否被占用

function probe(port, callback) {

var server = net.createServer().listen(port)

var calledOnce = false

var timeoutRef = setTimeout(function () {

calledOnce = true

callback(false,port)

}, 2000)

timeoutRef.unref()

var connected = false

server.on('listening', function() {

clearTimeout(timeoutRef)

if (server)

server.close()

if (!calledOnce) {

calledOnce = true

callback(true,port)

}

})

server.on('error', function(err) {

clearTimeout(timeoutRef)

var result = true

if (err.code === 'EADDRINUSE')

result = false

if (!calledOnce) {

calledOnce = true

callback(result,port)

}

})

}

function server(_port){

var pt = _port || __port;

probe(pt,function(bl,_pt){

// 端口被占用 bl 返回false

// _pt:传入的端口号

if(bl === true){

// ssr(_pt)

server = http.createServer(connListener);

server = server.listen(parseInt(_pt, 10));

console.log("\n Static file server running at" + "\n\n=> http://localhost:" + _pt + '\n');

}else{

server(_pt+1)

}

})

}

总结

以上是 Node.js检测端口(port)是否被占用的简单示例 的全部内容, 来源链接: utcz.com/z/320239.html

回到顶部