nodejs获取一个可用的端口,检查端口是否被占用(完美方案)

nodejs检查端口是否被占用,先看个运行效果:
E:\wamp64\www\tmpPro\tryuseport>node t.js
端口:8022被占用
端口:8023被占用
端口:8024可用
没错,它会一直递归检测端口是否可用,直到可用。
代码:
const net = require('net');
const tryUsePort = async function(port, portAvailableCallback){
    function portUsed(port){
        return new Promise((resolve, reject)=>{
            let server = net.createServer().listen(port);
            server.on('listening',function(){
                server.close();
                resolve(port);
            });
            server.on('error',function(err){
                if(err.code == 'EADDRINUSE'){
                    resolve(err);
                }
            });
        });
    }
    let res = await portUsed(port);
    if(res instanceof Error){
        console.log(`端口:${port}被占用\n`);
        port++;
        tryUsePort(port, portAvailableCallback);
    }else{
        portAvailableCallback(port);
    }
}
// 测试
tryUsePort(8022 ,function(port){
    // do something ...
    console.log(`端口:${port}可用\n`);
});
参考:
Node.js内部是如何捕获异步错误的 https://zhuanlan.zhihu.com/p/62210238
nodejs获取一个可用的端口,检查端口是否被占用(完美方案)的更多相关文章
- scrapy实战9动态设置ip代理从数据库中随机获取一个可用的ip:
		
在目录下创建tools(python package) 在tools中创建crawl_xici_ip.py文件写入代码如下: #coding=utf-8 import requests from sc ...
 - C# 获取随机可用端口号
		
TCP与UDP段结构中端口地址都是16比特,可以有在0---65535范围内的端口号.对于这65536个端口号有以下的使用规定: (1)端口号小于256的定义为常用端口,服务器一般都是通过常用端口号来 ...
 - 怎样在linux或者Unix上检查端口是否在使用
		
英文原文链接:https://www.cyberciti.biz/faq/unix-linux-check-if-port-is-in-use-command/ Question 1: 怎样在lin ...
 - 如何按名称或PID查找一个进程?如何按端口号查找一个进程?如何查看一个进程的CPU和内存、文件句柄使用情况?如何查看CPU利用率高的TOP10进程清单?如何根据PID强制终止进程?
		
如何按名称或PID查找一个进程?如何按端口号查找一个进程?如何查看一个进程的CPU和内存.文件句柄使用情况?如何查看CPU利用率高的TOP10进程清单? 目录 如何按名称或PID查找一个进程?如何按端 ...
 - 记录一次MVC 3.0错误 HTTP 404您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用。请检查以下 URL 并确保其拼写正确。
		
在部署到IIS7时,MVC3报了一个找不到资源的错误,文件肯定是有的,而且页面是肯定报错的,也就说内部运行错误了,而MVC把错误没有抛出来而已: 所以对症下药,发觉我的项目里面用了rexs进行多语言, ...
 - PortMon(电脑开放端口检查工具) 3.03 免费绿色版
		
软件名称: PortMon(电脑开放端口检查工具) 3.03 免费绿色版 软件语言: 英文 授权方式: 免费软件 运行环境: Win7 / Vista / Win2003 / WinXP / Win2 ...
 - 一个服务器的IIS只能绑定一个HTTPS也就是443端口
		
默认情况一个服务器的IIS只能绑定一个HTTPS也就是443端口 要实现多个站点对应HTTPS只能更改IIS配置 地址:C:\Windows\System32\inetsrv\config\appli ...
 - MVC 3.0错误  HTTP 404您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用。请检查以下 URL 并确保其拼写正确。
		
MVC3.0框架开发项目: 有时在程序运行的时候会出现“HTTP 404.您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用.请检查以下 URL 并确保其拼写正确.”的错 ...
 - 利用 nodeJS 搭建一个简单的Web服务器(转)
		
下面的代码演示如何利用 nodeJS 搭建一个简单的Web服务器: 1. 文件 WebServer.js: //-------------------------------------------- ...
 - linux查看端口及端口详解
		
今天现场查看了TCP端口的占用情况,如下图 红色部分是IP,现场那边问我是不是我的程序占用了tcp的链接,,我远程登陆现场查看了一下,这种类型的tcp链接占用了400多个,,后边查了一下资料,说E ...
 
随机推荐
- MySQL SQL调优之索引
			
本篇记录MySQL的索引知识学习笔记,也方便自己以后查找复习 一.索引的概念MySQL官方给出的索引定义:索引(Index)是帮助MySQL高效获取数据的数据结构.所以说索引就是排好序的快速查找数据结 ...
 - verilog 编写猫狗过河实验
			
源代码地址:https://github.com/penggeon/catanddog 效果演示见: https://www.bilibili.com/video/BV1n24y147S1 警告: 仅 ...
 - 帮您了解CDN节点如何做到访问加速与安全防护
			
本文分享自天翼云开发者社区<帮您了解CDN节点如何做到访问加速与安全防护>,作者:尹****荷 网站业务痛点 在当前网站快速发展的背景下,网站业务突增往往伴随着一系列网络安全隐患.主要会有 ...
 - Calcite 获取jdbc连接流程
			
一.类调用 简介:calcite可以连接各数据源,做查询.可以收口查询权限,查询多引擎需求 二. 获取Connection发送的请求 请求介绍文档:https://calcite.apache.org ...
 - jenkins+svn+tomcat
			
1.安装插件即可在源码管理中看见svn的选项subversion2.源码管理中配置svn的工程地址 3.点击Credentials的[添加]配置svn的用户名密码,完成后选取即可 4.配置构建触发器, ...
 - .NET Core 托管堆内存泄露/CPU异常的常见思路
			
常见的思路 内存泄露 托管内存暴涨大多数原因都是因为对象被GC Root(stack,gchandle,finalizequeue)持有,所以一直无法释放,所以观察的重点都在对象的可疑GC Root ...
 - linux报错-bash: ./xx.sh: Permission denied
			
linux报错-bash: ./xx.sh: Permission denied 在linux下执行sh文件时提示:-bash: ./xx.sh: Permission denied 进行授权:chm ...
 - MybatisPlus - [04] 分页
			
limit m,n.PageHelper.MyBatisPlus分页插件 001 || MybatisPlus分页插件 (1)引入maven依赖 <dependency> <grou ...
 - AngleSharp :在 C# 中轻松解析和操作 HTML/XML 文档
			
AngleSharp 是一个 C# 库,主要用于解析和操作 HTML 和 XML 文档,类似于浏览器的 DOM 操作.允许你在 C# 中使用类似浏览器的方式处理网页数据,进行网页抓取.数据提取和处理等 ...
 - Flink学习(三) 批流版本的wordcount Scala版本
			
批处理代码: package com.wyh.wc import org.apache.flink.api.scala._ /** * 批处理代码 */ object WordCount { def ...