3

サーバーユーザーが2秒後に電話をかけなかった場合に応答netを送信する、モジュール(宿題の割り当て)に基づく小さな動的HTTPサーバーを作成しています。408response.end()

何を試しても、関数は呼び出されません。これが私のプログラムでやろうとしたことを示す別のコードです:

var NET = require("net"); 
var server = NET.createServer(function(socket){
    console.log("In connectionHandler");
    socket.on('data',function(data) {
        console.log("New data");
        var timer = setTimeout(function(end){
            console.log("INSIDE TIMEOUT FUNCTION");
            if (end) {
                return;
            }
            throw new ERROR.ServerError('408',' Request Timeout','The \
            server has timedouted');
            },10,true);
        for (var t = 0 ; t < 100000000000 ; t++){}
        clearTimeout(timer);
    })

});


server.listen(4000, function() {
    console.log("server bound");
});

したがって、タイムアウトは10ミリ秒に設定され、その後に非常に長いループが続きますが、これは機能しません。

なぜこれが起こっているのですか?

4

1 に答える 1

6

setTimeoutは非同期であるため、コールバックが呼び出されることはありません。この「ターン」が終了するとタイマーがアクティブになり、ターンが終了する前にタイムアウトをクリアします。

まず、javascriptのイベント駆動型アーキテクチャについて読む必要があります。このチュートリアルは良いスタートになるでしょう。これは、タイムアウトの問題を解決するために不可欠です。

于 2013-01-13T13:22:46.037 に答える