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实现禁止中文输入的方法
Jan 14 Javascript
JavaScript DOM事件(笔记)
Apr 08 Javascript
Vue.js 表单校验插件
Aug 14 Javascript
jquery判断页面网址是否有效的两种方法
Dec 11 Javascript
微信小程序 自定义Toast实例代码
Jun 12 Javascript
简述Angular 5 快速入门
Nov 04 Javascript
Bootstrap-table使用footerFormatter做统计列功能
Sep 07 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
Sep 03 Javascript
vue 如何使用递归组件
Oct 23 Javascript
springboot+vue实现文件上传下载
Nov 17 Vue.js
浅析VUE防抖与节流
Nov 24 Vue.js
react中props 的使用及进行限制的方法
Apr 28 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
DC漫画《蝙蝠侠和猫女》图透 猫女怀孕老爷当爹
2020/04/09 欧美动漫
PHPMailer使用教程(PHPMailer发送邮件实例分析)
2012/12/06 PHP
php获取网页中图片、DIV内容的简单方法
2014/06/19 PHP
php上传文件问题汇总
2015/01/30 PHP
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/01/13 Javascript
js 对联广告、漂浮广告封装类(IE,FF,Opera,Safari,Chrome
2009/11/26 Javascript
document.documentElement和document.body区别介绍
2013/09/16 Javascript
extjs表格文本启用选择复制功能具体实现
2013/10/11 Javascript
三种取消选中单选框radio的方法
2014/09/09 Javascript
分享20个提升网站界面体验的jQuery插件
2014/12/15 Javascript
JavaScript检测实例属性, 原型属性
2015/02/04 Javascript
浅谈使用MVC模式进行JavaScript程序开发
2015/11/10 Javascript
Javascript实现图片懒加载插件的方法
2016/10/20 Javascript
微信小程序 聊天室简单实现
2017/04/19 Javascript
javascript计算渐变颜色的实例
2017/09/22 Javascript
vue 通过下拉框组件学习vue中的父子通讯
2017/12/19 Javascript
create-react-app构建项目慢的解决方法
2018/03/14 Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
2018/08/12 Javascript
vue服务端渲染页面缓存和组件缓存的实例详解
2018/09/18 Javascript
微信小程序点击列表跳转到对应详情页过程解析
2019/09/26 Javascript
vue elementui 实现搜索栏公共组件封装的实例代码
2020/01/20 Javascript
Python Sleep休眠函数使用简单实例
2015/02/02 Python
matplotlib简介,安装和简单实例代码
2017/12/26 Python
Python类的继承用法示例
2019/01/31 Python
Django框架中序列化和反序列化的例子
2019/08/06 Python
使用opencv中匹配点对的坐标提取方式
2020/06/04 Python
西班牙最好的在线购买葡萄酒的商店:Vinoseleccion
2019/10/30 全球购物
在求职信中如何凸显个人优势
2013/10/30 职场文书
作弊检讨书1000字
2014/02/01 职场文书
《望洞庭》教学反思
2014/02/16 职场文书
采购经理岗位职责
2014/02/16 职场文书
个人承诺书
2014/03/26 职场文书
媒体宣传策划方案
2014/05/25 职场文书
任命书怎么写
2015/03/02 职场文书
二婚主持词
2015/06/30 职场文书
nginx proxy_cache 缓存配置详解
2021/03/31 Servers