自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

基于jQuery與PHP實(shí)現(xiàn)Ajax長(zhǎng)輪詢(LongPoll)

開(kāi)發(fā) 前端 后端
HTTP是無(wú)狀態(tài)、單向的協(xié)議,用戶只能夠通過(guò)客服端向服務(wù)器發(fā)送請(qǐng)求并由服務(wù)器處理發(fā)回一個(gè)響應(yīng)。若要實(shí)現(xiàn)聊天室、WEBQQ、在線客服、郵箱等這些即時(shí)通訊的應(yīng)用,就要用到“ 服務(wù)器推送技術(shù)(Comet)”。

傳統(tǒng)的AJAX輪詢方式,客服端以用戶定義的時(shí)間間隔去服務(wù)器上查詢***的數(shù)據(jù)。種這種拉取數(shù)據(jù)的方式需要很短的時(shí)間間隔才能保證數(shù)據(jù)的精確度,但太短的時(shí)間間隔客服端會(huì)對(duì)服務(wù)器在短時(shí)間內(nèi)發(fā)送出多個(gè)請(qǐng)求。

反轉(zhuǎn)AJAX,就是所謂的長(zhǎng)輪詢或者COMET。服務(wù)器與客服端需要保持一條長(zhǎng)時(shí)間的請(qǐng)求,它使得服務(wù)器在有數(shù)據(jù)時(shí)可以返回消息給客戶端。

XHTML

  1. <div id="msg"></div>     
  2. <input id="btn" type="button" value="測(cè)試" />    

jQuery

這里使用AJAX請(qǐng)求data.php頁(yè)面獲得‘success’的值,請(qǐng)求的時(shí)間達(dá)到80秒。在這80秒中若沒(méi)有從服務(wù)端返回‘success’則一直保持連接狀態(tài),直到有數(shù)據(jù)返回或‘success’的值為0才關(guān)閉連接。在關(guān)閉連接后在繼續(xù)下一次的請(qǐng)求。

  1. $(function(){   
  2.     $("#btn").bind("click",{btn:$("#btn")},function(evdata){      
  3.          $.ajax({      
  4.                 type:"POST",      
  5.                 dataType:"json",      
  6.                 url:"data.php",      
  7.                 timeout:80000,     //ajax請(qǐng)求超時(shí)時(shí)間80秒      
  8.                 data:{time:"80"}, //40秒后無(wú)論結(jié)果服務(wù)器都返回?cái)?shù)據(jù)      
  9.                 success:function(data,textStatus){      
  10.                     //從服務(wù)器得到數(shù)據(jù),顯示數(shù)據(jù)并繼續(xù)查詢      
  11.                     if(data.success=="1"){      
  12.                      $("#msg").append("<br>[有數(shù)據(jù)]"+data.text);      
  13.                      evdata.data.btn.click();      
  14.                     }      
  15.                  //未從服務(wù)器得到數(shù)據(jù),繼續(xù)查詢      
  16.                     if(data.success=="0"){      
  17.                     $("#msg").append("<br>[無(wú)數(shù)據(jù)]");      
  18.                     evdata.data.btn.click();      
  19.                     }      
  20.                 },      
  21.              //Ajax請(qǐng)求超時(shí),繼續(xù)查詢      
  22.              error:function(XMLHttpRequest,textStatus,errorThrown){      
  23.                      if(textStatus=="timeout"){      
  24.                          $("#msg").append("<br>[超時(shí)]");      
  25.                          evdata.data.btn.click();      
  26.                      }      
  27.              }      
  28.                       
  29.             });      
  30.     });      
  31.           
  32. });    

PHP

在這里是無(wú)限的循環(huán),循環(huán)的結(jié)束條件就是獲取到了返回結(jié)果返回Json數(shù)據(jù)。

并且接受$_POST['time']參數(shù)來(lái)限制循環(huán)的超時(shí)時(shí)間,避免資源的過(guò)度浪費(fèi)。(瀏覽器關(guān)閉不會(huì)發(fā)消息給服務(wù)器,使用可能一直循環(huán)下去)

  1. if(emptyempty($_POST['time']))exit();      
  2. set_time_limit(0);//無(wú)限請(qǐng)求超時(shí)時(shí)間      
  3. $i=0;      
  4. while (true){      
  5.     //sleep(1);      
  6.     usleep(500000);//0.5秒      
  7.     $i++;      
  8.           
  9.     //若得到數(shù)據(jù)則馬上返回?cái)?shù)據(jù)給客服端,并結(jié)束本次請(qǐng)求      
  10.     $rand=rand(1,999);      
  11.     if($rand<=15){      
  12.         $arr=array('success'=>"1",'name'=>'xiaocai','text'=>$rand);      
  13.         echo json_encode($arr);      
  14.         exit();      
  15.     }      
  16.           
  17.     //服務(wù)器($_POST['time']*0.5)秒后告訴客服端無(wú)數(shù)據(jù)      
  18.     if($i==$_POST['time']){      
  19.         $arr=array('success'=>"0",'name'=>'xiaocai','text'=>$rand);      
  20.         echo json_encode($arr);      
  21.         exit();      
  22.     }      
  23. }   

運(yùn)行效果:在圖中可以看到無(wú)數(shù)據(jù)的請(qǐng)求時(shí)間達(dá)到了40S,在40S的請(qǐng)求中若獲得數(shù)據(jù)則請(qǐng)求關(guān)閉。

基于jquery,php實(shí)現(xiàn)AJAX長(zhǎng)輪詢(LongPoll) 

原文鏈接:http://www.xiaocai.name/emlog/?post=32

【編輯推薦】

  1. 如何理解與簡(jiǎn)化jQuery的closest函數(shù)
  2. 手把手教你使用jQuery操作元素的屬性與樣式
  3. 從零開(kāi)始學(xué)習(xí)jQuery之管理jQuery包裝集
  4. jQuery性能指標(biāo)和調(diào)優(yōu)
  5. jQuery實(shí)現(xiàn)仿人人網(wǎng)彈出層效果
責(zé)任編輯:陳貽新 來(lái)源: 小菜的博客
相關(guān)推薦

2013-03-15 10:57:13

AJAXDotNet

2011-05-18 13:43:52

jQueryAjaxPHP

2017-10-12 15:34:17

2012-02-08 17:01:36

2025-04-14 11:41:12

RocketMQ長(zhǎng)輪詢配置

2017-10-11 18:17:06

大數(shù)據(jù)數(shù)據(jù)可視化前后端

2023-11-28 08:49:01

短輪詢WebSocket長(zhǎng)輪詢

2009-09-07 14:41:48

GridView展開(kāi)與

2009-11-24 14:22:03

基于PHP的AJAX技

2009-06-26 13:46:13

Struts

2011-04-14 10:08:04

AJAXPHPJQuery

2025-04-27 02:00:00

實(shí)時(shí)通信Nacos服務(wù)端

2012-09-28 10:18:53

IBMdw

2010-12-28 13:44:12

PHPXMLjQuery

2009-11-24 16:09:44

PHP Ajax

2009-02-12 09:55:22

AjaxMVCDojo

2010-06-04 10:40:55

AJAX MySQL

2013-12-02 14:40:03

jQueryAjax

2010-10-27 10:02:36

PHP

2010-10-25 10:07:48

jQuery
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)