comet反向Ajax模型原理與模型(筆記一)

來源:互聯網
上載者:User

標籤:

comet反向Ajax模型原理與模型(筆記一)

 

網頁即時聊天有兩種方式:

第一種:不斷的查詢是否有新訊息,耗費資源,並非真正的即時

第二種:使用反向Ajax,頁面不斷開,一有資料就立即發送,真正的即時

 

我們先簡單做一個頁面不斷開的瀏覽器頁面:

 
 1 ob_start(); 2  3 <?php 4  5 /* 反向Ajax原理 6  7 * comet 反向ajax 8  9 * 又叫伺服器推技術 server push10 11 * 在"即時聊天","訊息推送"中,比較適宜用這種技術12 13 * 伺服器端:14 15 * 1:不要中斷連線16 17 * 2:有訊息時在發送18 19 *20 21 * 原理:HTTP/1.1 的長度與chunk傳輸22 23 * chunk有切割分塊的意思24 25 * 就是說-----伺服器也不知道到底要傳輸多少length給瀏覽器26 27 * 只能每次傳 1小塊chunk28 29 * 具體做法:30 31 * php用一個死迴圈,始終運行32 33 * 有相關訊息時,立即把內容推到瀏覽器34 35 * */36 37 ob_clean();38 39 set_time_limit(0);        //指令碼運行不受限制40 41 $i = 0;42 43  44 45 $conn = mysql_connect(‘localhost‘,‘root‘,‘‘);46 47 mysql_query(‘use test‘,$conn);48 49 mysql_query(‘set names utf8‘,$conn);50 51  52 53 while(1){54 55     echo $i++,‘<br/>‘;56 57     ob_flush();    //強迫php把內容發給apache58 59     flush();    //強迫webserver把內容發給瀏覽器60 61     sleep(1);62 63 }64 65 ?>

 

 

可以發現頁面一直在不斷的列印資料,頁面沒有斷開

 

下面我們就用在上面的基礎上做一個簡單的即時聊天模型:

我們利用資料庫作為訊息儲存端,伺服器不斷的查詢資料庫,一旦有新的訊息,就立即列印出來(類比資料發送成功)

 

 1 ob_start(); 2 <?php 3 /* 反向Ajax原理  4  * comet 反向ajax 5  * 又叫伺服器推技術 server push 6  * 在“即時聊天”,“訊息推送”中,比較適宜用這種技術 7  * 伺服器端: 8  * 1:不要中斷連線 9  * 2:有訊息時在發送10  * 原理:HTTP/1.1 的長度與chunk傳輸11  *  chunk有切割分塊的意思12  *  就是說-----伺服器也不知道到底要傳輸多少length給瀏覽器13  *  只能每次傳 1小塊chunk14  *  具體做法:15  *  php用一個死迴圈,始終運行16  *  有相關訊息時,立即把內容推到瀏覽器17  * */18 ob_clean();19 set_time_limit(0);        //指令碼運行不受限制20 $i = 0;21 //echo str_repeat(‘ ‘,4000),‘<br/>‘;22 //ob_flush();    //強迫php把內容發給apache23 //flush();    //強迫webserver把內容發給瀏覽器24 //ob_get_clean();    //擷取當前緩衝區內容,並且25 26 $conn = mysql_connect(‘localhost‘,‘root‘,‘‘);27 mysql_query(‘use test‘,$conn);28 mysql_query(‘set names utf8‘,$conn);29 while(1){30     31     $sql = ‘select * from msg where name ="LoverXueEr" and isread = 0‘;32     $rs = mysql_query($sql,$conn);33     $msg = mysql_fetch_assoc($rs);34     if(!empty($msg)){35         echo "<b>",$msg[‘name‘],"</b> \t",strftime("%d/%m/%Y %H:%M:%S"),"<br/>";36         echo $msg[‘content‘],‘<br/>‘;37 38         $sql = " update msg set isread = 1 where name= ‘".$msg[‘name‘]."‘ && content= ‘".$msg[‘content‘]."‘ && num= ".$msg[‘num‘];39         mysql_query($sql,$conn);40         ob_flush();41         flush();42     }43     44     //echo $i++,‘<br/>‘;45     //ob_flush();    //強迫php把內容發給apache46     //flush();    //強迫webserver把內容發給瀏覽器47     //sleep(1);48 }49 /*50     思路:51     1:在正常的頁面裡,如首頁,文章等等,嵌套一個iframe52         這個iframe使用上面的模型53     2:這個iframe將不斷得到伺服器推送的訊息54     3:讓iframe得到的訊息是<script></script>代碼55     4:讓iframe中的js影響到父頁面的變化(如聊天視窗)56  */57 ?>

 

 

先貼上實驗結果圖:

我們使用

insert into msg(name,isread,content) value(‘LoverXueEr‘,0,‘hello‘);

向資料庫寫入資料來類比發送

可以發現我們每次insert,瀏覽器上就立即顯示我們發送的資料,達到了真正的即時

 

 

 

明天,我們就開始正式學習反向Ajax的不斷開的聊天系統

 

comet反向Ajax模型原理與模型(筆記一)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.