拋棄AJAX?! “伺服器推”之初體驗

來源:互聯網
上載者:User

以聊天室為例子,說起寫聊天室,大家隨口都能說出個大概:

即每隔一段時間向伺服器非同步請求更新,用四個字母代替之就是AJAX。

 

其實我們轉念想想,我們使用AJAX的目的就是使頁面能即時地更新,倘若我們的動態網頁面能夠即時地更新,我們幹嘛還費這些周折?

 

先看一個小實驗:

1 <?php2 while(true){3         echo 'Hello';4         sleep (1000);5 }6 ?>

如果如我們所願,則頁面將每隔一秒都會顯示一個‘hello’

 

看到這,也許知道我們聊天室的訊息顯示頁面該怎麼寫了,請看虛擬碼。

 1 <?php 2 $currentData = getData(); 3 while (true){ 4       $differences=getData(); 5       if ($differences!=$currentData){ 6                    echo $differences; 7                    } 8       sleep (10000); 9 }10 ?>

可惜光是這樣是不能成功滴,因為我們還沒考慮到php的緩衝和緩衝問題。

 

php預設會緩衝內容,防止http報文的Header和Data分離。且php會緩衝頁面內容直至程式結束再將頁面輸出。

 

知道原因就好辦了。好在php提供了關閉緩衝和緩衝的方法。

直接在前面加上

1 output_buffering=02 ob_end_flush();3 set_time_limit(0);

 

則變為:

 1 <?php 2 output_buffering=0; 3 ob_end_flush(); 4  5 while(true){ 6         echo 'Hello'; 7         sleep (1000); 8         flush(); //強制使PHP輸出 9 }10 ?>

你會發現第一個顯示hello的已經成功了!

我們的訊息頁面就變為

 1 <?php 2 output_buffering=0; 3 ob_end_flush(); 4  5 $currentData = getData(); 6 while (true){ 7       $differences=getData(); 8       if ($differences!=$currentData){ 9                    echo $differences;10                    flush();11                    }12       sleep (10000);13 }14 ?>

 

 

但是在項目最終的實現上,用戶端也存在問題:

有些瀏覽器也會在顯示之前,緩衝接收到的內容。例如 Netscape 瀏覽器會在接受到換行或 html 標記的開頭之前緩衝內容,並且在接受到 </table> 標記之前,不會顯示出整個表格。 

IE甚至只有當接受到的256個位元組以後才開始顯示該頁面,所以必鬚髮送一些額外的空格來讓這些瀏覽器顯示頁面內容。

 

至此我們已經用”伺服器推“解決了的即時更新的問題。其他架構也與普通思路無異,就不再累述了。

 

有興趣的同學可以著手寫一個了。呵呵。

 

歡迎大家一起交流。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.