在nodejs中,我该如何检查一个端口正在侦听还是正在使用

我会在这里非常具体,希望了解这一点的人们可以编辑来改写一般情况。

目前,当你运行“节点debugging”,它产生一个进程监听端口5858.然后在父,试图连接到该端口。

但是,如果您正在运行另一个“节点debugging”会话,则当前“节点debugging”挂起,因为该端口正在使用中。

具体来说,你看到的消息是:

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

更好的办法是检测端口正在使用中(没有连接到它可能会混淆正试图连接现有debugging器的另一个客户端)。

编辑:接受的解决scheme现在在trepanjs 。

另请参阅节点JS – 如何通过Einaros WS套接字模块打开套接字?

以下是我使用的一个变种:

 var net = require('net'); var portInUse = function(port, callback) { var server = net.createServer(function(socket) { socket.write('Echo server\r\n'); socket.pipe(socket); }); server.listen(port, '127.0.0.1'); server.on('error', function (e) { callback(true); }); server.on('listening', function (e) { server.close(); callback(false); }); }; portInUse(5858, function(returnValue) { console.log(returnValue); }); 

您应该可以使用node-netstat模块来检测正在侦听的端口。 不幸的是,它似乎只支持Windows和Linux。 但是,支持OS X所需的更改看起来并不是很大。 更新:它现在支持OS X …呃MacOS …呃他们现在调用它。