まず第一に、私は Node.Js とは何かを理解しようとしているスターターです。2 つの質問があります。
最初の質問Felix の記事
によると、
「同時に起動できるコールバックは 1 つだけです。そのコールバックの実行が完了するまで、他のすべてのコールバックは順番に待機する必要があります」。
次に、次のコードについて検討します(nodejs公式Webサイトからコピー)
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");
2 つのクライアント要求が同時に受信された場合、次のワークフローを意味します。
- 最初の http 要求イベントを受信し、2 番目の要求イベントを受信しました。
- 最初のイベントが受信されるとすぐに、最初のイベントのコールバック関数が実行されます。
- その間、2 番目のイベントのコールバック関数が待機する必要があります。
私は正しいですか?私が正しければ、非常に短い時間内に何千ものクライアント リクエストがある場合、 Node.jsがどのように制御するかということです。
2 番目の質問
「イベント ループ」という用語は、主に Node.js トピックで使用されます。http://www.wisegeek.com/what-is-an-event-loop.htmから「イベントループ」を次のように理解しました。
イベント ループ (またはメイン ループ) は、初期イベントに続くイベントを制御およびディスパッチするプログラム内の構造です。
初期イベントは、キーボードのボタンを押す、プログラムのボタンをクリックするなど、何でもかまいません (Node.js では、初期イベントは http 要求、db クエリ、または I/O ファイル アクセスになると思います)。
これがループと呼ばれるのは、イベントが循環して継続的に発生するためではなく、ループがイベントの準備、イベントのチェック、イベントのディスパッチ、プロセスの最初からやり直しを繰り返すためです。
2番目の段落、特に「プロセスをもう一度繰り返す」というフレーズについて矛盾があります。上記の質問からの上記のhttp.createServerコードは、http 要求イベントを繰り返しリッスンするため、完全に「イベント ループ」であることを受け入れました。
しかし、次のコードをイベント ドリブンかイベント ループかを識別する方法がわかりません。db query が終了した後に起動されるコールバック関数以外は何も繰り返されません。
database.query("SELECT * FROM table", function(rows) {
var result = rows;
});
よろしければ、ご意見とご回答を聞かせてください。