php高效轮询,PHP怎么实现AJAX长轮询

PHP怎么实现AJAX长轮询

发布时间:2020-06-22 17:00:31

来源:亿速云

阅读:82

作者:Leah

PHP怎么实现AJAX长轮询?针对这个问题,这篇文章给出了相对应的分析和解答,希望能帮助更多想解决这个问题的朋友找到更加简单易行的办法。

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

index.html

$(function(){

$("#btn").bind("click",{btn:$("#btn")},function(evdata){

$.ajax({

type:"POST",

dataType:"json",

url:"data.php",

timeout:80000, //ajax请求超时时间80秒

data:{time:"40"}, //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();

}

}

});

});

});

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

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

data.php<?php

if(empty($_POST['time']))exit();

set_time_limit(0);//无限请求超时时间

$i=0;

while (true){

sleep(1); //延迟一秒

$i++;

//若得到数据则马上返回数据给客服端,并结束本次请求

$rand=rand(1,999);

if($rand<=15){

$arr=array('status'=>"1",'name'=>'success','text'=>$rand);

echo json_encode($arr);

exit();

}

//到指定超时时间还未返回数据则断开连接

if($i==$_POST['time']){

$arr=array('status'=>"0",'name'=>'error','text'=>'无数据');

echo json_encode($arr);

exit();

}

}

?>

关于PHP怎么实现AJAX长轮询就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值