没有新的事件排队时,node.js应用程序如何继续运行?

我的问题是,即使没有新的事件存在,node.js应用程序如何像http服务器一样继续运行?

我认为当没有新的事件排队时,libuv事件循环终止。

事件监听器注册事件是不是有点像while(true){}循环?

这是我的问题的一个简单的代码示例:

var http = require("http"); var server = http.createServer(function(request, response) { response.write("Hello World!"); response.end(); }); server.listen(8080); 

谢谢

编辑:我们从libuv io循环文件知道循环必须在每个循环迭代的开始活着,这意味着更多的事件发生,因此更多的callback被注册执行。

在这个例子中,注册了一个事件监听器,但是在单个事件被处理之后程序退出,因为在下一次循环迭代之前没有更多的事件被触发。

 var EventEmitter = require('events').EventEmitter; eventEmitter.on('event1', function() { console.log('event1 has occured'); }); eventEmitter.emit('event1'); 

但是在这个例子中,程序由于激活的定时器而无限期地继续。

 setTimeout(function() { console.log('setTimeout callback occured'); }, 2000); 

那么在http服务器的例子中,循环是否保持活动状态(活动和ref'd句柄)呢?

在创buildHTTP服务器时,将创build一个TCP套接字,该套接字由uv_tcp_t句柄支持。 由于套接字处于活动状态(侦听传入连接),因此循环将继续运行,直到您停止HTTP服务器。

定时器有点复杂,因为每个节点定时器不映射到uv_timer_t句柄,但原理是相同的。