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 相关文章推荐
调用js时ie6和ie7,ff的区别
Aug 19 Javascript
javascript自动改变文字大小和颜色的效果的小例子
Aug 02 Javascript
基于jQuery实现的文字按钮表单特效整理
Dec 07 Javascript
jquery遍历json对象集合详解
May 18 Javascript
详解为Bootstrap Modal添加拖拽的方法
Jan 05 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
Dec 06 Javascript
Django+vue跨域问题解决的详细步骤
Jan 20 Javascript
详解小程序之简单登录注册表单验证
May 13 Javascript
微信小程序实现多选框全选与取消全选功能示例
May 14 Javascript
初试vue-cli使用HBuilderx打包app的坑
Jul 17 Javascript
vue绑定class的三种方法
Dec 24 Vue.js
React如何创建组件
Jun 27 Javascript
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/06/08 PHP
PHP、Python和Javascript的装饰器模式对比
2015/02/03 PHP
WordPress中的shortcode短代码功能使用详解
2016/05/17 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
2019/10/16 PHP
js,jQuery 排序的实现代码,网页标签排序的实现,标签排序
2011/04/27 Javascript
简单实例处理url特殊符号&处理(2种方法)
2013/04/02 Javascript
用js格式化金额可设置保留的小数位数
2014/05/09 Javascript
jQuery+ajax实现鼠标单击修改内容的思路
2014/06/29 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
2015/07/27 Javascript
jQuery添加删除DOM元素方法详解
2016/01/18 Javascript
Angularjs 依赖压缩及自定义过滤器写法
2017/02/04 Javascript
打造通用的匀速运动框架(实例讲解)
2017/10/17 Javascript
浅谈NodeJs之数据库异常处理
2017/10/25 NodeJs
纯html+css+javascript实现楼层跳跃式的页面布局(实例代码)
2017/10/25 Javascript
Vue 仿QQ左滑删除组件功能
2018/03/12 Javascript
jQuery中each方法的使用详解
2018/03/18 jQuery
Vue CLI3.0中使用jQuery和Bootstrap的方法
2019/02/28 jQuery
ECharts地图绘制和钻取简易接口详解
2019/07/12 Javascript
Win7上搭建Cocos2d-x 3.1.1开发环境
2014/07/03 Python
使用python实现rsa算法代码
2016/02/17 Python
python 实现上传图片并预览的3种方法(推荐)
2017/07/14 Python
高效测试用例组织算法pairwise之Python实现方法
2017/07/19 Python
python虚拟环境的安装配置图文教程
2017/10/20 Python
儿童编程python入门
2018/05/08 Python
python使用 cx_Oracle 模块进行查询操作示例
2019/11/28 Python
分享CSS3中必须要知道的10个顶级命令
2012/04/26 HTML / CSS
Marriott国际:万豪国际酒店查询预订
2017/09/25 全球购物
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
火山动力Java笔试题
2014/06/26 面试题
高分子材料与工程专业个人求职信
2013/12/15 职场文书
高中考试作弊检讨书
2014/01/14 职场文书
房地产促销活动方案
2014/03/01 职场文书
2015年元旦文艺汇演主持词
2014/03/26 职场文书
报效祖国演讲稿
2014/09/15 职场文书
2014年行政助理工作总结
2014/11/19 职场文书
导游词之韩国济州岛
2019/10/28 职场文书