六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

最小化數(shù)據(jù)傳輸——在客戶端存儲(chǔ)數(shù)據(jù)

[摘要]將程序輸出為其他的語(yǔ)言是程序員喜愛(ài)的事情之一,在WEB上我們有 兩個(gè)不同編程環(huán)境:客戶端(瀏覽器)和服務(wù)器端,根據(jù)HTTP協(xié)議的定義, 我們可以在編寫在客戶端輸出其他語(yǔ)言的服務(wù)端程序,我們選擇了作為服 務(wù)端語(yǔ)言、javascript作為客戶端輸出。在本問(wèn)中我們將向您演示這樣用 該方案把數(shù)據(jù)存儲(chǔ)在客...
將程序輸出為其他的語(yǔ)言是程序員喜愛(ài)的事情之一,在WEB上我們有
兩個(gè)不同編程環(huán)境:客戶端(瀏覽器)和服務(wù)器端,根據(jù)HTTP協(xié)議的定義,
我們可以在編寫在客戶端輸出其他語(yǔ)言的服務(wù)端程序,我們選擇了作為服
務(wù)端語(yǔ)言、javascript作為客戶端輸出。在本問(wèn)中我們將向您演示這樣用
該方案把數(shù)據(jù)存儲(chǔ)在客戶端,并且在諸如:聊天室、新聞系統(tǒng)或其他您想
實(shí)現(xiàn)的應(yīng)用上達(dá)到服務(wù)端和客戶端(瀏覽器)的最小的數(shù)據(jù)傳輸。

要求以下支持:
    PHP4
    JavaScript
    Frames

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

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

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

    首先請(qǐng)您使用mysql數(shù)據(jù)庫(kù)表單:
        ============================
        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"文件是發(fā)言框,提供用戶輸入發(fā)言框。

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

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

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

        $dab=mysql_connect("localhost","user","password");  // 打開(kāi)數(shù)據(jù)庫(kù)
        mysql_select_db("testbase",$dab);  

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

        // 在這個(gè)循環(huán),我們存儲(chǔ)最新消息/數(shù)據(jù),并設(shè)置"timestamp"為當(dāng)前最大值
         
        while($res=mysql_fetch_array($result)) {  
            $msgs[]=$res["message"];  
            if($res["timestamp"]>$timestamp) {  
                $timestamp=$res["timestamp"];  
            }  
        }  
        session_register("timestamp"); // 注冊(cè)"timestamp"變量

        echo '<script>';  

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

        //現(xiàn)在我們將生成"javascript"代碼 ,使 "display"頁(yè)刷新

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

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

        session_start();  

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

        // 顯示表單,產(chǎn)生"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"頁(yè)
              </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"頁(yè)提交發(fā)言時(shí),馬上刷新"display"頁(yè)面,這可以達(dá)到對(duì)發(fā)言人來(lái)說(shuō)馬上發(fā)言馬上
    顯示,更體現(xiàn)實(shí)時(shí)性。
     
   正如您所看到的,這個(gè)聊天室很簡(jiǎn)單,這就是最小化客戶/服務(wù)(C/S)數(shù)據(jù)傳輸技能,使用這個(gè)技術(shù)您可以達(dá)到最
   小的數(shù)據(jù)傳輸,再次提醒您:該技術(shù)并不是這用于聊天室!
=======================================================
以上在win98+apache1.3+php4.03平臺(tái)測(cè)試通過(guò)!
如有建議或疑問(wèn)請(qǐng)和飛揚(yáng)社區(qū)聯(lián)系(http://feiyschool.51.net)
或者發(fā)EMAIL到[email protected]
請(qǐng)您多多賜教,謝謝!
===============================        
英文原作者:Luis Argerich, Alejandro Mitrou  
英文原文所在網(wǎng)址:http://www.phpbuilder.com  

【本文版權(quán)歸作者與奧索網(wǎng)共同擁有,如需轉(zhuǎn)載,請(qǐng)注明作者及出處】    



主站蜘蛛池模板: 亚洲综合资源 | 天天看天天摸色天天综合网 | 亚洲欧美精选 | 手机亚洲第一页 | 一级女人18毛片免费 | 天天操天天射天天插 | 五月天婷婷基地 | 亚洲一区二区免费在线观看 | 亚洲图区欧美 | 午夜国产精品理论片久久影院 | 日韩色视频在线观看 | 亚洲欧美日韩中文不卡 | 亚洲 欧美 自拍 另类 欧美 | 亚洲一区二区福利视频 | 亚洲欧美日韩精品久久 | 日本成人一区二区三区 | 日本免费久久 | 欲色天天 | 亚洲三级网站 | 中文字幕免费视频精品一 | 无人在线观看完整免费版视频 | 日韩一级片在线观看 | 五月花精品视频在线观看 | 五月六月婷婷 | 午夜视频在线免费观看 | 日韩人成免费网站大片 | 青草伊人久久 | 伊人剧场 | 天天爱天天做天天爽夜夜揉 | 香港全黄一级毛片在线播放 | 日本乱子| 伊人久久青青 | 青草视频在线看 | 香蕉www| 五月丁香啪啪 | 五月婷婷在线观看视频 | 视频在线观看一区 | 午夜精品久久久久久 | 日本一区二区免费高清视频 | 欧美在线不卡视频 | 日韩中文字幕在线视频 |