response.writeに関するNode Jの問題

http-1.1 node.js stream
response.writeに関するNode Jの問題

何らかの理由でhttpストリーム接続を利用しようとすると、response.end()を呼び出すまで書き込みがフラッシュしません+デモから直接コードを取得しており、私の問題が何であるか理解していません。 +サーバーにカールすると、ヘッダーが正しくなります。

HTTP/1.1 200 OK
Content-Type: text/plain
Connection: keep-alive
Transfer-Encoding: chunked


var http = require('http');
    http.createServer(function (req, res) {
      res.writeHead(200, {'Content-Type': 'text/plain'});
      res.write('hello');
      res.write(':');
      setTimeout(function(){
          res.end('World\n')},
          2000);
    }).listen(1337, "127.0.0.1");
    console.log('Server running at http://127.0.0.1:1337/');

サーバーが書き込みデータを送信しないのはなぜですか?

  8  6


ベストアンサー

ブラウザ固有の動作のようです。Firefoxはデータ(「Hello:」)をすぐに表示しますが、chromeはバッファリングして応答が終了するまで待ちます。 最初にさらにデータを書き込むと、クロムはデータをすぐに表示することに注意してください(例: 私は1000の「こんにちは」を書いた)。

6


私はあなたの意味を理解していると思います…​

node.jsドキュメントから:

最初にresponse.write()が呼び出されると、バッファされたヘッダー情報と最初の本文がクライアントに送信されます。 2回目のresponse.write()の呼び出しでは、Nodeはデータのストリーミングを行うと想定し、それを個別に送信します。 つまり、応答は本文の最初のチャンクまでバッファリングされます。

(素敵なポート使用BTW :))

3


telnetまたはncでコードを確認してください。 curlは通常最後の行をバッファします

2


欠落している中括弧を修正した後、ブラウザからコードが機能します。 コマンドラインからのCurlは完全な応答を待つように見えますが、wiresharkはチャンクエンコーディングを使用していることを確認し、どちらの場合も応答は2つのパッケージに分割されました。

curl出力は行バッファリングされ、 ‘World’の後の改行を待ってから何かを出力すると想定しています。 これを確認するには、「hello:」の後に別の改行を出力します。

0


これは、コードの `res.end( ‘World \ n’)`の後、コンマの前にある「}」を囲んでいないためです。

0


タイトルとURLをコピーしました