2011年6月27日 星期一

[分享] 為何採用NodeJS實做Comet技術

Comet簡介

Comet,一種技術上的理念,對於http 1.0協定來說,並沒有雙向這回事,許多結果都必須等待,等待,不停的等待。現代人最受不了的就是等待,連loading 都要有GIF 轉轉轉打發時間。

因此我們需要開通一個可以長時間等待(long polling),等到資料有變動的時候立即給予回應(response),接著再繼續等新的回應,重點在於此通道永遠不中斷

這樣子會比較節省資源嗎?這大概是第一個最主要的思考問題,介紹一下歷史的演進:




  • 壓住F5使頁面可以獲得立即更新
  • 寫javascript 一段時間更新頁面一次
  • 頁面塞一個iframe 問執行db query有沒有更新
  • ajax方式詢問資料

其實對於client來說,重點在於有沒有新的資料可以搬回家,所以一直不斷地查詢是沒有必要。

拿餐廳來比喻的話,ajax如果是服務生,那他是個聽話的服務生,發出什麼命令,就回覆相對應的資料(就算空的也會去問)。

假如你的服務生換成comet,他就把客人當豬餵食,一直都在廚師那邊等候,一出菜就端到你面前,除非你跟comet說停止為止(但是有可能廚師還繼續出菜,下次再進來餐廳就會看到滿漢全席)。




為何使用NodeJS



NodeJS是使用Google V8 javascript engine 做為實現基礎,編寫模式及規範依據 commonJS,CommonJS本身只是規範並不是一種語言,而NodeJS是將CommonJS規範實現的程式。

而NodeJS本身就是一種Web service,可以視為C 語言界的 jetty,執行的腳本為javascript檔案,因此整個思考邏輯為 Event loop, 而並不是batch 的觀念執行程式,範例程式如下圖:


Event Loop,正是NodeJS的優勢所在,基於non-blocking,用語意解釋來說可以為『當...,才....』,『當資料撈到,才回應給使用者』,『當程式死掉,才回報給開發者』,在什麼情況之後才會出現事件的處理,也就是Callback,這樣才有辦法將Comet的精隨實現。

另外,NodeJS也是少數不依附於JVM底下的Comet實做,而且有許多 Module可以使用,第三方模塊管理(NodeJS package management) NPM的提供。

最後,登高一呼,Javascript Rock....支持一下NodeJS Taiwan!

相關連結:

沒有留言:

張貼留言

Facebook