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 相关文章推荐
Web开发之JavaScript
Mar 29 Javascript
javascript图像处理—仿射变换深度理解
Jan 16 Javascript
jquery退出each循环的写法
Feb 26 Javascript
关于cookie的初识和运用(js和jq)
Apr 07 Javascript
js插件实现图片滑动验证码
Sep 29 Javascript
AngularJS遍历获取数组元素的方法示例
Nov 11 Javascript
vue项目中用cdn优化的方法
Jan 03 Javascript
Angular学习教程之RouterLink花式跳转
May 03 Javascript
解决Vue axios post请求,后台获取不到数据的问题方法
Aug 11 Javascript
jQuery实现全选、反选和不选功能的方法详解
Dec 04 jQuery
Angular如何由模板生成DOM树的方法
Dec 23 Javascript
jQuery擦除插件eraser使用方法详解
Jan 11 jQuery
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下常用正则表达式整理
2010/10/26 PHP
Discuz Uchome ajaxpost小技巧
2011/01/04 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
2013/06/28 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
2019/11/23 PHP
IE中直接运行显示当前网页中的图片 推荐
2006/08/31 Javascript
jQuery判断checkbox是否选中的3种方法
2014/08/12 Javascript
跟我学习javascript的Date对象
2015/11/19 Javascript
javascript的replace方法结合正则使用实例总结
2016/06/16 Javascript
AngularJS实现分页显示数据库信息
2016/07/01 Javascript
浅谈jQuery before和insertBefore的区别
2016/12/04 Javascript
Angularjs实现分页和分页算法的示例代码
2016/12/23 Javascript
js常用的继承--组合式继承
2017/03/06 Javascript
Vue.js实现价格计算器功能
2020/03/30 Javascript
基于canvas粒子系统的构建详解
2017/08/31 Javascript
详解Angular5路由传值方式及其相关问题
2018/04/28 Javascript
React 组件间的通信示例
2018/06/14 Javascript
NodeJS 中Stream 的基本使用
2018/07/30 NodeJs
js监听html页面的上下滚动事件方法
2018/09/11 Javascript
Vuex实现数据增加和删除功能
2019/11/11 Javascript
ES6使用新特性Proxy实现的数据绑定功能实例
2020/05/11 Javascript
详解Vue的组件中data选项为什么必须是函数
2020/08/17 Javascript
[01:32]DOTA2次级联赛——首支职业女子战队选拔赛全记录
2014/10/23 DOTA
Python使用Pycrypto库进行RSA加密的方法详解
2016/06/06 Python
深入理解python中的atexit模块
2017/03/07 Python
对Python3之进程池与回调函数的实例详解
2019/01/22 Python
解决python执行不输出系统命令弹框的问题
2019/06/24 Python
python3实现二叉树的遍历与递归算法解析(小结)
2019/07/03 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
2019/12/25 Python
表达自我的市场:Society6
2018/08/01 全球购物
世界上最全面的草药补充剂和顶级品牌维生素网站:HerbsPro
2019/01/20 全球购物
Yahoo-PHP面试题3
2012/01/14 面试题
电子商务应届生求职信
2013/11/16 职场文书
群众路线个人整改方案
2014/10/25 职场文书
2016抗战胜利71周年红领巾广播稿
2015/12/18 职场文书
教你使用pyinstaller打包Python教程
2021/05/27 Python
bootstrapv4轮播图去除两侧阴影及线框的方法
2022/02/15 HTML / CSS