Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在侦听I/O事件时,什么使事件循环保持打开状态?_Node.js - Fatal编程技术网

Node.js 在侦听I/O事件时,什么使事件循环保持打开状态?

Node.js 在侦听I/O事件时,什么使事件循环保持打开状态?,node.js,Node.js,js指出,框架“在没有更多回调可执行时退出事件循环” 我在任何地方都没有清楚解释的是,在启动等待输入的I/O模块后,是什么使事件循环保持运行。例如,在这个规范的“Hello World”HTTP服务器示例中,Node.js继续无限期地侦听传入的HTTP请求: require('http').createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello

js指出,框架“在没有更多回调可执行时退出事件循环”

我在任何地方都没有清楚解释的是,在启动等待输入的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);

虽然总是有可能回调隐式
请求
事件处理程序,但在实际HTTP请求传入之前,不会处理任何事件。这是否意味着Node.js网站上的声明不完全正确?或者,这里是否有我遗漏的细微差别?

细微差别是,在“引擎盖下”也有回调

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

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

require('http').createServer().listen(8080);
这显示了几秒钟后关闭端口时发生的情况:

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

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

这基本上是我所期望的,但是对于传入连接的“幕后”处理真的使用回调吗?我只是把HTTP库的源代码挖掘回TCP C++包装器,我没有看到任何看起来像真正回调的东西。除了回调之外,事件循环是否还等待打开的资源句柄关闭?@ScottSB我认为在这种情况下,“回调”是一个令人困惑的术语,因为很容易认为这意味着JS回调函数,但事实并非如此。“I/O处理程序”可能更好。我认为一个刚刚打开的资源句柄不会阻止进程退出,只有当有一个活动的处理程序在使用该资源时。