|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
不断巩固,摸透大部分PHP常用函数,并可理解OOP,MYSQL优化,以及模板客户端|数据 将法式输入为其他的言语是法式员喜欢的工作之一,在WEB上咱们有
两个分歧编程情况:客户端(阅读器)和办事器端,依据HTTP协定的界说,
咱们可以在编写在客户端输入其他言语的办事端法式,咱们选择了作为服
务端言语、javascript作为客户端输入。在本问中咱们将向您演示如许用
该计划把数据存储在客户端,而且在诸如:聊天室、旧事体系或其他您想
完成的使用上到达办事端和客户端(阅读器)的最小的数据传输。
请求以下撑持:
PHP4
JavaScript
Frames
次要思惟:
咱们一向试图用PHP开辟一个基于HTTP协定的聊天室(HTTP CHAT ROOM),
虽然对聊天来讲HTTP协定并非个好协定,然而它可以不受防火墙或代办署理影响,
PHP完整可以完成该功效而不用利用JAVA APPLETS,关于聊天室次要有两个成绩:
第1、因为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平台测试经由过程!
对我一点用处没有啊,我知道该怎么学,但是我想如何才能更快的学,一周速成,啊不,24小时速成那种,皮皮你有没? |
|