2012-01-25 2 views
0

私はここのチュートリアルに従うことをしようとしている:Response.writeがブラウザをNode.jsでブロックするように見えるのはなぜですか?

http://nodetuts.com/tutorials/2-webtail-nodejs-child-processes-and-http-chunked-encoding.html#video

ブラウザはTEMP.TXTへの更新を受信しませんが、次のコードは、

var http = require('http'); 
var spawn = require('child_process').spawn; 

http.createServer(
function (request, response) { 
    response.writeHead(200, { 
     'Content-Type':'text/plain' 
    }); 
    var tail_child = spawn('tail', ['-f', 'temp.txt']); 

    request.connection.on('end', function() { 
     tail_child.kill(); 
    }); 

    tail_child.stdout.on('data', function (data) { 
     console.log(data.toString()); 
     response.end(data.toString()); 

    }); 

}).listen(9000); 

に動作します。私は

response.write(data.toString()); 

response.end(data.toString()); 

を交換した場合ブロックするように表示され、何もブラウザに表示されていません。

編集:チャンク:私は継続的にあなたが転送エンコーディングをテストする代わりに、カール使用してみてくださいチュートリアル

+0

私は – deltanovember

+0

を明確にするために編集しました。あなたが決して 'response.end()'を呼び出さないと、応答は送信されないので、そうです。 –

+0

チュートリアルではresponse.end()はまだありませんが、新しい添付ファイルはブラウザに 'ストリーム'として表示されます – deltanovember

答えて

2

ごとにリアルタイムでテキストファイルに任意のアペンドを表示するには、ブラウザをしたいと思います。多くのWebブラウザでは、HTMLをそのようにレンダリングするのは効率的ではないので、おそらくチャンク内にコンテンツをレンダリングしません。応答に十分なデータを入れると、ブラウザは予想どおりにレンダリングを開始することができますが、通常は使用する解決策ではありません。

希望の方法でデータをWebブラウザにストリームしたい場合は、Webソケットを使用するか、ストリーミングページにajaxコールを使用してhtmlをレンダリングします。各チャンクのイベントを発生させます。

+0

私はこれをテストしました。元の質問のコードは '' Transfer-Encoding ':' chunked''ヘッダをインクルードして十分なデータを押し込むと 'response.write()'とうまく動作します。より多くのデータ 'temp.txt'を使用して' less temp.txt >> temp.txt'私は '' Content-Type ':' text/plain;を追加しました。 charset = UTF-8''ですが、違いがあるかどうかはわかりません。 –

関連する問題