最小化数据传输——在客户端存储数据_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"文件如下:
================================================
<script> <br> lines=new Array(); <br> function displaymsgs() { <br> for(i=0;i<lines.length;i++) { <br> display.document.write(lines[i]); <br> display.document.write('<BR>'); <br> } <br> } <br> </script>
==================================================
注:"form"文件是发言框,提供用户输入发言框。
"display"文件内容:
=====================
<script> <br> top.displaymsgs(); <br> </script>
====================
"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 '<script>'; <br><br> // 在这个循环我们生成javascript代码 <br> // 把最新从服务端得到的数据存储到"master"页面里(注意:使用"top"指向最顶窗口(master) <br><br> for($i=0;$i<$count($msgs);$i++) { <br> ?> <br> top.lines[top.lines.length]="<?php print("$msgs[$i]"); ?>"; <br> <?php <br> } <br><br> //现在我们将生成"javascript"代码 ,使 "display"页刷新 <br><br> ?> <br> top.display.location.reload(); <br> </script>
=======================================
"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");
?>
<script> <br> <?php <br> for($i=0;$i<$count($msgs);$i++) { <br> ?> <br> top.lines[top.lines.length]="<?print("$msgs[$i]");?>"; <br> <?php <br> } <br> ?> <br> top.display.location.reload(); //刷新"display"页 <br> </script>
}
?>
=====================================================
注:我们使得在"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
【本文版权归作者与奥索网共同拥有,如需转载,请注明作者及出处】

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

iPhone上的默认地图是Apple专有的地理位置提供商“地图”。尽管地图越来越好,但它在美国以外的地区运行不佳。与谷歌地图相比,它没有什么可提供的。在本文中,我们讨论了使用Google地图成为iPhone上的默认地图的可行性步骤。如何在iPhone中使Google地图成为默认地图将Google地图设置为手机上的默认地图应用程序比您想象的要容易。请按照以下步骤操作–先决条件步骤–您必须在手机上安装Gmail。步骤1–打开AppStore。步骤2–搜索“Gmail”。步骤3–点击Gmail应用旁

0.这篇文章干了啥?提出了DepthFM:一个多功能且快速的最先进的生成式单目深度估计模型。除了传统的深度估计任务外,DepthFM还展示了在深度修复等下游任务中的最先进能力。DepthFM效率高,可以在少数推理步骤内合成深度图。下面一起来阅读一下这项工作~1.论文信息标题:DepthFM:FastMonocularDepthEstimationwithFlowMatching作者:MingGui,JohannesS.Fischer,UlrichPrestel,PingchuanMa,Dmytr

您的手机中缺少时钟应用程序吗?日期和时间仍将显示在iPhone的状态栏上。但是,如果没有时钟应用程序,您将无法使用世界时钟、秒表、闹钟等多项功能。因此,修复时钟应用程序的缺失应该是您的待办事项列表的首位。这些解决方案可以帮助您解决此问题。修复1–放置时钟应用程序如果您错误地从主屏幕中删除了时钟应用程序,您可以将时钟应用程序放回原位。步骤1–解锁iPhone并开始向左侧滑动,直到到达“应用程序库”页面。步骤2–接下来,在搜索框中搜索“时钟”。步骤3–当您在搜索结果中看到下方的“时钟”时,请按住它并

谷歌力推的JAX在最近的基准测试中性能已经超过Pytorch和TensorFlow,7项指标排名第一。而且测试并不是在JAX性能表现最好的TPU上完成的。虽然现在在开发者中,Pytorch依然比Tensorflow更受欢迎。但未来,也许有更多的大模型会基于JAX平台进行训练和运行。模型最近,Keras团队为三个后端(TensorFlow、JAX、PyTorch)与原生PyTorch实现以及搭配TensorFlow的Keras2进行了基准测试。首先,他们为生成式和非生成式人工智能任务选择了一组主流

在iPhone上面临滞后,缓慢的移动数据连接?通常,手机上蜂窝互联网的强度取决于几个因素,例如区域、蜂窝网络类型、漫游类型等。您可以采取一些措施来获得更快、更可靠的蜂窝互联网连接。修复1–强制重启iPhone有时,强制重启设备只会重置许多内容,包括蜂窝网络连接。步骤1–只需按一次音量调高键并松开即可。接下来,按降低音量键并再次释放它。步骤2–该过程的下一部分是按住右侧的按钮。让iPhone完成重启。启用蜂窝数据并检查网络速度。再次检查修复2–更改数据模式虽然5G提供了更好的网络速度,但在信号较弱

您在尝试使用应用程序时是否收到“无法允许访问摄像头和麦克风”?通常,您可以在需要提供的基础上向特定对象授予摄像头和麦克风权限。但是,如果您拒绝权限,摄像头和麦克风将无法工作,而是显示此错误消息。解决这个问题是非常基本的,你可以在一两分钟内完成。修复1–提供相机、麦克风权限您可以直接在设置中提供必要的摄像头和麦克风权限。步骤1–转到“设置”选项卡。步骤2–打开“隐私与安全”面板。步骤3–在那里打开“相机”权限。步骤4–在里面,您将找到已请求手机相机权限的应用程序列表。步骤5–打开指定应用的“相机”

哭死啊,全球狂炼大模型,一互联网的数据不够用,根本不够用。训练模型搞得跟《饥饿游戏》似的,全球AI研究者,都在苦恼怎么才能喂饱这群数据大胃王。尤其在多模态任务中,这一问题尤为突出。一筹莫展之际,来自人大系的初创团队,用自家的新模型,率先在国内把“模型生成数据自己喂自己”变成了现实。而且还是理解侧和生成侧双管齐下,两侧都能生成高质量、多模态的新数据,对模型本身进行数据反哺。模型是啥?中关村论坛上刚刚露面的多模态大模型Awaker1.0。团队是谁?智子引擎。由人大高瓴人工智能学院博士生高一钊创立,高

最近,军事圈被这个消息刷屏了:美军的战斗机,已经能由AI完成全自动空战了。是的,就在最近,美军的AI战斗机首次公开,揭开了神秘面纱。这架战斗机的全名是可变稳定性飞行模拟器测试飞机(VISTA),由美空军部长亲自搭乘,模拟了一对一的空战。5月2日,美国空军部长FrankKendall在Edwards空军基地驾驶X-62AVISTA升空注意,在一小时的飞行中,所有飞行动作都由AI自主完成!Kendall表示——在过去的几十年中,我们一直在思考自主空对空作战的无限潜力,但它始终显得遥不可及。然而如今,
