2015-04-25 11 views
5

Sarò molto specifico qui nella speranza che le persone che lo capiscono possano modificare per riformulare la situazione generale.In nodejs, come posso controllare se una porta è in ascolto o in uso

Attualmente quando si esegue "debug del nodo", viene generato un processo da ascoltare sulla porta 5858. Quindi nel genitore, viene tentata una connessione a tale porta.

Tuttavia, se si sta eseguendo un'altra sessione "nodo debug", al momento "il debug del nodo" si blocca perché quella porta è in uso.

In particolare il messaggio che vedete è:

$ node debug example/gcd.js 3 5 
< debugger listening on port 5858 > 
connecting... 

Meglio sarebbe per di rilevare che la porta è in uso (senza un collegamento ad esso, che rovinare un altro client che sta tentando di connettersi quella esistente potrebbe debugger).

Modifica: La soluzione accettata è ora in trepanjs.

Vedi anche Node JS - How Can You Tell If A Socket Is Already Open With The Einaros WS Socket Module?

+0

Si può cercare e ascoltare sul porto e vedere se si ottiene un errore 'EADDRINUSE'. – robertklep

+0

@robertklep mentre questa è l'idea giusta, cercavo codice specifico. – rocky

risposta

8

Una variazione sul seguente è quello che ho usato:

var net = require('net'); 
 

 
var portInUse = function(port, callback) { 
 
    var server = net.createServer(function(socket) { 
 
\t socket.write('Echo server\r\n'); 
 
\t socket.pipe(socket); 
 
    }); 
 

 
    server.listen(port, '127.0.0.1'); 
 
    server.on('error', function (e) { 
 
\t callback(true); 
 
    }); 
 
    server.on('listening', function (e) { 
 
\t server.close(); 
 
\t callback(false); 
 
    }); 
 
}; 
 

 
portInUse(5858, function(returnValue) { 
 
    console.log(returnValue); 
 
});

L'attuale commettere che è un po 'più coinvolto è https://github.com/rocky/trepanjs/commit/f219410d72aba8cd4e91f31fea92a5a09c1d78f8

2

Si dovrebbe essere in grado di utilizzare il node-netstat module per rilevare le porte che vengono ascoltati. Sfortunatamente, sembra che supporti solo Windows e Linux, così come sono. Tuttavia, le modifiche necessarie per supportare OS X non sembrano essere eccessivamente grandi. AGGIORNAMENTO: ora supporta OS X ... er macOS ... er come lo chiamano ora.

+0

Grazie per la spina. Sono l'autore di 'node-netstat' e volevo solo dire che ha il supporto per OS X. – doogle

+1

Grazie per le informazioni. Ho aggiornato la risposta. – Trott

Problemi correlati