服务器推送技术 — 微博消息实时更新

今天无意间翻到了这篇博文,觉得很有意思和大家分享一下,原文地址:http://www.chenglin.name/php/blog/629.html
当我们需要实时数据推送,更新客户端信息时,我们需要一个技术来承载我们的这些梦想。
comet,基于 HTTP长连接的“服务器推”技术,是一种新的 Web 应用架构。新浪微博就是用的这种技术;
它只是一个概念,代码还是我们自己写。

我们先剖析下,这个概念: 简单三个字 — 长轮询
这个技术是使用js做请求。
何为 “长” :等待时间长;
何为 “轮询”: 不断请求;

那么加在一起就是 不断请求,但是请求之间间隔时间很长,必须等上一个请求完事后,在继续下一个轮询。

那么一个请求什么时候结束?
这里可以是服务器把请求hold住,要超时了在释放;

要是你害怕服务器不返回怎么办:客户端js settimeout ,每隔一段时间去请求

概念完了,我们看看简单的代码吧:
我们这里实现一个,每隔3秒更新客户端的时间的程序;
客户端html+js:

  1. <html>
  2. <head>
  3.     <meta http-equiv=“Content-Type” content=“text/html; charset=UTF-8” />
  4.     <script type=“text/javascript” src=“./jquery.js”></script>
  5.     <title></title>
  6. </head>
  7. <body>
  8. <div class=“tmp”>123</div>
  9. <script type=“text/javascript”>
  10. // post 请求
  11. function clin_post(){
  12.  
  13.     $.post(“chat.php”,function(data){
  14.         $(‘.tmp’).html(data);
  15.         clin_post();
  16.     },‘json’);
  17.  
  18. }
  19. clin_post();
  20. </script>
  21. </body>
  22. </html>
  23.  

服务器端PHP:

  1. <?php
  2.  
  3. $b = time();
  4. $num = 5;
  5. $t = 0;
  6. while( ($num  $t)>0 ) {
  7.     $e = time();
  8.     $t = $e  $b;
  9. }
  10. echo json_encode(date(‘Y-m-d H:i:s’));
  11.  
  12. ?>

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据