11/05/2006

Comet For Ruby on Rails and Mongrel

Comet 這個詞出自於 Dojo 作者 Alex Russell 在 2006/3/3 發表的 Comet: Low Latency Data for the Browser 。簡單來說就是讓 Browser 跟 Server 作一個長時間不斷線的連線,然後我們要在 Web 撰寫 Rich Client 的程式就相當的容易。有人推測這可能是一個超越 AJAX 的技術。

Comet 跟一般常用的 AJAX Polling 作法有相當的不同。Polling 簡單來說就是每過一段時間,去問 Server 有沒有變化,這個作法的好處是不更改現行的 Web Server 架構即可做到,缺點是會造成 Server 跟頻寬相當大的負擔。下面有一份 Alex 畫的 AJAX 與 Comet 之間流程比較圖



至於 Comet 的目的是讓 Client Server 保持連線,Server 狀態一有改變,就傳一份給 Client。作法有 HTTP_StreamingServer Push,HTTP Streaming 我還沒有 survey ,不過 Server Push 技術我發現 vgod 的文章講的很好,也很清楚
這個方法一開始還是由client先對server建立連線,但是server在建立起連線後,送出的header中要把content-type設為” multipart/x-mixed-replace”,意思是server之後要分好幾次送出許多片段資料,請client保持連線不要中斷,並且把每 次拿到的新片段取代之前的舊片段。接著,client就只要在這條保持不斷的HTTP連線上等著收server送過來的資料就好了。
Comet 的好處是不用像 Polling 一樣耗費太多不必要的頻寬,壞處是 Web Server 架構要修改程式成 Comet 的運作方式,在Browser 部份也有問題要修改,因為 IE 不下載完成就不顯示網頁,必須使用 iframe 或是 Flash 來幫忙做到抓取即時資料的任務。在目前來說,因為缺乏 Server 大環境的支援,短期內大流行的機率不高。目前已經有 Lightstreamer 的即時財經訊息,感覺很不錯。(下圖為 lightstreamer 裡面的即時股市資訊
這是目前使用 Comet 技術的公司已經有
介紹完 Comet 了之後,你認為這還只是構想而已嗎?我發現到 Ruby on Rails 社群對於 Comet 是相當接受,現在已經有 Comet 的 Plugin : Juggernaut 。這個 Plugin 附帶了一個用 Ruby 寫的 Push Web Server,在 Browser 端使用 Flash 6 來接收 Server Push 過來的資料,可以說是實做相當的完整。這裡也有一份簡介。另外也有人寫了一份擁有 Comet 功能的 Mongrel 。看到這邊,已經很興奮了。我們可以使用 Juggernaut 的 Flash 6 Client ,然後 Server 端使用 Reverse Proxy 轉到 Mongrel Cluster當作 Web Server ,這樣環境架設問題似乎都解決了。



仔細看看這種作法, Reverse Proxy + Mongrel Cluster 幾乎也是 Ruby on Rails 社群的標準作法,不論速度或是穩定度都表現都相當不錯。而且這種搭配方式可以用最少的伺服器轉換成本(不用改寫 Apache 或 Lighttpd),而達成 Comet 的目標。也就是說,Comet On Rails 已經不是只聞樓梯響的階段了,只要 Comet Mongrel 進入 Stable 階段,隨時可以給企業使用。

參考閱讀
  1. Comet: Low Latency Data for the Browser
  2. Comet : 超越 Ajax 的新技術?
  3. Juggernaut: Comet for Rails?

3 則留言:

vgod 提到...

你好,我的ID是vgod,不是vogod喔..XD

thegiive 提到...

Sorry ,已經更正

Sting Tao 提到...

逛到你的網站

您看起來很厲害....有在創業嗎?
我正在用RoR弄一個拍賣工具網站...
http://www.joobii.info
歡迎指教...

Sting