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 相关文章推荐
javascript call和apply方法
Nov 24 Javascript
JavaScript 继承详解(四)
Jul 13 Javascript
JQuery中根据属性或属性值获得元素(6种情况获取方法)
Jan 17 Javascript
JS对文本框值的判断示例
Mar 10 Javascript
项目中常用的JS方法整理
Jan 30 Javascript
理解javascript定时器中的setTimeout与setInterval
Feb 23 Javascript
js微信分享API
Oct 11 Javascript
Es6 写的文件import 起来解决方案详解
Dec 13 Javascript
AngularJS select加载数据选中默认值的方法
Feb 28 Javascript
angularjs http与后台交互的实现示例
Dec 21 Javascript
vue实现设置载入动画和初始化页面动画效果
Oct 28 Javascript
vue cli3.0打包上线静态资源找不到路径的解决操作
Aug 03 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中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
Linux下PHP连接Oracle数据库
2014/08/20 PHP
关于Yii中模型场景的一些简单介绍
2019/09/22 PHP
js setattribute批量设置css样式
2009/11/26 Javascript
JavaScript Event学习第三章 早期的事件处理程序
2010/02/07 Javascript
jquery checkbox全选、取消全选实现代码
2010/03/05 Javascript
判断字符串的长度(优化版)中文占两个字符
2014/10/30 Javascript
完美实现仿QQ空间评论回复特效
2015/05/06 Javascript
全面解析JavaScript里的循环方法之forEach,for-in,for-of
2020/04/20 Javascript
js定义类的几种方法(推荐)
2016/06/08 Javascript
AngularJs  E2E Testing 详解
2016/09/02 Javascript
详解使用webpack打包编写一个vue-toast插件
2017/11/08 Javascript
微信小程序实现的图片保存功能示例
2019/04/24 Javascript
layui 实现自动选择radio单选框(checked)的方法
2019/09/03 Javascript
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
JavaScript实现Tab标签页切换的最简便方式(4种)
2020/06/28 Javascript
javascript利用canvas实现鼠标拖拽功能
2020/07/23 Javascript
[01:04]DOTA2上海特锦赛现场采访 FreeAgain遭众解说围攻
2016/03/25 DOTA
Python实现的多线程端口扫描工具分享
2015/01/21 Python
在django中实现页面倒数几秒后自动跳转的例子
2019/08/16 Python
浅谈JupyterNotebook导出pdf解决中文的问题
2020/04/22 Python
通过自学python能找到工作吗
2020/06/21 Python
python三引号如何输入
2020/07/06 Python
Python操作dict时避免出现KeyError的几种解决方法
2020/09/20 Python
Html5新增标签有哪些
2017/04/13 HTML / CSS
澳大利亚小众服装品牌:Maurie & Eve
2018/03/27 全球购物
员工拾金不昧表扬信
2014/01/09 职场文书
革命先烈的英雄事迹材料
2014/02/15 职场文书
火锅店营销方案
2014/02/26 职场文书
颁奖晚会主持词
2014/03/25 职场文书
五一活动标语
2014/06/30 职场文书
清洁工岗位职责
2015/02/13 职场文书
2015教师年度工作总结范文
2015/04/07 职场文书
基层组织建设年活动总结
2015/05/09 职场文书
预备党员转正党小组意见
2015/06/01 职场文书
浅谈Python数学建模之整数规划
2021/06/23 Python