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 相关文章推荐
IE与firefox之jquery用法区别
Oct 03 Javascript
JScript 脚本实现文件下载 一般用于下载木马
Oct 29 Javascript
实现js保留小数点后N位的代码
Nov 13 Javascript
浅谈jQuery构造函数分析
May 11 Javascript
JavaScript实现的背景自动变色代码
Oct 17 Javascript
JS实现title标题栏文字不间断滚动显示效果
Sep 07 Javascript
AJAX和jQuery动态加载数据的实现方法
Dec 05 Javascript
javascript数组定义的几种方法
Oct 06 Javascript
vue.js项目 el-input 组件 监听回车键实现搜索功能示例
Aug 25 Javascript
vue微信分享到朋友圈 vue微信发送给好友
Nov 28 Javascript
用几道面试题来看JavaScript执行机制
Apr 30 Javascript
Typescript类型系统FLOW静态检查基本规范
May 25 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
解析MySql与Java的时间类型
2013/06/22 PHP
深入解析Session是否必须依赖Cookie
2013/08/02 PHP
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
2014/12/17 PHP
PHP多维数组指定多字段排序的示例代码
2018/05/16 PHP
在 Laravel 6 中缓存数据库查询结果的方法
2019/12/11 PHP
一些技巧性实用js代码小结
2009/10/14 Javascript
JavaScript模板入门介绍
2012/09/26 Javascript
js购物车实现思路及代码(个人感觉不错)
2013/12/23 Javascript
JS+CSS实现另类带提示效果的竖向导航菜单
2015/10/15 Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
2015/12/01 Javascript
轻松使用jQuery双向select控件Bootstrap Dual Listbox
2015/12/13 Javascript
javascript瀑布流布局实现方法详解
2016/02/17 Javascript
Vue.js实战之Vuex的入门教程
2017/04/01 Javascript
vue scroller返回页面记住滚动位置的实例代码
2018/01/29 Javascript
vue实现微信分享朋友圈,发送朋友的示例讲解
2018/02/10 Javascript
详解ES6中的Map与Set集合
2019/03/22 Javascript
详解VSCode配置启动Vue项目
2019/05/14 Javascript
JavaScript实现点击图片换背景
2020/11/20 Javascript
Vue解决移动端弹窗滚动穿透问题
2020/12/15 Vue.js
vue 数据双向绑定的实现方法
2021/03/04 Vue.js
tensorflow学习笔记之简单的神经网络训练和测试
2018/04/15 Python
解决PyCharm的Python.exe已经停止工作的问题
2018/11/29 Python
详解python编译器和解释器的区别
2019/06/24 Python
详解Python中的各种转义符\n\r\t
2019/07/10 Python
Python xpath表达式如何实现数据处理
2020/06/13 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
英国赛车、汽车改装和摩托车零件购物网站:Demon Tweeks
2018/10/29 全球购物
介绍一下MD5加密算法
2016/11/12 面试题
Linux的文件类型
2016/07/05 面试题
销售冠军获奖感言
2014/02/03 职场文书
气象学专业个人求职信
2014/04/22 职场文书
校园文化标语
2014/06/18 职场文书
社会工作专业求职信
2014/07/15 职场文书
教务处干事工作总结
2015/08/14 职场文书
Mysql开启外网访问
2022/05/15 MySQL
CSS 鼠标选中文字后改变背景色的实现代码
2023/05/21 HTML / CSS