php データ転送を最小限に抑える: データをクライアント側に保存する

WBOY
リリース: 2016-08-08 09:34:04
オリジナル
8563 人が閲覧しました

プログラムを他の言語にエクスポートすることは、プログラマーが好むことの 1 つであり、WEB 上では、次のような機能があります
2 つの異なるプログラミング環境: HTTP プロトコルの定義に従って、クライアント (ブラウザー) とサーバー側、
クライアント上で他の言語を出力するサーバープログラムを作成できます
。 サーバー側言語と JavaScript がクライアント出力として使用されます。この質問では、
の使用方法を説明します。 このソリューションはクライアント側にデータを保存し、チャット ルーム、ニュース システム、またはその他の任意の場所に表示します
実装されたアプリケーションは、サーバーとクライアント (ブラウザー) 間の最小限のデータ送信を実現します。

サポートのリクエスト:
php4
JavaScript
フレーム

主なアイデア:

私たちは PHP を使用して HTTP プロトコルに基づいたチャット ルーム (HTTP CHAT ROOM) を開発しようとしています
HTTP プロトコルはチャットには適したプロトコルではありませんが、ファイアウォールやプロキシの影響を受けません。 PHP は、JAVA APPLETS を使用せずにこの機能を完全に実装できます。チャット ルームには 2 つの主な問題があります。 まず、IE は SERVER PUSH テクノロジをサポートしていないため、CLIENT PULL テクノロジのみを使用できます (両方
クライアント上で自動的に更新します)、2 番目の問題はさらに深刻です。アイデアはクライアント、サービス
上で更新することであるため、 サーバーは毎回すべてのメッセージを送信する必要があり、これは大量のデータ送信を意味し、これがチャット ルームの遅延の主な原因でもあります
主な理由として、この記事では問題の解決を試みます:
フレームテクノロジー (フレーム) を使用すると、他のページをリロードすることなく、指定したページを更新できます。 サービス/クライアント (C/S) データ送信の量を削減します。私たちのモデルはこのスキームに基づいています。
「マスター」ファイル: フレームワーク構造を定義します
「ローダー」ページ: データをインポートします
「表示」ページ: データを表示します
このソリューションでは、「ローダー」ボックスは「x」秒ごとに自動的に更新されます。アイデアは、データを「マスター」に保存することです
ファイルを使用するため、「loder」ページはクライアントが持っていないデータをサーバーに要求するだけで済みます。タイムスタンプ (タイムスタンプ) を使用します。 各メッセージを記録して、どのメッセージをクライアントに送信する必要があり、どのメッセージを送信してはならないかを判断します。 PHP4.0のセッション管理(セッション)を使用します
クライアントの最終更新タイムスタンプを保存し、サーバーとクライアントの両方からタイムスタンプが見えるようにします。 「ローダー」ファイルの場合
「マスター」ファイルからデータを受信したら (注: 「マスター」ファイルは大きいですが、送信されるのは 1 回だけです)、表示ページ (「diaplay」) を更新します
「表示」ページは、「マスター」ファイル内の「displaymsgs()」という名前の JavaScript 関数を呼び出すだけで、メッセージを表示します。この機能は動的に表示されます
データは「マスター」ファイルに保存されます。一般的なフローチャートは次のとおりです:
1.ブラウザが「マスター」ページ(フレーム)をリクエストし、「マスター」ページがサーバーからクライアント(ブラウザ)に送信され、その後「マスター」
このファイルはフレームワークを生成し、「ローダー」ページと「表示」ページをクライアントに転送します。
2.サーバー側では、「loader」ファイルが分析されます。クライアントが「timestamp」セッション変数を定義していない場合、「loder」ファイルは
サーバーからすべてのデータを取得し、JavaScript コードを生成してデータを「マスター」ファイルに保存し、「タイムスタンプ」変数を
として保存します。 セッション変数。
3. 「loder」ページは、「display」ページを更新するための JavaScript コードを生成します。
4.更新リクエストにより、「表示」ページが「diaplaymsgs()」JavaScript 関数を呼び出してデータを表示します
5. 「x」秒ごとにステップ 2 に戻ります

次のように考えることができます:
================================================= ======
「マスター」ファイル: 非常に大きく、displaymsgs() 関数を定義し、データと初期値を保存します。
「ローダー」ファイル: 小さい、サーバーからデータを取得し、JavaScript コードを生成します
「display」ファイル: 非常に小さく、「master」ファイルの「diaplaymsgs()」関数を呼び出します
================================================= =======
注: 「マスター」ファイルは 1 回だけ送信されます
「loder」ファイルと「display」ファイルは「x」秒ごとに更新されます
「loder」は、初めて送信されるときは非常に大きいかもしれませんが、将来的には非常に小さくなります
「diaplay」ファイルは変更されません

上記のアイデアがまだよくわからない場合は、以下にチャット ルームを設置して方法を詳しく説明します。このチャット ルームは簡単なデモンストレーションのためのものです
したがって、あまり役に立たないかもしれませんが、このアイデアはチャット ルームだけに適用されるものではないことを忘れないでください。 :)

まず、MySQL データベース フォームを使用してください:
============================
テスト可能なテーブルを作成します (
タイムスタンプ日時、
​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ); ============================
「マスター」ファイルは次のとおりです:
================================================
                                                                                                   行=新しい配列(); 関数 displaymsgs() {
for(i = 0; i< lines.length; i ++){
display.document.write(lines[i]); display.document.write('
');                                                                                          }
                                                                                                <フレーム名="loader" src="loader.php"> <フレーム名="display" src="display.php"> <フレーム名="form" src="form.php">                                                                    =================================================
注: 「フォーム」ファイルはスピーチ ボックスであり、ユーザーに入力スピーチ ボックスを提供します。

「表示」ファイルの内容:
=====================
                                                                                                 top.displaymsgs();                                                                                                 ====================
「表示」ファイルは小さいですか? :)

「ローダー」ファイル:
====================
                                                                               
session_start(); // ここでセッションを使用します!
If(!isset($timestamp)) {
//「タイムスタンプ」が定義されていない場合は、定義して 0 に設定します
$timestamp=0; }

$dab=mysql_connect("localhost","user","passWord"); //データベースを開きます
Mysql_select_db("テストベース",$dab);
//クライアントが持っていない情報を見つける
$query="select * from testeable where timestamp>'$timestamp'"; $result=mysql_query($query,$dab); $msgs=array();
// このループでは、最新のニュース/データを保存し、「タイムスタンプ」を現在の最大値に設定します

while($res=mysql_fetch_array($result)) {
$msgs[]=$res["メッセージ"]; If($res["タイムスタンプ"]>$タイムスタンプ) {
$timestamp=$res["timestamp"];                                                                                       }
Session_register("timestamp"); // "timestamp" 変数を登録します

エコー '<スクリプト>';
// このループでは JavaScript コードを生成します
// サーバーから取得した最新のデータを「マスター」ページに保存します (注: トップ ウィンドウ (マスター) を指すには「top」を使用します

for($i=0;$i                                                top.lines[top.lines.length]="";                                                                                                                                              
//次に、「表示」ページを更新する「JavaScript」コードを生成します

?> top.display.location.reload();
                                                                                    
                                                                                =======================================

「フォーム」ページ:
====================
                                                                               
セッション開始();
If (!isset($timestamp)) {
$timestamp=0; }

// フォームを表示し、「タイムスタンプ」変数を生成します。 If (isset($msg)) {
$dab=mysql_connect("localhost","root","seldon"); mysql_select_db("testbase",$dab); $query="testeable(timestamp,message) 値に挿入(now(),'$msg')"; Mysql_query($query,$dab); アウトアウトアウトアウトアウトクリーンアウトスアウトレイを取り出してください」 $query="select * from testeable where timestamp>'$tt'"; $result=mysql_query($query,$dab); $msgs=array();$i=0;$timestamp=0;
                                                                                                                                                                                                                                                                                               ​                     $msgs[]=$res["メッセージ"];  
                    if($res["タイムスタンプ"]>$タイムスタンプ) {
                            $tt=$res["タイムスタンプ"];  
                    }
                }
                session_register("タイムスタンプ");  
                 
            ?>  
              <スクリプト>  
                                for($i=0;$i<$count($msgs);$i++) {
            ?>  
                top.lines[top.lines.length]="";  
                          }
              ?>  
            top.display.location.reload(); //刷新「表示」页
                
             }
    ?>  
    

"メソッド="投稿">  
    メッセージ:  
      
      
    ================================================= ===
    注:我们使用在"フォーム"页提交发言時,马上刷新"表示"页面,これ可以对出版言人来说马上出版言马上
    
より時間性が高くなっていることがわかります。      
 

以上、php のデータ転送の最小化を仲介しました。ゲスト端末でのデータ保存には、ゲスト端末でのデータ保存に関する内容が含まれており、PHP 教則に関心のある友人の助けになることが望ましいです。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート