千家信息网

jquery与php结合如何实现AJAX长轮询

发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,这篇文章主要介绍了jquery与php结合如何实现AJAX长轮询,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。HTTP是无状态、单向的
千家信息网最后更新 2024年11月22日jquery与php结合如何实现AJAX长轮询

这篇文章主要介绍了jquery与php结合如何实现AJAX长轮询,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

HTTP是无状态、单向的协议,用户只能够通过客服端向服务器发送请求并由服务器处理发回一个响应。若要实现聊天室、WEBQQ、在线客服、邮箱等这些即时通讯的应用,就要用到" 服务器推送技术(Comet)"。

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

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

XHTML

jQuery

这里使用AJAX请求data.php页面获得'success'的值,请求的时间达到80秒。在这80秒中若没有从服务端返回'success'则一直保持连接状态,直到有数据返回或'success'的值为0才关闭连接。在关闭连接后在继续下一次的请求。

$(function(){  $("#btn").bind("click",{btn:$("#btn")},function(evdata){     $.ajax({      type:"POST",      dataType:"json",      url:"data.php",      timeout:80000,  //ajax请求超时时间80秒      data:{time:"80"}, //40秒后无论结果服务器都返回数据      success:function(data,textStatus){       //从服务器得到数据,显示数据并继续查询       if(data.success=="1"){        $("#msg").append("
[有数据]"+data.text); evdata.data.btn.click(); } //未从服务器得到数据,继续查询 if(data.success=="0"){ $("#msg").append("
[无数据]"); evdata.data.btn.click(); } }, //Ajax请求超时,继续查询 error:function(XMLHttpRequest,textStatus,errorThrown){ if(textStatus=="timeout"){ $("#msg").append("
[超时]"); evdata.data.btn.click(); } } }); }); });

PHP

在这里是无限的循环,循环的结束条件就是获取到了返回结果返回Json数据。

并且接受$_POST['time']参数来限制循环的超时时间,避免资源的过度浪费。(浏览器关闭不会发消息给服务器,使用可能一直循环下去)

if(emptyempty($_POST['time']))exit();  set_time_limit(0);//无限请求超时时间  $i=0;  while (true){   //sleep(1);   usleep(500000);//0.5秒   $i++;   //若得到数据则马上返回数据给客服端,并结束本次请求   $rand=rand(1,999);   if($rand<=15){    $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();   }  }

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


感谢你能够认真阅读完这篇文章,希望小编分享的"jquery与php结合如何实现AJAX长轮询"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

数据 服务 服务器 时间 篇文章 循环 查询 就是 方式 消息 状态 用户 结果 精确 价值 传统 兴趣 单向 参数 同时 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 服务器成本下降可从哪里入手 内蒙 网络安全 名单 网络安全和信息化部署会议 服务器cpu频率低核数高 计算机等级网络技术知识点 建行的软件开发岗 网络服务器怎么配置安全 软件开发供应商考核评价 广东工控软件开发需要多少钱 软件开发使用哪种笔记本 软件开发包公司 软件开发线上和线下培训 湖南新石地软件开发有限公司 移动支付网络安全 服务器是做什么用的 cs七龙珠怎么创建局域网服务器 怎么连接拳头服务器 seer数据库临床参数 原神国际服测试服务器 网络安全黑板报素材小学版的 农业银行软件开发部 幻塔官方服是什么服务器 下列属于数据库设计内容的是 上传的附件怎么存放到数据库 上海软件开发 已选志先科技 医院信息网络安全监督检查 服务器硬件架构拓扑图 数据库为紧急模式无法备份 网上聘专职教软件开发实际应用 骑士人才数据库
0