天天看點

Comet (Server Push)

傳統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中了。

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

繼續閱讀