php中长轮询,PHP完成长轮询【代码示例】_后端开发

传统的AJAX轮询体式格局,客服端以用户定义的时候距离去服务器上查询最新的数据。种这类拉取数据的体式格局须要很短的时候距离才保证数据的精确度,但太短的时候距离客服端会对服务器在短时候内发送出多个要求。

反转AJAX,就是所谓的长轮询或许COMET。服务器与客服端须要坚持一条长时候的要求,它使得服务器在有数据时能够返回音讯给客户端。

吹完水进入正题:

这里运用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

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();

}

}

?>

更多相干技术文章,请接见ki4网!

以上就是PHP完成长轮询【代码示例】的细致内容,更多请关注ki4网别的相干文章!

收藏 | 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值