Node.js 的 website says该框架“当没有更多回调要执行时退出事件循环。”
我在任何地方都没有找到明确解释的是,一旦启动等待输入的 I/O 模块,事件循环就会保持运行。例如,在这个规范的“Hello World”HTTP 服务器示例中,Node.js 继续无限期地监听传入的 HTTP 请求:
require('http').createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello World\n');
}).listen(8080);
虽然总是有可能回调隐式 request
事件处理程序,但在实际的 HTTP 请求到来之前,不会处理任何事件。这是否意味着 Node.js 网站上的声明并不完全正确?还是我遗漏了一些细微差别?
最佳答案
细微差别在于“幕后”也有回调。
在这种情况下,HTTP 服务器正在等待 TCP 端口上的传入连接,并且在该端口显式关闭 (server.close()
) 之前,这会添加到待处理回调列表中.
您甚至不必定义请求处理程序来演示这一点:
require('http').createServer().listen(8080);
这显示了几秒钟后关闭端口时会发生什么:
var server = require('http').createServer().listen(8080);
setTimeout(function() {
server.close();
}, 2000);
关于node.js - 监听 I/O 事件时是什么让事件循环保持打开状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34075873/