2015-01-20 8 views
17

Mój projekt wymaga konfiguracji nowego portu za każdym razem, gdy instancja mojej klasy jest instancjonowana.Nodejs losowe darmowe porty tcp

W Node.js, w jaki sposób mogę znaleźć wolny port TCP do ustawienia na moim nowym serwerze gniazd? Lub sprawdź, czy mój określony port jest już używany, czy nie.

Odpowiedz

28

można powiązać do losowej, wolnego portu wyznaczonego przez OS, określając 0 dla portu. W ten sposób nie podlegasz warunkom wyścigu (na przykład sprawdzaniu otwartego portu i procesowi wiążącemu się z nim przed uzyskaniem szansy na jego powiązanie).

Następnie można uzyskać przypisany port, dzwoniąc pod numer server.address().port.

Przykład:

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); 
}); 
+0

jest to dobra odpowiedź, ale w tym przypadku testu port jeśli jest dostępny Jestem muszą użyciem try/catch i ponownie, nie? – Kefka

+0

Jeśli chcesz określonego portu, po prostu spróbuj go odsłuchać i sprawdź, czy nie wystąpił błąd. Jeśli pojawi się błąd i 'error.code === 'EADDRINUSE'', wówczas wiesz, że port jest w użyciu. – mscdex

+0

tak, to dobra aplikacja, ale próba jest nudna:/W moim przypadku użyję mojej odpowiedzi, ale twoja odpowiedź jest o wiele lepsza dla innych rzeczy = D – Kefka

1

Aby znaleźć otwarty port TCP może użyć modułu portastic

można znaleźć port tak:

port = require('portastic'); 

options = { 
    min : 8000, 
    max : 8005 
} 

port.find(options, function(err, data){ 
    if(err) 
     throw err; 
    console.log(data); 
});