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禁止小键盘输入数字功能代码
Aug 01 Javascript
JS两种定义方式的区别、内部原理
Nov 21 Javascript
JS实现让网页背景图片斜向移动的方法
Feb 25 Javascript
JavaScript html5 canvas绘制时钟效果
Mar 01 Javascript
基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
May 12 Javascript
基于JavaScript实现多级菜单效果
Jul 25 Javascript
javascript实现Java中的Map对象功能的实例详解
Aug 21 Javascript
Vue响应式原理深入解析及注意事项
Dec 11 Javascript
关于react-router/react-router-dom v4 history不能访问问题的解决
Jan 08 Javascript
vue开发拖拽进度条滑动组件
Sep 21 Javascript
从Node.js事件触发器到Vue自定义事件的深入讲解
Jun 26 Javascript
JavaScript实现简单的音乐播放器
Aug 14 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基础教程(php入门基础教程)一些code代码
2013/01/06 PHP
PHP6 中可能会出现的新特性预览
2014/04/04 PHP
php foreach如何跳出两层循环(详解)
2016/11/05 PHP
php进行md5加密简单实例方法
2019/09/19 PHP
js FLASH幻灯片字符串中有连接符&的处理方法
2012/03/01 Javascript
jQuery Tools tab(幻灯片)
2012/07/14 Javascript
jquery交替变换颜色的三种方法 实例代码
2013/11/19 Javascript
js和jquery设置disabled属性为true使按钮失效
2014/08/07 Javascript
跟我学习JScript的Bug与内存管理
2015/11/18 Javascript
easyui form validate总是返回false的原因及解决方法
2016/11/07 Javascript
js移动焦点到最后位置的简单方法
2016/11/25 Javascript
jQuery选择器实例应用
2017/01/05 Javascript
JavaScript使用正则表达式获取全部分组内容的方法示例
2017/01/17 Javascript
详解angular中通过$location获取路径(参数)的写法
2017/03/21 Javascript
JS实现微信里判断页面是否被分享成功的方法
2017/06/06 Javascript
如何利用ES6进行Promise封装总结
2019/02/11 Javascript
JQuery常用选择器功能与用法实例分析
2019/12/23 jQuery
pymssql ntext字段调用问题解决方法
2008/12/17 Python
wxPython事件驱动实例详解
2014/09/28 Python
Python中的进程分支fork和exec详解
2015/04/11 Python
python实现的多线程端口扫描功能示例
2017/01/21 Python
在Linux命令行终端中使用python的简单方法(推荐)
2017/01/23 Python
PyQt4实现下拉菜单可供选择并打印出来
2018/04/20 Python
Python后台管理员管理前台会员信息的讲解
2019/01/28 Python
Python直接赋值、浅拷贝与深度拷贝实例分析
2019/06/18 Python
django如何自己创建一个中间件
2019/07/24 Python
Python对接支付宝支付自实现功能
2019/10/10 Python
python由已知数组快速生成新数组的方法
2020/04/08 Python
python和php学习哪个更有发展
2020/06/17 Python
python怎么对数字进行过滤
2020/07/05 Python
Python判断变量是否是None写法代码实例
2020/10/09 Python
加拿大户外探险购物网站:SAIL
2020/06/27 全球购物
感恩之星事迹材料
2014/05/03 职场文书
本科生就业推荐信
2014/05/19 职场文书
党的群众路线教育实践活动个人对照检查材料(校长)
2014/11/05 职场文书
2015年组织部工作总结
2015/04/03 职场文书