3

ノード Web サーバーでは、次のように特定のポイントで HTML コンテンツをフラッシュしたいと考えています。

  • 最初のチャンク:<html><head> ... </head>
  • 2 番目のチャンク:<body> ... </body>
  • 3 番目のチャンク:</html>

例えば:

var http = require('http');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});

  res.write('<html><head> ... </head>');                                           

  setTimeout(function() {                                                          
    res.write('<body> ... </body>');                                               

    setTimeout(function() {                                                        
      res.end('</html>');                                                          
    }, 2000);                                                                      

  }, 2000);

}).listen(8000);

上記のコード<html><head> ... </head><body> ... </body></html>は、単一のチャンクで ~4 秒後に応答しますが、すぐにフラッシュするには、チャンクが >= 4096 バイトである必要があることに気付きました。

var http = require('http');

http.createServer(function (req, res) {                                            
  res.writeHead(200, {'Content-Type': 'text/plain'});                              

  res.write(Array(4097).join('*'));

  setTimeout(function() {                                                          
    res.write(Array(4097).join('#'));

    setTimeout(function() {                                                        
      res.end('done!');                                                            
    }, 2000);

  }, 2000);

}).listen(8000);

上記のコードからの応答にも 4 秒ほどかかりますが、チャンクはすぐにフラッシュされます。小さなチャンクをパディングして、少なくとも 4096 バイトを埋めることができますが、別の「ハックではない」方法があるかどうか疑問に思っています。

flush()PHP では、これは/ob_flush()と無効化によって実現できます。output_buffering

FWIW、最新のブラウザーがどのようにそれを処理し、最適な構成を選択するかを分析するために、HTML チャンク出力のいくつかの構成をそれらの間で一定の遅延で実験するための Web サーバー ツールを構築しています。

ありがとう

4

1 に答える 1