什么在监听I / O事件时保持事件循环打开?

时间:2015-12-03 20:50:51

标签: node.js

Node.js的website says框架"当没有更多的回调要执行时退出事件循环。"

我发现在任何地方都清楚解释的是,一旦启动等待输入的I / O模块,事件循环就会继续运行。例如,在这个规范的“Hello World"在HTTP服务器示例中,Node.js继续无限期地侦听传入的HTTP请求:

 string input = "t1326".Replace("t", "").PadLeft(4, '0');

 string pattern = "HHmm";
 DateTime dt;

 DateTime.TryParseExact(input, pattern, null, 
     DateTimeStyles.None, out dt);
 Console.WriteLine(dt.ToString("h:mm tt")); //outputs 1:26 PM

 string reverse = String.Format("t{0}",dt.ToString("HHmm"));
 Console.WriteLine(reverse); //outputs t1326

虽然对于隐式require('http').createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello World\n'); }).listen(8080); 事件处理程序的回调总是存在 potential ,但在实际的HTTP请求进入之前,没有事件被处理。这是否意味着Node.js网站上的声明并非严格正确?或者我在这里有一些细微差别?

1 个答案:

答案 0 :(得分:0)

细微差别在于引擎盖下的回调"同样。

在这种情况下,HTTP服务器正在等待TCP端口上的传入连接,并且在该端口显式关闭(server.close())之前,这会添加到挂起的回调列表中。

您甚至不必定义请求处理程序来证明这一点:

require('http').createServer().listen(8080);

这显示了几秒钟后关闭端口时会发生什么:

var server = require('http').createServer().listen(8080);

setTimeout(function() {
  server.close();
}, 2000);