Skip to content

azole/comet

Repository files navigation

comet

Demos - how to implement comet by javascript and jquery. Server side is implemented with PHP.

I. Polling (polling.html) --> 這應該不算是comet

利用javascript的setInterval,定時利用ajax或JSONP去輪詢server端是否有資料更新。

優點:容易實現,不需要特別的伺服器。

缺點:發送請求的頻率太低則資料更新不夠快速。頻率太高則浪費頻寬。

註:另外有一種叫做peggyback polling的東西,他是在client需要時才發送請求,例如客戶按下submit的時候,其實是要驗證資料,但在驗證資料後,若server端有事件/訊息要送,就一起送回來。其優點是對資源的消耗就少,但缺點就是事件會累積在server端,直到client自己發出一個請求。

II. Comet

Comet是一個Web的應用模型,在此模型中,request會被發送到server端並保持一個很長的存活期,直到timeout或是server端有事件發生,當該次request完成後,另一個長生存期的ajax request就會被送到server端去等待另外一個事件。

Comet的優點是因為client一直保持一個通道,所以server端可以即時將資訊送給client。

其實現可以分為兩類:long polling和streaming。

(i) AJAX (comet_ajax.html)

優點:即為Comet的優點。

缺點:1. php不是刷新,而是一直增加response的值。 2. 要能處理readyState=3的瀏覽器才能運作。

(ii) streaming - Forever IFrame (comet_iFrame.html)

Forever IFrame: 又名為 Forever Iframe(或者 hidden IFrame),在頁面中藏一個iframe,這個frame的src指向返回事件的server端路徑。

優點:實現簡單,所有有支援iframe的瀏覽器都能用。

缺點:無法處理錯誤或追蹤狀態。

(iii) streaming - Multipart AJAX (comet_ajax_multipart.html)

利用有支援multi-part的瀏覽器,像是Firefox來實作。AJAX請求被發出給server,並保持連通狀態,每次有事件到來時,一個multi-part response就會被寫出。

優點:即為Comet的優點。

缺點:1. PHP每次都是重新刷出,不需要處理字串。(相較於comet_ajax.html中的方式)2. 瀏覽器要能支援multi-part。(好像只有firefox有)

註:PHP須設定'Content-type: multipart/x-mixed-replace; boundary=endofsection',並留意後續輸出的寫法。

(iv) Long Polling

改良式的long polling:iFrame、multipart、ajax comet等方法都屬於「永遠不會斷線」的做法,但long polling是發一個長時間等待的request,當server有response時斷掉,接著再發一個新的request。看起來跟原本的polling很像,但原本的polling是透過setInterval等定時器,也就是不管server有沒有reponse,時間到就會斷線重連,比較浪費,而且會有時間差。

優點:容易實現錯誤處理與timeout管理。可用在所有的瀏覽器上。

缺點:

TODO: nodejs版的comet

About

Demos - how to implement comet by javascript and jquery. Server side is implemented with PHP.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages