Случайные бесплатные tcp-порты Nodejs

17

Мой проект должен настроить новый порт каждый раз, когда создается экземпляр нового экземпляра моего класса.

В Node.js, как я могу найти свободный порт TCP для установки на моем новом сервере сокетов? Или проверьте, установлен ли мой указанный порт или нет.

    
задан Kefka 20.01.2015 в 17:17
источник

2 ответа

29

Вы можете привязать к произвольному свободному порту, назначенному ОС, указав 0 для порта. Таким образом, вы не подвергаетесь условиям гонки (например, проверяете наличие открытого порта и привязку к нему какого-либо процесса, прежде чем сможете получить привязку к нему).

Затем вы можете получить назначенный порт, вызвав server.address().port .

Пример:

var net = require('net');

var srv = net.createServer(function(sock) {
  sock.end('Hello world\n');
});
srv.listen(0, function() {
  console.log('Listening on port ' + srv.address().port);
});
    
ответ дан mscdex 20.01.2015 в 17:28
  • это хороший ответ, но в этом случае для тестирования порт, если он доступен, мне нужно использовать try / catch и повторить попытку, нет? –  Kefka 21.01.2015 в 18:24
  • Если вам нужен конкретный порт, попробуйте прослушать его и проверьте наличие ошибки. Если вы получите сообщение об ошибке и error.code === 'EADDRINUSE', то вы знаете, что порт используется. –  mscdex 21.01.2015 в 19:00
  • да, его хороший подход, но повторение скучно: / В моем случае я буду использовать свой ответ, но ваш ответ намного лучше для других вещей = D –  Kefka 22.01.2015 в 17:47
1

Чтобы найти открытый порт TCP, вы можете использовать модуль portastic

Вы можете найти такой порт:

port = require('portastic');

options = {
    min : 8000,
    max : 8005
}

port.find(options, function(err, data){
    if(err)
        throw err;
    console.log(data);
});
    
ответ дан Kefka 20.01.2015 в 17:22