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 显示当前日期与时间的代码
Mar 24 Javascript
JQuery实现简单验证码提示解决方案
Dec 20 Javascript
js 显示base64编码的二进制流网页图片
Apr 04 Javascript
逐一介绍Jquery data()、Jquery stop()、jquery delay()函数(详)
Nov 04 Javascript
JS禁用页面上所有控件的实现方法(附demo源码下载)
Dec 17 Javascript
jQuery动画效果实现图片无缝连续滚动
Jan 12 Javascript
HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
Jan 26 Javascript
原生js实现ajax方法(超简单)
Sep 20 Javascript
JS实现给json数组动态赋值的方法示例
Mar 19 Javascript
vue实现列表滚动的过渡动画
Jun 29 Javascript
jquery实现抽奖功能
Oct 22 jQuery
解决vue侦听器watch,调用this时出现undefined的问题
Oct 30 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 全局变量范围分析
2009/08/07 PHP
mysql_num_rows VS COUNT 效率问题分析
2011/04/23 PHP
PHP使用ffmpeg给视频增加字幕显示的方法
2015/03/12 PHP
Zend Framework教程之动作的基类Zend_Controller_Action详解
2016/03/07 PHP
基于php中echo用逗号和用点号的区别详解
2018/01/23 PHP
PHP操作Redis常用命令的实例详解
2020/12/23 PHP
jquery的$getjson调用并获取远程的JSON字符串问题
2012/12/10 Javascript
ie7+背景透明文字不透明超级简单的实现方法
2014/01/17 Javascript
多引号嵌套的变量命名的问题
2014/05/09 Javascript
nodejs中使用monk访问mongodb
2014/07/06 NodeJs
AngularJS 2.0新特性有哪些
2016/02/18 Javascript
实例详解jQuery的无new构建
2016/08/02 Javascript
BootStrap入门教程(三)之响应式原理
2016/09/19 Javascript
easyUI实现类似搜索框关键词自动提示功能示例代码
2016/12/27 Javascript
全面解析vue中的数据双向绑定
2017/05/10 Javascript
vue-router 中router-view不能渲染的解决方法
2017/05/23 Javascript
详解vue-cli开发环境跨域问题解决方案
2017/06/06 Javascript
vue中使用axios post上传头像/图片并实时显示到页面的方法
2018/09/27 Javascript
Vue渲染过程浅析
2019/03/14 Javascript
Python开发常用的一些开源Package分享
2015/02/14 Python
Python实现Windows上气泡提醒效果的方法
2015/06/03 Python
python生成随机图形验证码详解
2017/11/08 Python
在python中利用最小二乘拟合二次抛物线函数的方法
2018/12/29 Python
解决Python列表字符不区分大小写的问题
2019/12/19 Python
Python利用pip安装tar.gz格式的离线资源包
2020/09/14 Python
python 基于wx实现音乐播放
2020/11/24 Python
Madewell澳大利亚官方网站:美国休闲服饰品牌
2019/07/18 全球购物
Java面试中常遇到的问题,也是需要注意的几点
2013/08/30 面试题
学生会主席就职演讲稿
2014/01/14 职场文书
安全生产承诺书
2014/03/26 职场文书
政治学求职信
2014/06/03 职场文书
2014年实习班主任工作总结
2014/11/08 职场文书
银行稽核岗位职责
2015/04/13 职场文书
电工生产实习心得体会
2016/01/22 职场文书
vue中data改变后让视图同步更新的方法
2021/03/29 Vue.js
排查并解决Oracle sysaux表空间异常增长
2022/04/20 Oracle