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 相关文章推荐
基于jQuery的的一个隔行变色,鼠标移动变色的小插件
Jul 06 Javascript
潜说js对象和数组
May 25 Javascript
跟我学习javascript的最新标准ES6
Nov 20 Javascript
jQuery UI制作选项卡(tabs)
Dec 13 Javascript
快速使用node.js进行web开发详解
Apr 26 Javascript
jQuery序列化后的表单值转换成Json
Jun 16 jQuery
Vue的Flux框架之Vuex状态管理器
Jul 30 Javascript
jQueryMobile之窗体长内容的缺陷与解决方法实例分析
Sep 20 jQuery
vue父组件异步获取数据传给子组件的方法
Jul 26 Javascript
vue 配置多页面应用的示例代码
Oct 22 Javascript
webpack+express实现文件精确缓存的示例代码
Jun 11 Javascript
JS前端监控采集用户行为的N种姿势
Jul 23 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牛逼的面试题分享
2013/01/18 PHP
phpstudy隐藏index.php的方法
2020/09/21 PHP
RR vs IO BO3 第一场2.13
2021/03/10 DOTA
JS效率个人经验谈(8-15更新),加入range技巧
2007/01/09 Javascript
Confirmer JQuery确认对话框组件
2010/06/09 Javascript
cookie在javascript中的使用技巧以及隐私在服务器端的设置
2012/12/03 Javascript
js局部刷新页面时间具体实现
2013/07/04 Javascript
javascript实现的弹出层背景置灰-模拟(easyui dialog)
2013/12/27 Javascript
页面元素绑定jquery toggle后元素隐藏的解决方法
2014/03/27 Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
2014/06/23 Javascript
nodejs命令行参数处理模块commander使用实例
2014/09/17 NodeJs
jQuery滚动新闻实现代码
2016/06/26 Javascript
解决wx.onMenuShareTimeline出现的问题
2016/08/16 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
2016/10/10 Javascript
Bootstrap导航条的使用和理解3
2016/12/14 Javascript
jQuery实现可编辑表格并生成json结果(实例代码)
2017/07/19 jQuery
vue中添加mp3音频文件的方法
2018/03/02 Javascript
JavaScript 九种跨域方式实现原理
2019/02/11 Javascript
微信小程序select下拉框实现源码
2019/11/08 Javascript
JS通用方法触发点击事件代码实例
2020/02/17 Javascript
vuex实现购物车功能
2020/06/28 Javascript
[38:30]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场2
2014/05/24 DOTA
python计算auc指标实例
2017/07/13 Python
Python高级用法总结
2018/05/26 Python
基于python实现聊天室程序
2018/07/27 Python
python3判断url链接是否为404的方法
2018/08/10 Python
python集合的创建、添加及删除操作示例
2019/10/08 Python
HTML5中新标签和常用标签详解
2014/03/07 HTML / CSS
CHARLES & KEITH澳大利亚官网:新加坡时尚品牌
2019/01/22 全球购物
服装店营销方案
2014/03/10 职场文书
售后服务承诺书模板
2014/05/21 职场文书
环卫工作个人总结
2015/03/04 职场文书
会议通知范文
2015/04/15 职场文书
如何开发一个渐进式Web应用程序PWA
2021/05/10 Javascript
用Python创建简易网站图文教程
2021/06/11 Python
JavaWeb 入门篇:创建Web项目,Idea配置tomcat
2021/07/16 Java/Android