• 沒有找到結果。

Server 端採用 LAMP 與 Node.js 做為這次開發的環境。

LAMP 是由 Linux、Apache、MySQL 與 PHP 所組成之運行動態網頁 服務的伺服器軟體,架構出「友增吾簡」的 Database 與部份應用服務。

「友增吾簡」選擇 Node.js 作為 Server 的解決方案。Node.js 是建築 在 Google Chrome 所開發、是目前最快速的 V8 JavaScript 引擎上,以非 阻塞(non-blocking)的概念作為基礎,提供相對於一般網頁伺服器(例 如 Apache)更快速地處理效能。Node.js 是一種新興的技術,在國外的開 發者中可謂炙手可熱,而國內也逐漸有愈來愈多的開發者持續關注當 中。針對需要即時性的回應,現在熱門的 Facebook、Plurk 或者是 Newsfeed 等皆採用 Node.js 作為 Server 的解決方案。

(一) API 訂定

最初「友增吾簡」在開發的時候,應用多種方式架設 Server,致使系 統經常重新撰寫。Server 端一旦變更,也影響 Client 端跟著修改,因此我 們訂定 API,當作 Server 端與 Client 端溝通的介面,讓雙方的變更不會 有直接影響。「友增吾簡」在開發過程中,程式介面的設計首先要使系統 的職責得到合理劃分。良好的介面設計可以降低系統各部分的相互依 賴,提高組成單元的內聚性,降低組成單元間的耦合程度,從而提高系 統的維護性和擴充功能性,故 API 的設計十分重要。

圖 3-5:API 訂定清單

(二) 即時回饋-Comet

Comet 是一種很早就存在的技術,過去在實現上主要是透過客戶端 的連接埠,或是服務器端的遠程調用。因為技術的發展比較緩慢,所以 沒有為 Comet 的實現提供很好的支援。最近幾年,因為 AJAX 技術的普 及,一些受歡迎的應用如 Facebook、Plurk、Gmail 與 Gtalk 在實作中使 用了這些技術,同時 Comet 可以解決現實應用中許多的需求。基於這些 原因,「友增吾簡」採用 Comet 技術。

「友增吾簡」對 Comet 做了許許多多的改進,支援大量並發的長連 接,使用長時間的輪詢(Long Polling)方式運行,手機與 Web 其實都是 以同樣的方式對 Server 取得資料,作法是發一個長時間等待的請求

(Request),當伺服器有資料回應(Response)時就立刻斷掉,接著再發 一個新的請求。

圖 3-6:Long Polling 的運作

(三) 使用前端的語言來寫 Server-Node.js

JavaScript 不只可以跑在瀏覽器中,還可以當作網站的伺服器。這個 想法是非常新鮮有趣的,隨著 AJAX 技術的興起,大家開始投入 JavaScript 的開發。Node.js 使用了 Google 高效能 V8 Engine 的服務框架,透過 JavaScript 實作。它提供了非阻塞 I/O 與 JavaScript 提供的閉包和匿名函 數結合,使之成為撰寫高流量網路服務的優秀平台。

「友增吾簡」使用 Node.js 作為 Server 上的開發平台,主要透過 JavaScript 所撰寫,資料儲存於 MySQL 中。因應即時性所產生的大量查 詢請求,因此需要高效能的 Node.js 來達成。

Client 端向 Server 端發出請求時,Node.js 會不斷地對 MySQL 做查 詢。資料回應搭配 Comet 技術,因此請求端才能快速地取得資料。

圖 3-7:Node.js 運作畫面

相關文件