首页 > 编程 > JavaScript > 正文

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

2019-11-20 08:50:57
字体:
来源:转载
供稿:网友

前言

在网络技术中,端口(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)    }  })}

总结

以上就是这篇文章的全部内容了,希望能对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表