博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Node.js查找可用端口
阅读量:4985 次
发布时间:2019-06-12

本文共 1691 字,大约阅读时间需要 5 分钟。

前段时间做一个Node.js应用时,需要分配一些端口,由于没什么时间细想,只是用一系列连续而且数字比较大的端口。

下来这段来自netutil的findFreePort以后可以一看。其本质上就是在一段区间随便找一个port,先试一把,行则OK,不行则再来.

var net = require("net");var exec = require("child_process").exec;exports.findFreePort = function(start, end, hostname, callback) {    var pivot = Math.floor(Math.random() * (end-start)) + start;    var port = pivot;    asyncRepeat(function(next, done) {        var stream = net.createConnection(port, hostname);        stream.on("connect", function() {            stream.destroy();            port++;            if (port > end)                port = start;            if (port == pivot)                done("Could not find free port.");            next();        });        stream.on("error", function() {            done();        });    }, function(err) {        callback(err, port);    });};exports.isPortOpen = function(hostname, port, timeout, callback) {    var stream = net.createConnection(port, hostname);    stream.on("connect", function() {        clearTimeout(id);        stream.destroy();        callback(true);    });    stream.on("error", function() {        clearTimeout(id);        stream.destroy();        callback(false);    });    var id = setTimeout(function() {        stream.destroy();        callback(false);    }, timeout || 1000);};exports.getHostName = function(callback) {    exec("hostname", function (error, stdout, stderr) {        if (error)            return callback(stderr);        callback(null, stdout.toString().split("\n")[0]);    });};function asyncRepeat(callback, onDone) {    callback(function() {        asyncRepeat(callback, onDone);    }, onDone);}

 

转载于:https://www.cnblogs.com/piaoger/archive/2013/01/07/2848494.html

你可能感兴趣的文章
final修饰的类有什么特点
查看>>
关于string类中find函数的讲解
查看>>
程序员的情书
查看>>
Spring Cloud Eureka 使用 IP 地址进行服务注册
查看>>
Python 包的制作(__init__.py)
查看>>
java内存模型优化建议
查看>>
三十、模块补充
查看>>
流程审批设计
查看>>
别装了,你根本就不想变成更好的人
查看>>
数据库 join
查看>>
AES加密工具类[亲测可用]
查看>>
方法区
查看>>
Django-----ORM
查看>>
ARCGIS部分刷新
查看>>
发 零 食
查看>>
poj3613:Cow Relays(倍增优化+矩阵乘法floyd+快速幂)
查看>>
洛谷P1886 滑动窗口
查看>>
Shell编程(二)Bash中调用Python
查看>>
主动与被动监控 拓扑图组合图 自定义监控
查看>>
SQL总结(一)基本查询
查看>>