首先,我是初学者,试图了解 Node.Js 是什么。我有两个问题。
第一个问题
来自Felix的文章,它说“只能同时触发一个回调。在该回调完成执行之前,所有其他回调都必须排队等待”。
然后,考虑以下代码(从nodejs官网复制)
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(8124, "127.0.0.1");
如果同时收到两个客户端请求,则表示如下工作流程:
- 收到第一个 http 请求事件,收到第二个请求事件。
- 一旦收到第一个事件,第一个事件的回调函数就会执行。
- 同时,第二个事件的回调函数必须等待。
我对吗?如果我是对的,如果在很短的时间内有数千个客户端请求, Node.js如何控制。
第二个问题
“事件循环”一词主要用于 Node.js 主题。我从http://www.wisegeek.com/what-is-an-event-loop.htm将“事件循环”理解为以下内容;
事件循环(或主循环)是程序中的一种结构,用于控制和调度初始事件之后的事件。
初始事件可以是任何东西,包括按下键盘上的按钮或单击程序上的按钮(在 Node.js 中,我认为初始事件将是 http 请求、数据库查询或 I/O 文件访问)。
这称为循环,不是因为事件循环并不断发生,而是因为循环为事件做准备、检查事件、分派事件并重新重复该过程。
我对第二段有冲突,尤其是“从头再来”这句话。我接受上述问题中的上述http.createServer代码绝对是“事件循环”,因为它反复监听 http 请求事件。
但是我不知道如何识别以下代码是事件驱动还是事件循环。除了 db 查询完成后触发的回调函数之外,它不会重复任何内容。
database.query("SELECT * FROM table", function(rows) {
var result = rows;
});
请让我听听你的意见和答案。