Node.js 如何知道节点中'http.Server'的实例是否已在侦听
我有一个http服务器和一段代码,只有在服务器侦听时才需要运行。为此,我将绑定到Node.js 如何知道节点中'http.Server'的实例是否已在侦听,node.js,Node.js,我有一个http服务器和一段代码,只有在服务器侦听时才需要运行。为此,我将绑定到“侦听”事件,如下所示: server.on('listening', doSomething) 问题是,我的服务器可能已经在侦听,然后事件“侦听”将不会发出,我的代码也不会运行。。。有没有办法知道服务器的状态?比如: if (server.isListening() === true) doSomething() else server.on('listening', doSomething) 编辑我当然可以(
“侦听”
事件,如下所示:
server.on('listening', doSomething)
问题是,我的服务器可能已经在侦听,然后事件“侦听”
将不会发出,我的代码也不会运行。。。有没有办法知道服务器的状态?比如:
if (server.isListening() === true) doSomething()
else server.on('listening', doSomething)
编辑我当然可以(如另一个类似问题中所建议的)尝试连接到该端口,看看是否有人在听。但这并不能证明我正在使用的特定实例是监听。只有某些服务正在侦听。当使用
http.createServer的实例时,该函数可用于服务器实例。这表示实际服务器是否正在侦听和可用
在服务器实例上调用listen()
之前,address()
返回一个null
,因为实例本身还没有它正在侦听的地址
一旦调用了listen()
,address()
将返回一个对象
例子
总结
如果server.address()
为null
,则您的实例未运行。
如果server.address()
if (server.listening) { # }
是的可能重复项。。。非常接近,但不完全令人满意(见编辑)从我所知的一点点,这是你将得到的最接近。。节点似乎没有提供检查它的方法。我将关注您是否能得到更好的答案,这是一个有趣的问题,我假设http.Server
维护一些内部状态。。。所以我想知道为什么它没有公开…请考虑接受服务器。听回答,现在它更相关了不,我不想启动服务器。程序的另一部分处理这个问题。这另一部分可能在之前或之后运行,我无法预先知道…尽管我也可以重构其余的代码,以便始终调用侦听
。。。希望多个侦听调用不会影响内容。如果您存储了从服务器返回的对象。listen()
在处理服务器启动的实际代码部分,您可以检查该对象是否未定义。因此,在我的示例中,如果listenInfo
有一个值,那么我的服务器的一个实例确实正在运行。这可以满足您的问题。您的意思是,当服务器已经在侦听时,返回的值是否不同?虽然这并不能真正解决我的问题。。。如果您的服务器未在侦听,server.address()
的值为null
,如果您的服务器正在侦听,server.address()
将包含主机名/ip、ip协议和对象内的端口,那么我仍然需要调用listen
来获取返回值。因此,您确实可以检查您的服务器实例是否正在侦听。直到调用listen()
,address()
为空。看看这些,这应该是现代世界公认的答案
if (server.listening) { # }