Comet簡介
Comet,一種技術上的理念,對於http 1.0協定來說,並沒有雙向這回事,許多結果都必須等待,等待,不停的等待。現代人最受不了的就是等待,連loading 都要有GIF 轉轉轉打發時間。
因此我們需要開通一個可以長時間等待(long polling),等到資料有變動的時候立即給予回應(response),接著再繼續等新的回應,重點在於此通道永遠不中斷。
這樣子會比較節省資源嗎?這大概是第一個最主要的思考問題,介紹一下歷史的演進:
其實對於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!
相關連結:
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!
相關連結:
留言
張貼留言