HTTP是无状态、单向的协议,用户只能够通过客服端向服务器发送请求并由服务器处理发回一个响应。通过长轮询,你可轻松实现在线聊天功能。
0、请不要问“在不在”之类的问题,有问题直接问!1、学生或暂时没有工作的童鞋,整站资源免费下载!2、¥9.9充值终身VIP会员,加我微信,826096331 拉你进VIP群学习!3、程序员加油,技术改变世界。在线 充值
HTML
首先我们放置一个获取数据按钮和数据存放地方#msg。
<div id="msg"></div>
<input id="btn" type="button" class='btn' value="获取数据" />
jQuery
我们向ajax.php请求,请求的时间设置80秒。在这80秒中若没有从服务端返回‘success’则一直保持连接状态,直到有数据返回或‘success’的值为0才关闭连接。在关闭连接后在继续下一次的请求。
$(function() {
$("#btn").bind("click", {
btn: $("#btn")
},
function(evdata) {
$.ajax({
type: "POST",
dataType: "json",
url: "ajax.php",
timeout: 80000,//ajax请求超时时间80秒
data: {
time: "80"
},
//40秒后无论结果服务器都返回数据
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();
}
}
});
});
Ajax.php
通过$_POST['time']来限制循环的超时时间,避免资源过度浪费。要注意的是浏览器不关闭的话,会一直请求下去......
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<=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();
}
}
大家可以利用这种长轮询(COMET)方式,做一个在线聊天系统,若是成功的话,你肯定会觉得小有成就呢!~
友情提示:垃圾评论一律封号 加我微信:826096331拉你进VIP群学习群