如何知道如果实例的http.服务器内节点已经在监听

How to know if instance of `http.Server` in node is already listening

本文关键字:节点 监听 服务器 如果 何知道 实例 http      更新时间:2023-09-26

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

server.on('listening', doSomething)

事情是,我的服务器可能已经在监听,然后事件"listening"不会发出,我的代码不会运行…有办法知道服务器的状态吗?例如:

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

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

简单

if (server.listening) { # }

https://nodejs.org/api/net.html net_server_listening

精化

  • 。服务器有一个listening属性,表示是否服务器正在监听
  • http。服务器继承net。服务器

当使用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()返回一个对象,你的实例正在运行。