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 6/7/8/9 解析异常的解决方法
Apr 07 Javascript
使用js获取地址栏中传递的值
Jul 02 Javascript
jquery中选择块并改变属性值的方法
Jul 31 Javascript
JS 有趣的eval优化输入验证实例代码
Sep 22 Javascript
javascript实现全局匹配并替换的方法
Apr 27 Javascript
JS动态添加iframe的代码
Sep 14 Javascript
webpack教程之webpack.config.js配置文件
Jul 05 Javascript
vue-awesome-swiper 基于vue实现h5滑动翻页效果【推荐】
Nov 08 Javascript
一秒学会微信小程序制作table表格
Feb 14 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
Sep 11 Javascript
vuex actions异步修改状态的实例详解
Nov 06 Javascript
基于vue-cli3创建libs库的实现方法
Dec 04 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_MySQL教程-第一天
2007/03/18 PHP
解析dedeCMS验证码的实现代码
2013/06/07 PHP
php生成图形验证码几种方法小结
2013/08/15 PHP
PHP callback函数使用方法和注意事项
2015/01/23 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
2020/11/23 PHP
jQuery获取css z-index在各种浏览器中的返回值
2010/09/15 Javascript
在JavaScript中处理数组之reverse()方法的使用
2015/06/09 Javascript
javascript经典特效分享 手风琴、轮播图、图片滑动
2016/09/14 Javascript
给easyui datebox扩展一个清空的实例
2016/11/09 Javascript
require、backbone等重构手机图片查看器
2016/11/17 Javascript
常用的9个JavaScript图表库详解
2017/12/19 Javascript
详解小程序原生使用ES7 async/await语法
2018/08/06 Javascript
基于AngularJs select绑定数字类型的问题
2018/10/08 Javascript
vue中render函数的使用详解
2018/10/12 Javascript
vue实现的双向数据绑定操作示例
2018/12/04 Javascript
Angular如何由模板生成DOM树的方法
2019/12/23 Javascript
vue自定义组件(通过Vue.use()来使用)即install的用法说明
2020/08/11 Javascript
JS如何判断对象是否包含某个属性
2020/08/29 Javascript
[56:58]VP vs Optic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
几个提升Python运行效率的方法之间的对比
2015/04/03 Python
在Django框架中编写Contact表单的教程
2015/07/17 Python
python实现下载文件的三种方法
2017/02/09 Python
Python装饰器知识点补充
2018/05/28 Python
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
2018/08/22 Python
python抖音表白程序源代码
2019/04/07 Python
python微信撤回监测代码
2019/04/29 Python
Python列表元素删除和remove()方法详解
2021/01/04 Python
大专生自我评价
2014/01/28 职场文书
人事经理岗位职责
2014/04/28 职场文书
项目经理任命书内容
2014/06/06 职场文书
通报表扬范文
2015/01/17 职场文书
导游词之西安大清真寺
2019/12/17 职场文书
纯CSS实现hover图片pop-out弹出效果的实例代码
2021/04/16 HTML / CSS
python实现三次密码验证的示例
2021/04/29 Python