找到不用于应用程序的免费端口 - 找到一些算法

5 javascript random algorithm port node.js

我在我的程序中使用以下API来取消自由端口并将其提供给应用程序来运行

portscanner.findAPortNotInUse(3000, 65000, '127.0.0.1', function(error, port) {
  console.log('AVAILABLE PORT AT: ' + port)
})
Run Code Online (Sandbox Code Playgroud)

https://github.com/baalexander/node-portscanner

这个自由端口被提供给应用程序使用和工作正常.问题是,如果我提供一个空闲端口,application A并且应用程序尚未占用它(有时需要一些时间......)并且还有其他application B请求一个空闲端口,所以它给APP B端口app A 导致问题的原因......有没有优雅的解决方法?

我的应用程序没有状态所以它无法保存到哪个应用程序获取哪个端口...

有一个解决方案,我们可以随机化范围,但这不健壮...

在我的应用程序中我得到应该提供自由端口运行的应用程序的URL.

更新

不能使用一些经纪人或其他会控制这个外部我需要找到一些算法(可能有一些智能随机),可以帮助我在内部做它,即我的程序就像单身,我需要一些技巧如何给端口之间50000 to 65000这将减少提供给应用程序的端口的冲突量

更新2

我决定尝试下面这样的事情你觉得怎么样?

使用lodash https://lodash.com/docs/4.17.2#random来确定with循环之间的端口,这些循环为下列范围提供3个(或更多,如果有意义)数字

portscanner.findAPortNotInUse([50001, 60000, 600010], '127.0.0.1', function(err, port) {
    if(err) {
        console.log("error!!!-> " +err);
    }else {
        console.log('Port Not in Use ' + port);
    }

//using that in a loop 
var aa = _.random(50000, 65000); 
Run Code Online (Sandbox Code Playgroud)

然后,如果我在端口错误,即所有3个端口都被占用,再次运行此过程3个其他随机number.comments建议欢迎! 我尽量找到一些避免碰撞的方法 ......

cla*_*lay 0

当管理多个应用程序或多个服务器时,其中一个必须第一次就正确(无需重试),您需要单一的事实来源。同一台机器上的应用程序可以与数据库、代理服务器甚至文件通信,只要资源是“可锁定的”。(服务器以类似的方式工作,但不使用本地文件)。

所以你的流程会是这样的:

  1. 应用程序 A 向服务发送请求以请求锁定。
  2. 确认锁定后,启动端口扫描器
  3. 当端口被使用时,释放锁定。

同样,这可能是您编写的“PortService”,用于分发未使用的端口,或者是对某些共享资源的简单锁定,以便两个事物同时获取相同的端口。

希望您能找到适合您的应用程序的东西。