comet反向Ajax模型原理与模型(笔记一)

comet反向Ajax模型原理与模型(笔记一)

 

网页实时聊天有两种方式:

第一种:不断的查询是否有新消息,耗费资源,并非真正的实时

第二种:使用反向Ajax,页面不断开,一有数据就立即发送,真正的实时

 

我们先简单做一个页面不断开的浏览器页面:

 

 1 ob_start();
 2 
 3 <?php
 4 
 5 /* 反向Ajax原理
 6 
 7 * comet 反向ajax
 8 
 9 * 又叫服务器推技术 server push
10 
11 * 在"实时聊天","消息推送"中,比较适宜用这种技术
12 
13 * 服务器端:
14 
15 * 1:不要断开连接
16 
17 * 2:有消息时在发送
18 
19 *
20 
21 * 原理:HTTP/1.1 的长度与chunk传输
22 
23 * chunk有切割分块的意思
24 
25 * 就是说-----服务器也不知道到底要传输多少length给浏览器
26 
27 * 只能每次传 1小块chunk
28 
29 * 具体做法:
30 
31 * php用一个死循环,始终运行
32 
33 * 有相关消息时,立即把内容推到浏览器
34 
35 * */
36 
37 ob_clean();
38 
39 set_time_limit(0);        //脚本运行不受限制
40 
41 $i = 0;
42 
43  
44 
45 $conn = mysql_connect('localhost','root','');
46 
47 mysql_query('use test',$conn);
48 
49 mysql_query('set names utf8',$conn);
50 
51  
52 
53 while(1){
54 
55     echo $i++,'<br/>';
56 
57     ob_flush();    //强迫php把内容发给apache
58 
59     flush();    //强迫webserver把内容发给浏览器
60 
61     sleep(1);
62 
63 }
64 
65 ?>

 

 

可以发现页面一直在不断的打印数据,页面没有断开

 

下面我们就用在上面的基础上做一个简单的实时聊天模型:

我们利用数据库作为消息存储端,服务器不断的查询数据库,一旦有新的消息,就立即打印出来(模拟数据发送成功)

 

 1 ob_start();
 2 <?php
 3 /* 反向Ajax原理 
 4  * comet 反向ajax
 5  * 又叫服务器推技术 server push
 6  * 在“实时聊天”,“消息推送”中,比较适宜用这种技术
 7  * 服务器端:
 8  * 1:不要断开连接
 9  * 2:有消息时在发送
10  * 原理:HTTP/1.1 的长度与chunk传输
11  *  chunk有切割分块的意思
12  *  就是说-----服务器也不知道到底要传输多少length给浏览器
13  *  只能每次传 1小块chunk
14  *  具体做法:
15  *  php用一个死循环,始终运行
16  *  有相关消息时,立即把内容推到浏览器
17  * */
18 ob_clean();
19 set_time_limit(0);        //脚本运行不受限制
20 $i = 0;
21 //echo str_repeat(' ',4000),'<br/>';
22 //ob_flush();    //强迫php把内容发给apache
23 //flush();    //强迫webserver把内容发给浏览器
24 //ob_get_clean();    //获取当前缓存区内容,并且
25 
26 $conn = mysql_connect('localhost','root','');
27 mysql_query('use test',$conn);
28 mysql_query('set names utf8',$conn);
29 while(1){
30     
31     $sql = 'select * from msg where name ="LoverXueEr" and isread = 0';
32     $rs = mysql_query($sql,$conn);
33     $msg = mysql_fetch_assoc($rs);
34     if(!empty($msg)){
35         echo "<b>",$msg['name'],"</b> \t",strftime("%d/%m/%Y %H:%M:%S"),"<br/>";
36         echo $msg['content'],'<br/>';
37 
38         $sql = " update msg set isread = 1 where name= '".$msg['name']."' && content= '".$msg['content']."' && num= ".$msg['num'];
39         mysql_query($sql,$conn);
40         ob_flush();
41         flush();
42     }
43     
44     //echo $i++,'<br/>';
45     //ob_flush();    //强迫php把内容发给apache
46     //flush();    //强迫webserver把内容发给浏览器
47     //sleep(1);
48 }
49 /*
50     思路:
51     1:在正常的页面里,如首页,文章等等,嵌套一个iframe
52         这个iframe使用上面的模型
53     2:这个iframe将不断得到服务器推送的消息
54     3:让iframe得到的消息是<script></script>代码
55     4:让iframe中的js影响到父页面的变化(如聊天窗口)
56  */
57 ?>

 

 

先贴上实验结果图:

我们使用

insert into msg(name,isread,content) value('LoverXueEr',0,'hello');

向数据库写入数据来模拟发送

可以发现我们每次insert,浏览器上就立即显示我们发送的数据,达到了真正的实时

 

 

 

明天,我们就开始正式学习反向Ajax的不断开的聊天系统

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

"小夜猫&小懒虫&小财迷"的男人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值