0

0

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

php中文网

php中文网

发布时间:2016-05-17 09:10:18

|

1266人浏览过

|

来源于php中文网

原创

将程序输出为其他的语言是程序员喜爱的事情之一,在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"文件如下:
        ================================================
        
        

瑞志企业建站系统(ASP版)2.2
瑞志企业建站系统(ASP版)2.2

支持模板化设计,基于标签调用数据 支持N国语言,并能根据客户端自动识别当前语言 支持扩展现有的分类类型,并可修改当前主要分类的字段 支持静态化和伪静态 会员管理功能,询价、订单、收藏、短消息功能 基于组的管理员权限设置 支持在线新建、修改、删除模板 支持在线管理上传文件 使用最新的CKEditor作为后台可视化编辑器 支持无限级分类及分类的移动、合并、排序 专题管理、自定义模块管理 支持缩略图和图

下载

        
        
        
        
        ==================================================
        注:"form"文件是发言框,提供用户输入发言框。

        "display"文件内容:
        =====================
        
        ====================
        "display"文件是不是很小? :)

        "loader"文件:
        ====================
        
        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 '  

          
          
          
        =======================================

        "form"页面:
        ====================
        
        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");  

            ?>  
                
            }  
    ?>  
    
" method="post">  
    Message:  
      
    
  
    =====================================================
    注:我们使得在"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  

【本文版权归作者与奥索网共同拥有,如需转载,请注明作者及出处】    
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

10

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

29

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

21

2026.01.22

php会话教程合集
php会话教程合集

本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

21

2026.01.22

宝塔PHP8.4相关教程汇总
宝塔PHP8.4相关教程汇总

本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

13

2026.01.22

PHP特殊符号教程合集
PHP特殊符号教程合集

本专题整合了PHP特殊符号相关处理方法,阅读专题下面的文章了解更多详细内容。

11

2026.01.22

PHP探针相关教程合集
PHP探针相关教程合集

本专题整合了PHP探针相关教程,阅读专题下面的文章了解更多详细内容。

8

2026.01.22

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

55

2026.01.22

Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

9

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号