我有一个http服务器和一段代码,只有在服务器正在侦听时才需要运行。为此,我如此绑定"listening"
事件:
server.on('listening', doSomething)
问题是我的服务器可能已经在监听,然后不会发出事件"listening"
,我的代码将无法运行...有没有办法知道服务器的状态?类似的东西:
if (server.isListening() === true) doSomething()
else server.on('listening', doSomething)
编辑我当然可以(正如在其他类似问题中所建议的那样)尝试连接到该端口,看看有人在听。但这并不能证明我使用的特定实例正在倾听。只是一些服务正在那里听。
答案 0 :(得分:6)
使用http.createServer
的实例时,address()
函数可用于服务器实例。这表示实际服务器是否正在侦听和可用。
在服务器实例listen()
上调用address()
之前,返回null
,因为实例本身还没有正在侦听的地址。
调用listen()
后,address()
将返回一个对象。
var http = require('http');
var server = http.createServer();
console.log(server.address()); // This will be null because listen() hasn't been called yet
server.listen(3000, 'localhost', function() {
console.log('listening');
});
console.log(server.address()); // { address: '127.0.0.1', family: 'IPv4', port: 3000 }
如果server.address()
为null
,则您的实例未运行
如果server.address()
返回一个对象,那么您的实例正在运行。
答案 1 :(得分:2)
简单
if (server.listening) { # }
https://nodejs.org/dist/latest-v6.x/docs/api/net.html#net_server_listening