php弹幕技术轮询,PHP+Ajax实现在线聊天长轮询
HTML
首先我們放置一個獲取數據按鈕和數據存放地方#msg。
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("
[有數據]"?+?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();
}
}
});
});
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)方式,做一個在線聊天系統,若是成功的話,你肯定會覺得小有成就呢!~
總結
以上是生活随笔為你收集整理的php弹幕技术轮询,PHP+Ajax实现在线聊天长轮询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小米登录协议分析_性能测试篇之Loadr
- 下一篇: usb扩展坞同时接键盘鼠标_笔记本扩展伴