Sunday, September 11, 2011

Node.js 入門:準備試跑

網頁通訊

之前根本不了解這些網頁程式通訊還有許多名詞存在(!) 頂多就是因為 HTML5 規格所連帶的 Web Socket 隨之亮相因而出名,平時也沒有在 Follow 國外 Geek 的相關資訊,所以剛好 Web Socket 的資訊有多到滿出來,才不小心知道並看了一些簡單的範例程式

Browser 與 Server 之間,連線機制可分為兩類:
  • 同步 (Synchronous)
1. Request and Response
最基本的電腦通訊概念,可以參考維基百科說明。下圖上半部分的操作即為 Request-response,Server 一次處理一個 Client 的請求,一一做回復; 而 Client 一次做一個請求,並等候 Server 一一回傳。Server 和 Client 同時為某件項目一個等待另一個處理。
圖片來源:http://adaptivepath.com/ideas/ajax-new-approach-web-applications
  • 非同步 (Asynchronous)
Client 所做的請求,不用等候 Server 回應,仍可持續做其他的事情。而 Client 則一一接收 Server 端處理完畢之後得內容,例如:動態的更新網頁內容。這項技術又稱為 AJAX (Asynchronous JavaScript and XML) ,藉由操作 XMLHttpRequest 物件達到非同步的動態效果,因此 AJAX 在熟悉 JavaScript 的 IT 人士眼中,它並不是新技術僅為『新瓶裝舊酒』的商業口號。當然 IT 技術的包裝也會帶來軟體工程的另一波商機,例如:Cloud Computing 雲端運算,就是一個非常洽當的案例。

JosephJ 這樣做就對了![2.] 一文除了個別介紹之外,還有用 Firebug 驗證連伺服器以及瀏覽器之間的連線時間。簡單的列出閱讀筆記,亦引用 JosephJ 前輩的項目架構。

Browser 與 Server 之間,如果要達到 Real time 的機制有五種作法:
  • Polling 
Client 端的 JS 模擬使用者發出週期性 Request 給 Server,然後藉由 AJAX 的方法更新最新的資料訊息。這個實作方式屬於前述分類 Asynchronous (非同步),且請求一得到回覆立即中斷連線。
Server 端的 Polling,後端程式週期性更新資料自動回傳,而 Client 端不斷取得全部資訊一一動態置放。為持續保持連線不中斷的作法。
  • Comet with iframe
與 AJAX Comet 類似,也有持續保持連線不中斷的問題。
  • Long Polling
『發一個長時間等待的 Request、當伺服器有資料 Response 時立刻斷掉、接著再發一個新的 Request』,是講求即時的社群網站 Facebook, Plurk 採用的方法。改善前兩個實作方法產生的長時間連線問題,它 Timeout 或是更新資料實才會連線。
  • Web Socket
Browser 與 Server 為雙通道,可以隨時傳遞訊息並更新。程式碼的撰寫兼具 Client 端 Polling 週期性詢問,亦可在 Server 端週期性主動傳遞資料,兩個週期可以設定不相同,其他的連線 Web Socket 會自動處理好,沒有連線問題(?)

圖片來源:http://www.slideshare.net/amix3k/comet-with-nodejs-and-v8, 14th slide

Node.js 特色
  • JavaScript Engine v8
  • Non-blocking IO
  • module-based system
  • built-in HTTP server library
  • Event-driven
因為 Non-blocking IO 特性,node.js 成為下一代或是實作 Real time 的網頁應用程式的焦點。Long Polling 作法主流目前為 node.js,因此整理這些概念以及學習跑幾個範例,如果錯誤,敬請指教。

Reference

[1.] Ajax: A New Approach to Web Applications
[2.] Browser 與 Server 持續同步的作法介紹 (Polling, Comet, Long Polling, WebSocket)
[3.] Comet with node.js and V8

No comments:

Post a Comment