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

栏目: PHP · 发布时间: 9年前

内容简介: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>
<?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();      
    }      
}

相关

https://segmentfault.com/a/1190000005032921


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

智能

智能

[法]弗雷德里克·马特尔 / 君瑞图、左玉冰 / 商务印书馆 / 2015-8 / 59.90

揭示数字化主流大趋势的最新权威论著 《主流》作者的最新力作!与法国秋季新版同步上市! 面对数字化时代的到来,美国、欧盟、中国、俄罗斯、印度、巴西、古巴、伊朗、南非、韩国、新加坡、肯尼亚、墨西哥、日本等世界各国各地区正在如何应对? 在国际地缘政治格局下如何把握数字化主流的大趋势? 谷歌、苹果、脸书、亚马逊、阿里巴巴、腾讯、中兴、华为等大家熟知的网络巨头接受了作者的采访。作者的......一起来看看 《智能》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换