2015-04-25 40 views
5

在這裏我將非常具體,希望瞭解這一點的人們可以編輯以改寫爲一般情況。在nodejs中,如何檢查某個端口是正在偵聽還是正在使用

當前當您運行「節點調試」時,它產生一個進程來偵聽端口5858.然後在父進程中,嘗試連接到該端口。

但是,如果您正在運行另一個「節點調試」會話,則當前「節點調試」掛起,因爲該端口正在使用中。

具體來說,你看到的信息是:

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

更好的將是它檢測到端口正在使用(沒有連接到它可能搞砸了客戶端試圖連接現有的調試器)。

編輯:接受的解決方案現在在trepanjs

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

+0

你可以嘗試和監聽端口和看看你是否收到'EADDRINUSE'錯誤。 – robertklep

+0

@robertklep雖然這是正確的想法,我一直在尋找特定的代碼。 – rocky

回答

8

以下的變化是我用什麼:

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

的實際承諾這是一個涉及多一點是https://github.com/rocky/trepanjs/commit/f219410d72aba8cd4e91f31fea92a5a09c1d78f8

2

見你應該能夠使用node-netstat module檢測正在收聽的端口。 不幸的是,它似乎只支持Windows和Linux。但是,支持OS X所需的更改看起來並不是很大。 更新:它現在支持OS X ...呃macOS ...呃他們現在調用它。

+0

感謝您的插件。我是'node-netstat'的作者,並且只想提到它具有OS X支持。 – doogle

+1

感謝您的信息。我已經更新了答案。 – Trott

相關問題