PHPとJavaScriptでAjaxストリーミングの続き
前回の
IEバージョンのスクリプトがサーバー上で動かなかった問題ですが、スクリプト部分を変えることで一応の解決を見ました。
Content-typeのところが、どうも
text/plainではダメなようで、
IE以外のブラウザで指定していた
text/event-streamもしくは
application/octet-streamにしないとストリーミングにならないみたいです。以下は修正後の
PHPスクリプトになります。
IE8-9専用PHPコード
ajax-stream-test-for-ie.php
header("Access-Control-Allow-Origin: *");
header("Content-type: text/event-stream; charset=utf-8");
ob_end_flush();
ob_start('mb_output_handler');
echo str_repeat(' ', 2048);
for ($i = 0; $i < 10; $i++)
{
$string = ($i + 1) * 10 ."件の処理を完了しました
\n";
echo $string;
ob_flush();
flush();
sleep(1);
}
⇒Ajaxストリーミングのデモページ(
Internet Explorerのバージョン
8以上で見てください)
また、ここから一歩進んで
PHPとデータベースを利用して、サーバー側で変化があったときに、ストリーミング的にクライアント側にデータを送信するやり方を実装してみました。まず、クライアント側でアクションがあった場合、即時
XHRリクエストをし、一方で常時サーバー側の変化を監視するため、接続を張りっぱなしにし(実際には二十秒ごとに張り直しをしています)、サーバーで変化(データベースの更新など)が起きたら、
HTTPストリーミングを利用してリアルタイムデータを返すようにしています。
⇒HTTPストリーミングでクライアントとサーバーを連動させるテスト
-
JavaScript/Ajax HTTPストリーミング, JavaScript, PHP, Prototype