如何知道节点中的http.Server实例是否已经在监听
我有一个http服务器和一段代码,只有当服务器正在侦听时才需要运行。 为此,我对"listening"
事件具有约束力,如下所示:
server.on('listening', doSomething)
事情是,我的服务器可能已经在侦听,然后事件"listening"
将不会被发射,我的代码将不会运行…有没有办法知道服务器的状态? 就像是 :
if (server.isListening() === true) doSomething() else server.on('listening', doSomething)
编辑我当然可以(如在其他类似的问题build议)尝试连接到该端口,看看有人在听。 但是这并不能certificate我正在使用的特定实例正在聆听。 只是有一些服务正在那里倾听。
当使用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()
返回一个对象,你的实例正在运行。
简单
if (server.listening) { # }
https://nodejs.org/dist/latest-v6.x/docs/api/net.html#net_server_listening