Node.js 入門:準備試跑
網頁通訊
之前根本不了解這些網頁程式通訊還有許多名詞存在(!) 頂多就是因為 HTML5 規格所連帶的 Web Socket 隨之亮相因而出名,平時也沒有在 Follow 國外 Geek 的相關資訊,所以剛好 Web Socket 的資訊有多到滿出來,才不小心知道並看了一些簡單的範例程式。
Browser 與 Server 之間,連線機制可分為兩類:
Browser 與 Server 之間,如果要達到 Real time 的機制有五種作法:
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
之前根本不了解這些網頁程式通訊還有許多名詞存在(!) 頂多就是因為 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 前輩的項目架構。
- Polling
- AJAX Comet
- 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
Comments
Post a Comment