0

最新のUbuntuからNode.jsを実行しています。次のコードを取得しました。

var http = require('http');

var s = http.createServer(function(req, res){
    res.writeHead(200, {'content-type':'text/html'});
    res.write('Hello ');

    setTimeout(function(){
        res.end('world');
    }, 3000);
});

s.listen(8000);

「node server.js」を実行して実行しますが、これで問題ありません。しかし問題は、何らかの理由で、setTimeout が呼び出されるまでコンテンツが出力されないことです。つまり、リクエストの 3 秒後です。

http://www.youtube.com/watch?v=jo_B4LTHi3I (17:08 を参照)の例に多かれ少なかれ従いましたが、彼が得たのと同じ「ストリーミング」のような結果を得ることができません (彼のブラウザは最初に "Hello" を出力し、3 秒後に "world" を出力します)。

私はさまざまなブラウザーを試し、ターミナルで「カール」することさえ試みました。彼がクリップで行ったようにです。しかし、それはすべて同じです。

ある種の出力バッファリングがデフォルトでオンになっていますか、それともなぜこのように動作するのですか?

前もって感謝します!

4

1 に答える 1

1

これは、ブラウザーが res.end() を受け取ってから 3 秒後にのみページをレンダリングするためです。ビデオに示されている実装の場合、行が次のように表示されることに注意してください

res.write('Hello \n');

curl を使用すると、改行によって「hello」がコンソールに出力され、「world」が 3 秒後に出力されます。

res.write('Hello') または res.write('Hello \n') のどちらの場合でも、ブラウザーは res.end() を受け取った後にのみレンダリングします。また、ブラウザーが res.end() を受信しない場合、応答はタイムアウトになり、何も表示されません。

于 2012-05-11T17:15:59.247 に答える