я использую следующий API в моей программе detrmine свободный порт и предоставить его приложения для запускаНайти свободный порт не используется для приложений - найти алгоритм
portscanner.findAPortNotInUse(3000, 65000, '127.0.0.1', function(error, port) {
console.log('AVAILABLE PORT AT: ' + port)
})
https://github.com/baalexander/node-portscanner
Этот свободный порт являются дается заявке на использование и работает нормально. Проблема заключается в том, что если я предоставляю свободный порт application A
, и приложение еще не занято (иногда требуется некоторое время ...), и наступает другое application B
и запрашивает свободный порт, чтобы он дал APP B порт приложения A Какая причина для проблемы ... Есть ли какой-нибудь элегантный способ решить эту проблему?
мое приложение не имеет состояния, поэтому он не может сохранить какие приложения получить какой порт ...
Существует решение, что мы можем рандомизации диапазон, но это не надежный ...
В мое приложение Im получает URL-адрес приложения, который должен предоставить свободный порт для запуска.
обновление
Я не могу использовать некоторые брокера или коснуться еще, что проверочные это снаружи, мне нужно найти какой-то алгоритм (возможно, с некоторыми смарт случайными), которые могут помочь мне сделать это внутренне т.е. моя программа как синглтон и мне нужно немного трюк, как дать порт между 50000 to 65000
который будет уменьшить количество столкновений порта, который был предоставлен для приложений
update 2
Я решил попробовать что-то вроде следующего, что вы думаете?
использование lodash https://lodash.com/docs/4.17.2#random для определения портов между петлями, которые обеспечивают 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);
Тогда если я ложна в порту есть все 3 порта заняты , запустить этот процесс еще раз для 3 других случайных предложений номер.com приветствуются !!! Я пытаюсь найти какой-то способ, чтобы избежать столкновений, насколько это возможно ...
держать порт приложение А открывается до тех пор, как приложение А не открыть его сам по себе. Или используйте брокерское обслуживание для более безопасного назначения порта. –
@ mh-cbon - 1. как вы можете привести пример? 2. если я изменил его, чтобы открыть, когда приложение A хочет его использовать, не будет ошибок/проблем? –
@RaynD, есть ли какая-то особая причина не позволять ОС назначать случайный номер порта во время вызова 'listen()' и порта отчета именно тогда? –