12

サーバーがすぐに接続を閉じず、HTML を受信したときに表示することをブラウザーに伝えるために、HTTP ヘッダーを返す必要がありますか? HTML を flush() のように段階的に表示するために必要なものはありますか?

以前はチャットなどで使われていた手法ですが、COMET系のアプリで使おうと考えています。

4

8 に答える 8

1

より堅牢なソリューションは、サーバーに新しいデータをポーリングする Javascript タイマーを備えたページだと思います。応答を開いたままにしておくことは、HTTP プロトコルが設計された目的ではありません。

于 2009-06-03T13:19:29.297 に答える
1

スクリプトの最後で、次のようなものを使用します (ページの上部に ob_start() を配置して出力バッファリングをオンにしたと仮定します)

<?php

set_time_limit(0); // Stop PHP from closing script after 30 seconds

ob_start();

echo str_pad('', 1024 * 1024, 'x'); // Dummy 1 megabyte string

$buffer = ob_get_clean();

while (isset($buffer[0])) {

$send = substr($buffer, 0, 1024 * 30); // Get 30kbs bytes from buffer :D
$buffer = substr($buffer, 1024 * 30); // Shorten buffer

echo $send; // Send buffer
echo '<br />'; // forces browser to reload contents some how :P

ob_flush(); // Flush output to browser
flush(); 

sleep(1); // Sleep for 1 second

}

?>

このスクリプトは、ユーザーとサーバーの接続がどれほど高速であっても、基本的に 30kbs (シミュレート) で 1 メガバイトのテキストを出力します。

于 2009-06-03T15:16:46.847 に答える