Nodeのイベントループ

サーバサイドJavaScript Node.js入門 を年末に一読したのでまとめ。

Nodeのイベントループの概要

f:id:takaheraw:20130102201228p:plain

HTTPサーバのイベントループ

f:id:takaheraw:20130102205109p:plain

メインモジュールが読み込まれると、2.のステップでserver.listen(1337)までの初期スクリプトが実行される。3.のステップでクライアントから送られてくるネットワークデータを受信するI/Oイベントを待ち受ける。
クライアントからのHTTPリクエストによってネットワークデータを受信すると、I/Oイベントが発生し登録されたコールバックが実行される。 クライアントからのデータ受信が完了し、データ操作HTTPリクエストヘッダの解析が終了するとrequestイベントが発生し、HTTPレスポンスデータがクライアントに送信される。

非同期イベントの生成

f:id:takaheraw:20130102211353p:plain

process.nextTic()を使用してイベントを発生させると、必ずJavaScriptの実行がすべて完了した後にイベントがemittされる。

非同期コールバック

f:id:takaheraw:20130102212723p:plain

process.nextTick()のコールバック実行でcbが呼び出されるときは、すでにコンストラクタによるオブジェクトの生成が終わった後なのでfoo.setbazメソッドが実行することだできる。