动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > PHP技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ PHP技巧 ]的信息

本月文章推荐
.用Suhosin加强PHP脚本语言安全性.
.使用php 5时MySQL返回乱码的解决.
.PHP程序员一般都忽略了的几点精华.
.用Socket发送电子邮件(利用需要验.
.如何在PHP中使用Oracle数据库(6).
.输出控制类.
.PHP+MySQL分页显示示例分析.
.树型结构列出指定目录里所有文件.
.如何跨站抓取别的站点的页面的补.
.正确理解PHP程序编译时的错误信息.
.Windows下PHP4.0与Oracle 8的连接.
.PHP5中PDO的简单使用.
.php:树形结构的算法.
.vim的的代码折叠.
.为查询结果建立向后/向前按钮.
.为php4加入动态flash文件的生成的.
.透析PHP的配置文件php.ini.
.提升PHP速度全攻略.
.告诉你如何关闭GZIP,多种程序方.
.用PHP生成PDF文件 with FPDF.

最小化数据传输——在客户端存储数据

发表日期:2002-3-24 |


将程序输出为其他的语言是程序员喜爱的事情之一,在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平台测试通过!

上一篇:GD输出汉字的函数的分析 人气:17204
下一篇:类的另类用法--数据的封装  人气:13138
浏览全部客户端的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-11-22 CMS001 v2.2 bulid 081122 Beta
2008-11-22 腾讯小说小偷 v5.0 20081113
2008-11-22 iestore网上商店系统 v1.0.7.0
2008-11-22 GKEE CRM客户管理系统 v1.2
2008-11-22 shopd1网店系统 v1.3
2008-11-22 翎风个人主页管理系统 v1.5
2008-11-22 开良狗狗影视搜索小偷 v1.1
2008-11-22 XtreMedia
2008-11-22 互联网数据分享应用平台 v1.0.0
2008-11-21 傲游(Maxthon) 2.1.5 正式版
2008-11-21 Skype v3.8.0.188 Final
2008-11-21 AirPlay OpenAlpha 2008.11.20
2008-11-21 屏幕文字抓取工具 DWMouse1.3.510
2008-11-21 Vista一键还原(Vista Ghost)1.
2008-11-21 SP Photo Fix照片修改1.2破解版
2008-11-21 QQ腾讯聊天工具 v1.2正式版
2008-11-21 FlightTrack航班信息v1.0破解版
2008-11-21 RealPiano仿真钢琴1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成