Прежде всего, я начинаю пытаться понять, что такое Node. У меня есть два вопроса.
Первый вопрос
Из статьи Феликса он сказал: "Одновременно может быть только один обратный вызов. Пока этот обратный вызов не завершит выполнение, все остальные обратные вызовы должны ждать в очереди".
Затем рассмотрим следующий код (скопированный с официального сайта 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 контролировать, если тысячи запросов клиентов находятся в очень короткой продолжительности.
Второй вопрос
Термин "Event Loop" в основном используется в теме Node.js. Я понял "Event Loop" следующим образом: http://www.wisegeek.com/what-is-an-event-loop.htm;
Цикл события - или основной цикл - это конструкция внутри программ, которые контролирует и отправляет события после начального события.
Первоначальное событие может быть любым, включая нажатие кнопки на клавиатуры или нажатием кнопки в программе (в Node.js, я думаю, что начальными событиями будут HTTP-запрос, запросы db или доступ к файлу ввода-вывода).
Это называется циклом, а не потому, что круги событий и происходят непрерывно, но поскольку цикл готовится к событию, проверяет событие, отправляет событие и снова повторяет процесс.
У меня конфликт со вторым абзацем, особенно фраза " повторяет процесс снова и снова". Я признал, что вышеупомянутый код http.createServer из приведенного выше вопроса является абсолютно "циклом событий", поскольку он многократно прослушивает события HTTP-запроса.
Но я не знаю, как идентифицировать следующий код как цикл событий или цикл события. Он не повторяет ничего, кроме функции обратного вызова, запущенной после завершения запроса db.
database.query("SELECT * FROM table", function(rows) {
var result = rows;
});
Пожалуйста, позвольте мне услышать ваши мнения и ответы.