いわゆるLAMPスタックのように、1リクエストに1プロセスとか1スレッドを使うアーキテクチャの場合は簡単なんですよ。
プロセスやスレッドをぬっころすだけで全部終わるので。
Node.jsはシングルプロセス・シングルスレッドのイベント駆動だからいろんなリクエストのイベントハンドラやコールバック関数が混在(呼び出し待ち)しているわけで、その場合にうまく該当リクエストの関連イベントだけぬっころしているのかな、と。
準備
まずは簡単なWebサーバをつくってみる。var http = require("http");
http.createServer(function(request, response) {
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.end("( ಠ_ಠ)");
}).listen(3000);
そしてこれを5秒後に応答するように改造。
var http = require("http");
http.createServer(function(request, response) {
    console.log("begin");
    // 5秒後に応答 
    setTimeout(function() {
        response.writeHead(200, {"Content-Type": "text/plain"});
        response.end("( ಠ_ಠ)");
        console.log("end");
    }, 5000);
}).listen(3000);
これを実行して、http://127.0.0.1:3000/にアクセス。5秒後にブラウザに顔文字が表示されるのを確認。そしてコンソール上では、アクセスしたときに"begin"、5秒後に"end"が表示されるのを確認。
手順
はい、ここからが本番です。http://127.0.0.1:3000/にアクセスして、5秒経過する前に(ブラウザに顔文字が表示される前に)ブラウザを閉じたとき、コンソールの表示はどうなるのでしょうか。
ここから先はキミ自身の目で確かめてくれ! 
 
0 件のコメント:
コメントを投稿