Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何知道节点中'http.Server'的实例是否已在侦听_Node.js - Fatal编程技术网

Node.js 如何知道节点中'http.Server'的实例是否已在侦听

Node.js 如何知道节点中'http.Server'的实例是否已在侦听,node.js,Node.js,我有一个http服务器和一段代码,只有在服务器侦听时才需要运行。为此,我将绑定到“侦听”事件,如下所示: server.on('listening', doSomething) 问题是,我的服务器可能已经在侦听,然后事件“侦听”将不会发出,我的代码也不会运行。。。有没有办法知道服务器的状态?比如: if (server.isListening() === true) doSomething() else server.on('listening', doSomething) 编辑我当然可以(

我有一个http服务器和一段代码,只有在服务器侦听时才需要运行。为此,我将绑定到
“侦听”
事件,如下所示:

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) { # }