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文件里远程调用jquery.js会在ie8下的一个奇怪问题
Nov 28 Javascript
js采用map取到id集合组并且实现点击一行选中一行
Dec 16 Javascript
JavaScript使用slice函数获取数组部分元素的方法
Apr 06 Javascript
js实现动态显示时间效果
Mar 06 Javascript
JavaScript无缝滚动效果的实例代码
Mar 27 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
Aug 08 jQuery
jquery实现限制textarea输入字数的方法
Sep 06 jQuery
Vue核心概念Action的总结
Jan 18 Javascript
基于vue通用表单解决方案的思考与分析
Mar 16 Javascript
js实现聊天对话框
Feb 08 Javascript
JS数组push、unshift、pop、shift方法的实现与使用方法示例
Apr 29 Javascript
vue + node如何通过一个Txt文件批量生成MP3并压缩成Zip
Jun 02 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
火车采集器 免费版使出收费版本功能实现原理
2009/09/17 PHP
header中Content-Disposition的作用与使用方法
2012/06/13 PHP
PHP 登录记住密码实现思路
2013/05/07 PHP
ThinkPHP的L方法使用简介
2014/06/18 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三个函数的理解
2010/04/29 Javascript
jquery 操作DOM的基本用法分享
2012/04/05 Javascript
JS 实现点击a标签的时候让其背景更换
2013/10/15 Javascript
javascript实现json页面分页实例代码
2014/02/20 Javascript
angularJs中orderBy筛选以及filter过滤数据的方法
2018/09/30 Javascript
vue项目首屏打开速度慢的解决方法
2019/03/31 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
微信小程序API—获取定位的详解
2019/04/30 Javascript
React优化子组件render的使用
2019/05/12 Javascript
vue移动端模态框(可传参)的实现
2019/11/20 Javascript
js数组中去除重复值的几种方法
2020/08/03 Javascript
[40:03]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
Python实现将json文件中向量写入Excel的方法
2018/03/26 Python
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
2019/09/11 Python
Pytorch 实现数据集自定义读取
2020/01/18 Python
Python networkx包的实现
2020/02/14 Python
Anaconda+Pycharm环境下的PyTorch配置方法
2020/03/13 Python
自定义实现 PyQt5 下拉复选框 ComboCheckBox的完整代码
2020/03/30 Python
Python提取视频中图片的示例(按帧、按秒)
2020/10/22 Python
pytorch Dataset,DataLoader产生自定义的训练数据案例
2021/03/03 Python
Gap加拿大官网:Gap Canada
2017/08/24 全球购物
大三在校生电子商务求职信
2013/10/29 职场文书
元旦寄语大全
2014/04/10 职场文书
物业管理专业求职信
2014/06/11 职场文书
学校食品安全实施方案
2014/06/14 职场文书
小学生放飞梦想演讲稿
2014/08/26 职场文书
法人代表证明书格式
2014/10/01 职场文书
个人工作能力自我评价
2015/03/05 职场文书
python3使用diagrams绘制架构图的步骤
2021/04/08 Python
Python正则表达式中flags参数的实例详解
2022/04/01 Python