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实现仿Windows关机效果
Mar 10 Javascript
Jquery焦点图实例代码
Nov 25 Javascript
jquery网页日历显示控件calendar3.1使用详解
Nov 24 Javascript
JS实现字符串转驼峰格式的方法
Dec 16 Javascript
JS 实现百度搜索功能
Feb 01 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】
Dec 13 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
Jun 13 Javascript
VUE写一个简单的表格实例
Aug 06 Javascript
Vue + Element UI图片上传控件使用详解
Aug 20 Javascript
JavaScript Dom 绑定事件操作实例详解
Oct 02 Javascript
vue设置导航栏、侧边栏为公共页面的例子
Nov 01 Javascript
Selenium执行Javascript脚本参数及返回值过程详解
Apr 01 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用header函数实现301跳转代码实例
2013/11/25 PHP
PHP云打印类完整示例
2016/10/15 PHP
PHP实现的AES 128位加密算法示例
2019/09/16 PHP
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
2010/09/12 Javascript
JavaScript中的isXX系列是否继续使用的分析
2011/04/16 Javascript
JavaScript高级程序设计 阅读笔记(七) ECMAScript中的语句
2012/02/27 Javascript
jQuery 图片切换插件(代码比较少)
2012/05/07 Javascript
javaScript复制功能调用实现方案
2012/12/13 Javascript
js实现单一html页面两套css切换代码
2013/04/11 Javascript
JavaScript模块随意拖动示例代码
2014/05/27 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
2014/06/26 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
深入理解关于javascript中apply()和call()方法的区别
2016/04/12 Javascript
基于d3.js实现实时刷新的折线图
2016/08/03 Javascript
利用vue.js实现被选中状态的改变方法
2018/02/08 Javascript
JavaScript中利用Array filter() 方法压缩稀疏数组
2018/02/24 Javascript
微信小程序自定义多选事件的实现代码
2018/05/17 Javascript
React key值的作用和使用详解
2018/08/23 Javascript
JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例
2019/02/21 Javascript
Vue2.x通用编辑组件的封装及应用详解
2019/05/28 Javascript
Vue实现随机验证码功能
2020/12/29 Vue.js
浅谈python import引入不同路径下的模块
2017/07/11 Python
python代码过长的换行方法
2018/07/19 Python
Python BS4库的安装与使用详解
2018/08/08 Python
django框架使用方法详解
2019/07/18 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
2020/02/11 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
2020/08/05 Python
scrapy结合selenium解析动态页面的实现
2020/09/28 Python
施华洛世奇德国官网:SWAROVSKI德国
2017/02/01 全球购物
JD Sports瑞典:英国领先的运动时尚商店
2018/01/28 全球购物
中职生自荐信
2013/10/13 职场文书
销售员岗位职责范本
2015/04/11 职场文书
2015年环境整治工作总结
2015/05/22 职场文书
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
2021/05/31 Python
SQL实现LeetCode(177.第N高薪水)
2021/08/04 MySQL
CSS 鼠标选中文字后改变背景色的实现代码
2023/05/21 HTML / CSS