亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

最小化數據傳輸——在客戶端存儲數據

2019-11-18 21:46:50
字體:
來源:轉載
供稿:網友
將程序輸出為其他的語言是程序員喜愛的事情之一,在WEB上我們有
兩個不同編程環境:客戶端(瀏覽器)和服務器端,根據HTTP協議的定義,
我們可以在編寫在客戶端輸出其他語言的服務端程序,我們選擇了作為服
務端語言、javascript作為客戶端輸出。在本問中我們將向您演示這樣用
該方案把數據存儲在客戶端,并且在諸如:聊天室、新聞系統或其他您想
實現的應用上達到服務端和客戶端(瀏覽器)的最小的數據傳輸。

要求以下支持:
    php4
    Javascript
    Frames

主要思想:
     
    我們一直試圖用PHP開發一個基于HTTP協議的聊天室(HTTP CHAT ROOM),
盡管對聊天來說HTTP協議并不是個好協議,但是它可以不受防火墻或代理影響,
PHP完全可以實現該功能而不必使用JAVA APPLETS,對于聊天室主要有兩個問題:
第一、由于IE 不支持SERVER PUSH 技術,所以我們只有用CLIENT PULL技術(既
客戶端自動刷新),第二個問題就更深一層了:因為該思想是在客戶端刷新,所以服
務端每次必須傳送所有的消息,這意味著大量的數據傳輸,這也正是聊天室延遲的主
要原因,本文試圖解決該問題:
   使用框架技術(frames) 你能夠刷新指定頁面,而不必重新裝載別的頁面,這可
以減少服務/客戶端(C/S)數據傳輸量。我們的模型就是基于該方案。
    "master"文件:定義框架結構
    "loader"頁面:導入數據
    "display"頁面:顯示數據
    在該方案,"loder"框每"x"秒自動刷新一次——我們的思想是把數據存儲在"master"
文件內,這樣"loder"頁面只要向服務端請求客戶端所沒有的數據就可以了我們使用時間戳標(timestamp)
記每個消息來決定那些消息必須傳給客戶端那些不必傳輸。我們使用PHP4。0的會話管理(session)
存儲客戶端的最后更新的時間戳(last timestamp)以使時間戳對服務端和客戶端均可見。當"loader"文件
從"master"文件收到數據(注意:"master"文件很大,但是它只傳送一次)時,就刷新顯示頁("diaplay")
而"display"頁只是簡單的調用"master"文件的名為"displaymsgs()"的javascript 函數顯示消息。該函數動態顯示
存儲在"master"文件的數據,以下是大體流程圖:
    1。瀏覽器請求"master"頁(框架),"master"頁從服務器端傳送到客戶端(瀏覽器),然后"master"
    文件生成框架,并且將"loader"和"display"頁調到客戶端。
    2。在服務端,"loader" 文件將分析:如果客戶端沒定義"timestamp" session 變量,"loder"文件將
    從服務端得到所有數據,并生成javascript代碼將數據存入"master"文件,然后將"timestamp"變量存為
    session 變量。
    3。"loder"頁面生成javascript 代碼刷新 "display"頁面。
    4。刷新請求使得"display"頁面調用"diaplaymsgs()"javascript 函數顯示數據
    5。每隔"x" 秒回到步驟2

我們可以該思想如下:
    ========================================================
    "master"文件:非常大,定義了displaymsgs() 函數和存儲數據和初始值。
    "loader"文件:小,從服務端取回數據,生成javascript 代碼
    "display"文件:非常小,調用"master"文件的"diaplaymsgs()"函數
    =========================================================
    注:“master"文件只傳送一次
        "loder" 和 "display" 文件每隔"x"秒刷新一次
        第一次傳送的時候"loder"可能會很大,但以后就會很小
        "diaplay"文件一直不變

如果您對以上的思路還是不太清楚的話,以下我們將建立一個聊天室具體講解該方法,這個聊天室只是為了簡單的演示
所以可能并不是很有用,但是您完全可以使用該思想建立更復雜的聊天室,記住這個思想并不是只用與聊天室 。:)

    首先請您使用MySQL數據庫表單:
        ============================
        create table testeable (
              timestamp datetime,
              message    text
        );
        ============================
    "master"文件如下:
        ================================================
        <script>
            lines=new Array();
            function displaymsgs() {     
              for(i=0;i<lines.length;i++) {
                 display.document.write(lines[i]);
                 display.document.write('<BR>');
                  }
            }
        </script>
        <frameset cols="1" rows="20,60,20" border="0">
        <frame name="loader" src="loader.php">
        <frame name="display" src="display.php">
        <frame name="form" src="form.php">
        </frameset>
        ==================================================
        注:"form"文件是發言框,提供用戶輸入發言框。

        "display"文件內容:
        =====================
        <script>
        top.displaymsgs();
        </script>
        ====================
        "display"文件是不是很??? :)
         
        "loader"文件:
        ====================
        <?php  

        session_start(); // 在這使用 Sessions !  

        if(!isset($timestamp)) {  
            //如果"timestamp"沒有定義,則定義并設為0  
            $timestamp=0;      
        }  

        $dab=mysql_connect("localhost","user","passWord");  // 打開數據庫
        mysql_select_db("testbase",$dab);  

        // 查找客戶端所沒有的信息  
        $query="select * from testeable where timestamp>'$timestamp'";  
        $result=mysql_query($query,$dab);  
        $msgs=array();  

        // 在這個循環,我們存儲最新消息/數據,并設置"timestamp"為當前最大值
         
        while($res=mysql_fetch_array($result)) {  
            $msgs[]=$res["message"];  
            if($res["timestamp"]>$timestamp) {  
                $timestamp=$res["timestamp"];  
            }  
        }  
        session_register("timestamp"); // 注冊"timestamp"變量

        echo '<script>';  

        // 在這個循環我們生成javascript代碼
        // 把最新從服務端得到的數據存儲到"master"頁面里(注意:使用"top"指向最頂窗口(master)
         
        for($i=0;$i<$count($msgs);$i++) {  
            ?>  
            top.lines[top.lines.length]="<?php PRint("$msgs[$i]"); ?>";  
            <?php  
        }   

        //現在我們將生成"javascript"代碼 ,使 "display"頁刷新

        ?>  
        top.display.location.reload();  
        </script>  

        <!-- 注意是用 javascript 的"setInterval()" 方法使得"loader"頁面每隔4秒刷新一次  -->  
        <body onLoad="window.setInterval('location.reload()',4000);">  
        </body>  
        =======================================
         
        "form"頁面:
        ====================
        <?php  

        session_start();  

        if (!isset($timestamp)) {  
              $timestamp=0;  
        }  

        // 顯示表單,產生"timestamp"變量.  
        if (isset($msg)) {  
                $dab=mysql_connect("localhost","root","seldon");  
                mysql_select_db("testbase",$dab);  
               $query="insert into testeable(timestamp,message) values(now(),'$msg')";  
               mysql_query($query,$dab);  
               // 得到timestamp 后的所有消息
                $query="select * from testeable where timestamp>'$tt'";  
               $result=mysql_query($query,$dab);  
               $msgs=array();$i=0;$timestamp=0;  
                while($res=mysql_fetch_array($result)) {  
                    $msgs[]=$res["message"];  
                    if($res["timestamp"]>$timestamp) {  
                            $tt=$res["timestamp"];  
                    }  
                }  
                session_register("timestamp");  
                 
            ?>  
              <script>  
              <?php  
                 for($i=0;$i<$count($msgs);$i++) {  
            ?>  
                top.lines[top.lines.length]="<?print("$msgs[$i]");?>";  
            <?php  
             }  
              ?>  
            top.display.location.reload(); //刷新"display"頁
              </script>  
        <?php  
    }  
    ?>  
    <form name="foo" action="<?php print("$PHP_SELF"); ?>" method="post">  
    Message:<input type="text" name="msg">  
    <input type="submit" name="newmsg" value="send">  
    </form>  
    =====================================================
    注:我們使得在"form"頁提交發言時,馬上刷新"display"頁面,這可以達到對發言人來說馬上發言馬上
    顯示,更體現實時性。
     
   正如您所看到的,這個聊天室很簡單,這就是最小化客戶/服務(C/S)數據傳輸技能,使用這個技術您可以達到最
   小的數據傳輸,再次提醒您:該技術并不是這用于聊天室!
=======================================================
以上在win98+apache1.3+php4.03平臺測試通過!
如有建議或疑問請和飛揚社區聯系(http://feiyschool.51.net)
或者發EMAIL到feiyhy@sina.com
請您多多賜教,謝謝!
===============================        
英文原作者:Luis Argerich, Alejandro Mitrou  
英文原文所在網址:http://www.phpbuilder.com  

【本文版權歸作者與奧索網共同擁有,如需轉載,請注明作者及出處】    

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲美女www午夜| 日韩精品在线影院| 亚洲人午夜精品| 日韩精品久久久久久福利| 亚洲精品一区二区三区婷婷月| 一区二区国产精品视频| 久久国产天堂福利天堂| 国产精品欧美日韩久久| 在线观看久久久久久| 日韩欧美国产免费播放| 色综久久综合桃花网| 国产91精品在线播放| 国产精品久久久久免费a∨大胸| 成人国产精品一区二区| 久久99国产精品自在自在app| 国产三级精品网站| 欧美激情视频网站| 欧美国产在线视频| 日本欧美爱爱爱| 国产视频精品自拍| 国产精品7m视频| 色在人av网站天堂精品| 国产亚洲精品va在线观看| 国产精品日韩在线观看| 亚洲精品中文字幕av| 高清日韩电视剧大全免费播放在线观看| 国产亚洲一区二区在线| 亚洲高清福利视频| 欧美激情一区二区三区久久久| 欧美激情精品久久久久久大尺度| 91地址最新发布| 欧美成人午夜免费视在线看片| 欧美又大又粗又长| 国产亚洲激情视频在线| 亚洲xxxx做受欧美| 人妖精品videosex性欧美| 清纯唯美日韩制服另类| 亚洲人成免费电影| 国产精品一久久香蕉国产线看观看| 欧美怡红院视频一区二区三区| 欧美一区二三区| 最近2019中文字幕mv免费看| 91国产视频在线| 亚洲午夜精品久久久久久久久久久久| 亚洲一区二区三区久久| 国产精品丝袜高跟| 亚洲 日韩 国产第一| 国产精品69av| 久久激情视频久久| 欧美乱大交xxxxx另类电影| 国产成人小视频在线观看| 成人h片在线播放免费网站| 亚洲国产私拍精品国模在线观看| 欧美精品在线极品| 亚洲一区二区三区成人在线视频精品| 国产亚洲激情在线| 亚洲在线免费看| 国产精品高清免费在线观看| 欧美疯狂xxxx大交乱88av| 992tv成人免费视频| zzjj国产精品一区二区| 久久久久久久久爱| 国内精品久久影院| 久久久久久久久久国产精品| 久久久久久尹人网香蕉| 日韩在线视频中文字幕| 97视频在线观看视频免费视频| 欧美在线视频免费| 97人洗澡人人免费公开视频碰碰碰| 午夜精品三级视频福利| 国产一区红桃视频| 麻豆国产va免费精品高清在线| 欧美视频一区二区三区…| 国产欧洲精品视频| 国产欧美精品xxxx另类| 欧洲s码亚洲m码精品一区| 51精品国产黑色丝袜高跟鞋| 国产成人精品一区二区| 97香蕉久久夜色精品国产| 粉嫩av一区二区三区免费野| 九九热最新视频//这里只有精品| 91香蕉嫩草影院入口| 精品久久久久久久久久| 亚洲国内高清视频| 精品久久香蕉国产线看观看亚洲| 全球成人中文在线| 欧洲一区二区视频| 欧美最猛性xxxx| 日韩美女免费视频| 97国产suv精品一区二区62| 精品久久久久久久中文字幕| 中文字幕在线看视频国产欧美在线看完整| 国产一区二区免费| 国产亚洲欧洲高清一区| 久久久亚洲欧洲日产国码aⅴ| 热99久久精品| 欧美精品一区二区免费| 精品国产91久久久| 国产91免费看片| 欧美一级黑人aaaaaaa做受| 日韩欧美国产网站| 91久久精品美女高潮| 国产精品18久久久久久麻辣| 国产性色av一区二区| 亚洲护士老师的毛茸茸最新章节| 中文字幕亚洲欧美| 91精品国产自产在线观看永久| 欧美成人在线网站| 亚洲剧情一区二区| 91久久久在线| 国产成人免费av| 欧美视频精品一区| 亚洲欧美日韩中文在线| 日韩在线观看你懂的| 午夜精品福利电影| 日韩欧美一区二区三区久久| 国产亚洲欧美日韩美女| 色综合亚洲精品激情狠狠| 国产精品香蕉在线观看| 久久久精品一区二区| 色综合久久天天综线观看| 成人久久精品视频| 国产福利成人在线| 自拍偷拍亚洲区| 在线视频欧美日韩| 日韩欧美aⅴ综合网站发布| 欧美日韩免费看| 久久视频中文字幕| 日韩精品在线免费观看视频| 中文字幕亚洲综合久久筱田步美| 欧美日韩国产区| 亚洲精品免费一区二区三区| 亚洲无限av看| 日韩中文在线视频| 欧美日韩亚洲成人| 亚洲福利视频网站| 国产一区二中文字幕在线看| 日韩av大片免费看| 精品视频一区在线视频| 亚洲欧美日韩网| 国产91色在线免费| 日韩欧美中文字幕在线观看| 日韩电影中文字幕| 2018国产精品视频| 欧美日本高清一区| 国产美女高潮久久白浆| 午夜精品一区二区三区在线视| 久久久免费观看视频| 欧美华人在线视频| 国产精品爽黄69天堂a| 91中文字幕在线| 中文字幕亚洲一区| 一区二区三区美女xx视频| 国产精品美女久久久久av超清| 亚洲视频在线观看| 久久久久久久久久久免费精品| 中文字幕一精品亚洲无线一区| 日韩欧美大尺度| 综合国产在线视频| 国产精品久久久久一区二区| 午夜精品美女自拍福到在线| 色狠狠av一区二区三区香蕉蜜桃| 久久精品精品电影网| 亚洲欧美日韩国产成人|