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


Posted in Javascript onSeptember 29, 2016

前言

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

总结

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

Javascript 相关文章推荐
jquery.AutoComplete.js中文修正版(支持firefox)
Apr 09 Javascript
jquery trigger伪造a标签的click事件取代window.open方法
Jun 23 Javascript
node.js实现爬虫教程
Aug 25 Javascript
JavaScript实现计算圆周率到小数点后100位的方法示例
May 08 Javascript
AngularJS ui-router刷新子页面路由的方法
Jul 23 Javascript
node中的密码安全(加密)
Sep 17 Javascript
angularJs中$scope数据序列化的实例
Sep 30 Javascript
vue刷新页面时去闪烁提升用户体验效果的实现方法
Dec 10 Javascript
JavaScript碰撞检测原理及其实现代码
Mar 12 Javascript
jQuery三组基本动画与自定义动画操作实例总结
May 09 jQuery
Vue中inheritAttrs的使用实例详解
Dec 31 Vue.js
vue实现拖拽进度条
Mar 01 Vue.js
json定义及jquery操作json的方法
Sep 29 #Javascript
JavaScript中apply方法的应用技巧小结
Sep 29 #Javascript
老生常谈javascript变量的命名规范和注释
Sep 29 #Javascript
浅谈javascript:两种注释,声明变量,定义函数
Sep 29 #Javascript
JS当前页面登录注册框,固定DIV,底层阴影的实例代码
Sep 29 #Javascript
Bootstrap Table从服务器加载数据进行显示的实现方法
Sep 29 #Javascript
dul无法加载bootstrap实现unload table/user恢复
Sep 29 #Javascript
You might like
php多用户读写文件冲突的解决办法
2013/11/06 PHP
Smarty中常用变量操作符汇总
2014/10/27 PHP
php通过文件流方式复制文件的方法
2015/03/13 PHP
php伪静态验证码不显示的解决方案
2019/09/26 PHP
用javascript实现读取txt文档的脚本
2007/07/20 Javascript
用jquery ajax获取网站Alexa排名的代码
2009/12/12 Javascript
关于jquery性能最佳实践的讨论,与求教
2012/03/30 Javascript
javascript实现全局匹配并替换的方法
2015/04/27 Javascript
js实现完美兼容各大浏览器的人民币大小写相互转换
2015/10/29 Javascript
详解微信小程序开发之下拉刷新 上拉加载
2016/11/24 Javascript
jQuery实现页面滚动时智能浮动定位
2017/01/08 Javascript
微信小程序 网络请求(post请求,get请求)
2017/01/17 Javascript
JS基于for语句编写的九九乘法表示例
2018/01/04 Javascript
Vue表单及表单绑定方法
2018/09/04 Javascript
p5.js临摹动态图形实现方法详解
2019/10/23 Javascript
node解析修改nginx配置文件操作实例分析
2019/11/06 Javascript
JavaScript如何实现图片处理与合成
2020/05/29 Javascript
vue3.0中使用element的完整步骤
2021/03/04 Vue.js
在Python中处理字符串之isdecimal()方法的使用
2015/05/20 Python
python使用rpc框架gRPC的方法
2018/08/24 Python
Opencv+Python 色彩通道拆分及合并的示例
2018/12/08 Python
Python3 Tkinkter + SQLite实现登录和注册界面
2019/11/19 Python
Python configparser模块常用方法解析
2020/05/22 Python
python中执行smtplib失败的处理方法
2020/07/01 Python
python进度条显示-tqmd模块的实现示例
2020/08/23 Python
Python中常用的os操作汇总
2020/11/05 Python
python自动生成证件号的方法示例
2021/01/14 Python
入学生会自荐书范文
2014/02/05 职场文书
中层干部培训方案
2014/06/16 职场文书
领导班子四风查摆对照检查材料思想汇报
2014/10/05 职场文书
中层干部考核评语
2015/01/04 职场文书
2015重阳节座谈会主持词
2015/07/30 职场文书
导游词之南迦巴瓦峰
2019/11/19 职场文书
Flask response响应的具体使用
2021/07/15 Python
一次MySQL启动导致的事故实战记录
2021/09/15 MySQL
MySQL Innodb索引机制详细介绍
2021/11/23 MySQL