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

时间:2015-04-08 14:07:04

标签: node.js libuv

我的问题是,即使没有新事件,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);

由于

编辑:我们从the libuv io loop doc知道循环必须在每次循环迭代开始时处于活动状态,这意味着发生了更多事件,因此注册了更多的回调来执行。

在此示例中,注册了一个事件侦听器,但程序在处理单个事件后退出,因为在下一次循环迭代之前不再触发任何事件。

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句柄)是什么?

1 个答案:

答案 0 :(得分:2)

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

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