资讯专栏INFORMATION COLUMN

nodejs 检测port是否被占用

hyuan / 1144人阅读

摘要:为了解决工具起多个服务的时候端口被占用的情况。分享研究的代码片段。

为了解决 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("
  Static file server running at" + "

=> http://localhost:" + _pt + "
");
        }else{
            server(_pt+1)
        }
    })
}

关注公众号

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/91535.html

相关文章

  • Nodejs高性能原理(下) --- 事件循环详解

    摘要:如果一个即时定时器是被一个正在执行的回调排入队列的,则该定时器直到下一次事件循环迭代才会被触发。参数描述在事件循环的当前回合结束时要调用的函数。事件轮询随后的调用,会在任何事件包括定时器之前运行。 系列文章 Nodejs高性能原理(上) --- 异步非阻塞事件驱动模型Nodejs高性能原理(下) --- 事件循环详解 前言 终于开始我nodejs的博客生涯了,先从基本的原理讲起.以前写...

    newsning 评论0 收藏0
  • vue-cli#4.7项目结构分析

    摘要:前言使用过进行项目开发的同学,一定知道或者使用过脚手架,他能够很好的搭建项目结构和工程,让我们能够把足够的精力放在业务开发上。对象提供一系列属性,用于返回系统信息返回当前进程的命令行参数数组。 前言 使用过 vue 进行项目开发的同学,一定知道或者使用过 vue-cli 脚手架,他能够很好的搭建项目结构和工程,让我们能够把足够的精力放在业务开发上。也正是因为这样,很多时候我们会因为项目...

    EastWoodYang 评论0 收藏0
  • [翻译]了解NodeJS看这一篇就够了

    摘要:当这些隐藏于幕后的工作者处理完委托给它们的事件后,它们会触发绑定在这些事件上的回调函数去通知。习惯回调是一个单线程事件驱动的运行环境,也就是说,在里,任何事都是对事件的响应。 原文地址:https://codeburst.io/the-only-nodejs-introduction-youll-ever-need-d969a47ef219 作者:vick_onrails 摘要:这...

    pakolagij 评论0 收藏0
  • nodejs微服务解决方案

    摘要:前言是一个微服务工具集,它赋予系统易于连续构建和更新的能力。这个对象既包含某个微服务所需要调取另一个微服务的特征,同时也包含传参。和微服务发现有些类似不过是用模式代替,目前为止模式是完全可以实现服务发现功能,但是否更加灵活还有待去挖掘。 前言 seneca是一个nodejs微服务工具集,它赋予系统易于连续构建和更新的能力。下面会逐一和大家一起了解相关技术入门以及实践。 这里插入一段硬广...

    canger 评论0 收藏0
  • 袋鼠云前端项目发布工具dtux-kangaroo

    摘要:每家公司在前端项目发布体系可能不尽相同,本篇文章仅仅介绍袋鼠云的前端发布体系,希望能对大家能有所启发。目前袋鼠云采用的是前后端分离的方式,但是开发中还是比较依赖后端的,接口数据还不是很完善。 前言 在目前的大趋势下,前端和后端解耦已经是一个业界的趋势。前端和后端一旦解耦之后,前端的项目和后端的项目便可以自己发布,互不影响。这样极大地提高工作效率,免去了很多互相等待的时间。每家公司在前端...

    yacheng 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<