`
天梯梦
  • 浏览: 13741242 次
  • 性别: Icon_minigender_2
  • 来自: 洛杉矶
社区版块
存档分类
最新评论

Comet 反Ajax: 基于jQuery与PHP实现Ajax长轮询(LongPoll)

 
阅读更多

传统的AJAX轮询方式,客服端以用户定义的时间间隔去服务器上查询最新的数据。种这种拉取数据的方式需要很短的时间间隔才能保证数据的精确度,但太短的时间间隔客服端会对服务器在短时间内发送出多个请求。

 

反转AJAX,就是所谓的长轮询或者COMET。服务器与客服端需要保持一条长时间的请求,它使得服务器在有数据时可以返回消息给客户端。

 

Comet是一种服务器向页面推送数据的技术,Comet能让信息近乎实时的被推送到页面上。

 

前端 index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>jQuery与PHP实现Ajax长轮询</title>
    <script src="http://sources.ikeepstudying.com/js/jquery-1.11.3.min.js"></script>
    <script type="text/javascript">
        $(function(){   
            $("#btn").bind("click",{btn:$("#btn")},function(evdata){      
                 $.ajax({      
                        type:"POST",      
                        dataType:"json",      
                        url:"comet.php",      
                        timeout:10000,     //ajax请求超时时间10秒      
                        data:{time:"6"}, //3秒后无论结果服务器都返回数据      
                        success:function(data,textStatus){      
                            //从服务器得到数据,显示数据并继续查询      
                            if(data.success=="1"){      
                             $("#msg").append("<br>[有数据]"+data.text);      
                             evdata.data.btn.click();      
                            }      
                         //未从服务器得到数据,继续查询      
                            if(data.success=="0"){      
                            $("#msg").append("<br>[无数据]");      
                            evdata.data.btn.click();      
                            }      
                        },      
                     //Ajax请求超时,继续查询      
                     error:function(XMLHttpRequest,textStatus,errorThrown){      
                             if(textStatus=="timeout"){      
                                 $("#msg").append("<br>[超时]");      
                                 evdata.data.btn.click();      
                             }      
                     }      
                              
                    });      
            });      
                  
        });        
    </script>
</head>
<body>
    <div id="msg"></div>     
    <input id="btn" type="button" value="测试" />    
</body>
</html>

后端 comet.php

<?php

if(empty($_POST['time'])) exit();      
set_time_limit(0);//无限请求超时时间      
$i=0;      
while (true)
{      
    //sleep(1);      
    usleep(500000);//0.5秒      
    $i++;      
          
    //若得到数据则马上返回数据给客服端,并结束本次请求      
    $rand=rand(1,999);      
    if($rand<=100){      
        $arr=array('success'=>"1",'name'=>'xiaocai','text'=>$rand);      
        echo json_encode($arr);      
        exit();      
    }      
          
    //服务器($_POST['time']*0.5)秒后告诉客服端无数据      
    if($i==$_POST['time']){      
        $arr=array('success'=>"0",'name'=>'xiaocai','text'=>$rand);      
        echo json_encode($arr);      
        exit();      
    }      
}

 

运行效果:在图中可以看到无数据的请求时间达到了10S,在10S的请求中若获得数据则请求关闭。

1335580

 

 

更多参考:

PHP:ServerPush (Comet推送) 技术的探讨

 

原文转自: Comet 反Ajax: 基于jQuery与PHP实现Ajax长轮询(LongPoll)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    jquery与php结合实现AJAX长轮询(LongPoll)

    传统的AJAX轮询方式,客服端以用户定义的时间间隔去服务器上查询最新的数据。种这种拉取数据的方式需要很短的时间间隔才能保证数据的精确度,但太短的时间间隔客服端会对服务器在短时间内发送出多个请求。 反转AJAX...

    asp.net+jquery长轮询实例

    在ASP.NET中,实现长轮询通常涉及到以下几个关键点: 1. **异步处理**:为了防止因长时间等待数据更新而导致的阻塞,服务器端需要使用异步操作。在ASP.NET中,可以使用`AsyncController`或`async/await`关键字来...

    comet-jquery

    【comet-jquery】是一种基于jQuery的实时通信技术,它利用了Comet技术来实现服务器向客户端推送数据的功能。在Web开发中,传统的HTTP协议是请求-响应模式,即客户端发起请求,服务器返回数据,而Comet技术打破了这种...

    asp.net+ajax实现无刷新聊天室

    为了解决这个问题,可以使用Comet技术,如长轮询(Long Polling)或WebSocket,保持服务器与客户端的持久连接,以便即时推送新消息。 6. **聊天室界面设计**:前端页面需要包含一个文本输入框让用户输入消息,一个...

    comet_jquery

    【标题】"comet_jquery"是一个Java Web项目,它实现了基于流(Stream)和长轮询(Long Polling)的长连接技术。这个项目旨在提供一个高效且可靠的实时通信解决方案,尤其适用于需要实时更新数据的Web应用,如聊天、...

    ajax 实时消息

    本文将深入探讨如何利用Ajax实现实时消息,并结合“java-message-session”这一标签,讨论Java环境下基于Session的Ajax消息传递。 1. **Ajax基础** - **XMLHttpRequest对象**:Ajax的核心是XMLHttpRequest(XHR)...

    Ajax实现的在线聊天室

    Comet是长轮询或流的方式,而WebSocket提供双向通信通道,更适合实时聊天应用。 10. **安全性**:在线聊天室可能会涉及用户认证、消息加密和防止XSS(跨站脚本攻击)与CSRF(跨站请求伪造)等安全措施。 通过以上...

    AJax,java即时通讯 web qq

    3. **长轮询与Comet技术**:在WebSocket之前,Ajax常通过长轮询或Comet技术来模拟实时通信,通过延长HTTP请求的生命周期来实现数据推送。 4. **前端框架与库**:在前端,可能使用了jQuery或其他Ajax库来简化异步请求...

    Dwr 官方Reverse Ajax Demo

    它通过JavaScript API在浏览器端与Java方法交互,从而实现了Reverse Ajax(也称为Comet技术),即服务器向客户端推送数据的能力。** **一、DWR的核心功能** 1. **双向通信**:DWR提供了从浏览器到服务器以及从...

    疯狂ajax源代码第01-12章

    - **Comet技术**:长轮询和流式传输,实现服务器向客户端推送数据。 9. **Ajax与Web存储** (第09章) - **Cookie、LocalStorage和SessionStorage**:讲解三种在客户端存储数据的方式,以及它们的区别和使用场景。 ...

    一个完整的用ajax反转 server push(服务器主动向页面推送数据)技术实现的web聊天室源码

    3. **Server Push**:服务器主动推送技术,通常包括两种主要实现方式:长轮询(Long Polling)和流(Streaming)。在这个项目中,可能采用了长轮询的方式,即服务器接收到客户端请求后并不立即返回,而是保持连接...

    AJAX无刷新 支持私聊 动态生成好友列表 聊天室

    为了提高性能和用户体验,可能采用长轮询、 comet 或 WebSocket 实现服务器推送,确保用户能实时收到新消息。另外,合理的缓存策略(如本地存储或服务端缓存)可以减少不必要的服务器请求。 7. 安全性: 在开发...

    ajax+servlet+jsp实现webqq

    在Web应用中实现IM通常涉及长轮询、WebSocket或Comet等技术,这些技术可以实现实时的数据传输。 5. **前端框架**:虽然未明确提及,但实现这样的项目可能使用了如jQuery、Vue.js或React等前端框架,以简化DOM操作,...

    疯狂ajax 讲义 第三版 源码 01-05

    8. **高级应用**:这部分可能涉及Ajax的进阶话题,如上传文件、长轮询(Comet)技术、WebSocket等实时通信方式,以及如何优化Ajax性能,比如使用缓存、减少HTTP请求等。 9. **案例分析**:通过实际案例,学习如何在...

    jquery例子带数据库

    通过WebSocket或者AJAX长轮询( Comet 技术),可以实现页面与数据库的实时交互。例如,使用WebSockets,前端可以通过创建WebSocket对象实时接收服务器推送的数据,更新DOM: ```javascript var socket = new ...

    C# ASP.NET不妥控件编程实例续2之Ajax实现

    在ASP.NET中,我们可以利用AJAX工具包(AjaxControlToolkit)或者jQuery库来实现Ajax功能。 在描述中提到的案例中,局部省市级联是一个常见的Ajax应用,它允许用户在选择省份后,自动加载并显示对应的城市列表。...

    疯狂Ajax源码 11-12 章

    章节可能探讨了长轮询、流等Comet实现方法。 3. **Ajax安全**:涵盖了Ajax请求的安全问题,如XSS(跨站脚本攻击)和CSRF(跨站请求伪造),以及相应的防护措施。 4. **RESTful API设计**:讲解了如何设计和使用...

    基于Comet推送技术的实时图形控件

    本篇文章将详细探讨基于Comet推送技术实现的asp.net实时图形控件及其特点。 首先,我们需要理解Comet技术。Comet是一种Web通信模式,它打破了传统的HTTP请求-响应模型,允许服务器向客户端主动推送数据,而不是等待...

Global site tag (gtag.js) - Google Analytics