node.js - 监听 I/O 事件时是什么让事件循环保持打开状态?

标签 node.js

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/

相关文章:

javascript - Node.js dom apis - jsdom、cheerio - 我可以使用 JS 命令还是需要使用 jQuery?

node.js - Node Buffer.lastIndexOf byteOffset 如何工作?

javascript - Account.create 用户回调在 meteor js 中不起作用

javascript - 对象从服务器发送到客户端时JS原型(prototype)方法消失

node.js - ElasticBeanstalk 上的 Meteor 部署失败

node.js - 如何在模型的属性方法中正确使用水线 promise ?

javascript - 将文档数组插入模型中

node.js - 将 n8n 部署到 Heroku

node.js - Node JS。 Child_process.spawn。处理进程的输入提示

node.js - Firebase 存储 : Image file types not showing after upload. 如何使用该镜像?