概念:
轮询(polling):客户端按规定时间定时像服务端发送ajax请求,服务器接到请求后马上返回响应信息并关闭连接。
概念总是枯燥的,只有代码方能解心头之快
前段代码:index.html:
var getting = {
url:’server.php’,
dataType:’json’,
success:function(res) {
console.log(res);
}
};
//关键在这里,Ajax定时访问服务端,不断获取数据 ,这里是1秒请求一次。
window.setInterval(function(){$.ajax(getting)},1000);
服务端PHP代码:server.php
$conn = mysqli_connect(“localhost”,”root”,””,”test”);
resource = conn ->query(‘select * from t’);
result = resource->fetchall();
if ($result) {
//exits data
print_r(json_encode(array(‘success’=>’存在数据’)));
}
print_r(json_encode(array(‘failed’=>’不存在数据’)));
$conn.close
?>
上面就是最基本最简化的Ajax轮询。判断t表是否有数据,并执行对应输出。 实际项目中的话查询语句就根据实际需求来定就可以了。
从代码我们可以看出,客户端是按照规定时间(这个时间由你设定,此处默认为1秒)像服务端发送请求,前一次请求完成后,无论有无结果返回,一秒之后下一次请求又会发出。这就叫做Ajax轮询。
最关键的地方在于,客户端需要通过JS设定一个定时器,按照规定时间不断的请求。
好,轮询完了,我们来看一下长轮询
Ajax长轮询属于Ajax轮询的升级版,在客户端和服务端都进行了一些改造,使得消耗更低,速度更快。
“不间断的通过Ajax查询服务端”。
同样看代码说话:
前端代码:
//前端Ajax持续调用服务端,称为Ajax轮询技术
var getting = {
url:’server.php’,
dataType:’json’,
success:function(res) {
console.log(res);
$.ajax(getting); //关键在这里,回调函数内再次请求Ajax
}
//当请求时间过长(默认为60秒),就再次调用ajax长轮询
error:function(res){
.ajax(getting);
}
};
$.ajax(getting);
服务端代码:
//这段AJAX请求时间永不过期
set_time_limit(0);
$pdo = new PDO(‘mysql:dbname=test;host=127.0.0.1′,’root’,’root’);
resource = pdo->query(‘select * from t1’);
result = resource->fetchall();
while (true) {
if ($result) {
//exits data
print_r(json_encode(array(‘success’=>’存在数据,返回’)));
exit(); //输出数据,退出。然后客户端不间断继续发起请求
}
//数据不存在,继续循环。
}
?>
长轮询的精髓就在于Ajax的回调函数,继续再次调用Ajax请求(不间断的原理就在这里,成功返回后立即再次调用):
$.ajax(getting);
类似于js里面的递归,在函数里面调用函数;
最关键的地方在于前一次请求结束后,第二次请求立即不间断的发起,这个就叫做Ajax长轮询
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/184177.html原文链接:https://javaforall.cn