如何知道节点中的`http.Server`实例是否已经在监听

时间:2015-10-22 16:35:52

标签: node.js

我有一个http服务器和一段代码,只有在服务器正在侦听时才需要运行。为此,我如此绑定"listening"事件:

server.on('listening', doSomething)

问题是我的服务器可能已经在监听,然后不会发出事件"listening",我的代码将无法运行...有没有办法知道服务器的状态?类似的东西:

if (server.isListening() === true) doSomething()
else server.on('listening', doSomething)

编辑我当然可以(正如在其他类似问题中所建议的那样)尝试连接到该端口,看看有人在听。但这并不能证明我使用的特定实例正在倾听。只是一些服务正在那里听。

2 个答案:

答案 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)