リフレッシュ
サーバープッシュとは、少し前に流行った「プッシュ」技術ですが、インターネット上の情報のほとんどは CGI で、残念ながら私はフランス語が理解できないので、そのような紹介を時々見かけました。何かを理解するには、彼のプログラムからしか学ぶことができません。学ぶための例を示します。チャット ルームでのデータ送信、Web サイトのニュース更新、その他の頻繁に更新されるページに使用できます。
これまで、更新は主にページにタグを追加することで行われていました。
< META HTTP-EQUIV=REFRESH CONTENT="time;URL=url" >
または、JavaScript のタイムアウト + リロードを使用しますが、この更新方法は時間設定に依存するため、連続したデータを提供できません。判断するのが難しい。サーバー プッシュを使用するサーバーは、クライアントがリクエストを行った後、クライアントとの永続的な接続を確立し、その後、サーバーはクライアントのリクエストに従ってデータ パケットをサーバーに継続的にプッシュします。気付かない遅延により、サーバーの応答とリクエストが同期レベルに達しているように感じられます。
まず例を見てから説明しましょう。
img.php
< ?php
set_time_limit(0);
$file = "./1.jpg";
$sep = "gIrLsKiCkAsSiTsAySsOoNaTsHiRt";
if(ereg(".*MS IE.*" , $HTTP_SERVER_VARS["HTTP_USER_AGENT"])){
//IEブラウザの場合は直接出力して終了します。Header("Cache-Control: no-cache")は試していません。 ;
header("Pragma: no-cache");
header("Content-type: image/jpeg");
header("Content-size: " . filesize($file));
readfile($file) ;
}else{
header("Content-Type: multipart/x-mixed-replace; border=$sep");
//ここが重要です、MIME タイプの説明を見てください
//理解しています
print "- -$sep
";
do{
print "Content-Type: image/jpeg
";
readfile($file);
print "
--$sep
";
flush();
$mt = filemtime ($file);
do{
sleep(1);
clearstatcache();
}while($mt == filemtime($file));
}while(1);
}
? >
これは、画像のコンテンツを継続的に出力する、永続的に実行されるページです (ネットワークが一定の場合)。 次に、Netscape またはその他の IE 以外のブラウザを開いて呼び出しページを表示します。変化はないようです。心配しないでください。次のステップは、画像 1.jpg を変更する方法です。たとえば、時間に応じて 1.jpg をカバーする 2 つの画像を作成します (この方法を使用することもできます)。 1.jpg が変更されている限り、コピーして上書きします)。この時点で、呼び出しページの画像が自動的に更新されることがわかります。
使用中に問題が見つかるでしょう:なぜ画像が自動的に更新されないのか。これは、クライアントがサーバーに対して一定期間リクエストを行っていない、つまりブラウザに新たなコンテンツが一定期間入力されていないため、接続タイムアウトが発生する可能性があるためです。解決策は何ですか?上記の FTP 接続方法と同様に、実行ページで空のシグナルをブラウザに追加できます。この例を読んだ後、 do...while(1); の間に print("") を追加します。常に更新されるコンテンツを処理する方法を知っておく必要があります。重要なのは、img.php ページの処理です (呼び出し時に、img、スクリプト、フレームなどが存在する可能性があります)。 。