Comet (Server Push) on Turbogears

傳統Web的運作方式是建立在client對server的request上。也就是說client不送request,server就沒辦法主動送資料給client。這算是先天上的限制,沒辦法解決。而最近web application的花樣越來越多了,越來越多的網站打著web 2.0的口號,要把人們需要的所有軟體全都搬到web上面來。許多軟體都有即時性的資料更新問題,例如即時通訊、遊戲、股票行情等等,都會有許多資料主動從別的地方往我們送。但傳統的web不允許這種溝通方式,那究竟要怎麼實做這些功能?

最簡單的方法是polling,由client定時去問server有沒有需要更新的資料,理論上只要問得夠頻繁,user感覺起來就會像是即時的更新一樣。但polling會造成很多無謂的網路頻寬浪費,以及server的額外負擔,所以這麼作實在不是個好選擇。

另一個方法是最近開始有要被炒熱跡象的技術: Comet。 但說穿了,Comet其實就是許多年前蠻流行的CGI聊天室所用的Server Push技術。
這個方法一開始還是由client先對server建立連線,但是server在建立起連線後,送出的header中要把content-type設為”multipart/x-mixed-replace”,意思是server之後要分好幾次送出許多片段資料,請client保持連線不要中斷,並且把每次拿到的新片段取代之前的舊片段。接著,client就只要在這條保持不斷的HTTP連線上等著收server送過來的資料就好了。Comet利用這種特性,加上Ajax能在背景讀取server資料更新畫面的能力,變成一個開發rich client非常重要的技術。

但Comet不像Ajax那樣容易可以隨便套用到現成的http server上。它需要server上有適當的程式配合,而現成的open source工具最近才開始慢慢出現,似乎都還不太成氣候,更別提要整合進我慣用的Turbogears中了。

所以呢,我只好從頭開始作輪子了…(待續)

7 thoughts on “Comet (Server Push) on Turbogears

  1. Pingback: vgod’s blog » Comet (Server Push) on Turbogears (2)

  2. Pingback: -TMA-1- » links for 2006-11-06

  3. 您好:
    您說只要server response Header 的 content-type = multipart/x-mixed-replace
    ,browser就能保值connect 不close, 但我是了之後,並不行,我使用XHR request to Servlet, servlet add content-type = multipart/x-mixed-replace, 但connect 還是關閉了,請問是哪裡做錯了嗎

  4. Pingback: HTTP Server Push – Comet | 當代科技 TechNow.com.hk

留言給我吧!