2015-01-20 14 views
17

Il mio progetto deve impostare una nuova porta ogni volta che viene istanziata una nuova istanza della mia classe.Porte tcp Nodejs random free

In Node.js come posso trovare una porta TCP libera da impostare nel mio nuovo server socket? O controlla se la mia porta specificata è già utilizzata o meno.

risposta

28

è possibile associare ad un caso, porto franco assegnato dal sistema operativo, specificando 0 per la porta. In questo modo non sei soggetto a condizioni di gara (ad esempio, verifica che una porta aperta e alcuni processi si leghino ad essa prima che tu abbia la possibilità di legarla).

Quindi è possibile ottenere la porta assegnata chiamando server.address().port.

Esempio:

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

questa è una buona risposta, ma in questo caso per la prova di una porta, se è disponibile sto bisogno di utilizzare un try/catch e riprovare, no? – Kefka

+0

Se si desidera una porta specifica, basta provare ad ascoltarla e verificare l'evento di errore. Se ricevi un errore e 'error.code === 'EADDRINUSE'' allora sai che la porta è in uso. – mscdex

+0

sì, è un buon approccio, ma il tentativo è noioso:/Nel mio caso userò la mia risposta, ma la tua risposta è molto meglio per altre cose = D – Kefka

1

Per trovare una porta aperta del TCP è possibile utilizzare il modulo portastic

È possibile trovare una porta come questo:

port = require('portastic'); 

options = { 
    min : 8000, 
    max : 8005 
} 

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