当没有新事件排队时,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循环文件知道循环必须在每个循环迭代开始时都存在,这意味着发生了更多事件,因此更多的回调被注册执行。
在这个例子中,注册了一个事件监听器,但是在处理单个事件之后程序退出,因为在下一次循环迭代之前没有更多事件被触发。
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服务器的例子中,什么使循环保持活动状态(active和ref'd句柄)?
在创建HTTP服务器时,将创建一个TCP套接字,该套接字由uv_tcp_t句柄支持。 由于套接字处于活动状态(侦听传入连接),因此循环将继续运行,直到您停止HTTP服务器。
定时器有点复杂,因为每个节点定时器都没有映射到uv_timer_t句柄,但原理相同。
链接地址: http://www.djcxy.com/p/52699.html上一篇: How does a node.js application keep running when no new events are queued up?