Node.JS

Node.js 是個架在 Google V8 JavaScript 引擎之少的事件驅動式的輸入輸出模組 (evented I/O),它的設計是根據在其他語言的框架 (framework) 像 Ruby 的 Event Machine 以及 Python 的 Twisted. Node 的目的是能夠提供一個簡單的方式來創作高效能和具擴充性的及時性網站應用程式。

JavaScript一般都是執行瀏覽器上。近年來,CommonJS、Jaxer 或 Narwhal 等等的框架不斷的出現,希望把 JavaScript 帶到伺服端的環境。跟這些選擇比起來 Node 有些不同,因為它是事件導向而不是執行緒導向。像是 Apache 這類用來提供 CGI 執行的網站伺服器是屬於執行緒導向,因為每當有一個請求送達的時候就會觸發一個系統執行緒產生。執行緒導向模式不具備同時處理大量連線的能力,因此也不適合用來設計及時性應用程式。
Node 透過事件循環 (event loop) 的方式取代執行緒,這樣就能夠同時處理上萬的連線。當一個連線請求 (request) 送達的時候作業系統會通知 Node,收到了通知 Node 會執行回呼涵式。每個連線只會佔了小小的堆積配置。然而,在ㄧ個需要處理大量連線的系統下,事件導向的 Node 在記憶體上也比較有效率。在 Node 的框架裡沒有鎖,它的涵式幾乎不會直接用到 I/O,所以程式行程也不會被鎖住。使用 Node 也程式的人也不需要為了死鎖 (deadlock) 而煩惱。

Node 的優點在於因為伺服器大多的時間都利用在等在 I/O 操作,而這些操作都遠比記憶題操作慢。Node 的 I/O 操作都是用非同步的方式,這樣就應許在處理I/O操作的同時程式行程繼續處理連線請求。

以下是一個用 Node 寫的 HTTP 伺服器,它接收的每一個請求都會回 ”Hello World”。

var sys = require(‘sys’), http = require(‘http’);

http.createServer(function(request, response) {
response.writeHead(200, {‘Content-Type’: ‘text/plain’});
res.end(‘Hello World\n’);
}).listen(8124);

sys.puts(‘Server running at http://127.0.0.1:8124’);

這程式載入了 sys 與 http 模組,然後建立了一個 HTTP 伺服器。被傳遞到http.createServer 的匿名函式會在每一個請求連線的時候被呼叫。當伺服器啟動的時候,它會告訴你它目前監聽埠號 8124。

Node 是一個令人興奮技術建立在另外一個非常了不起的技術上: Google 的V8 JavaScript 引擎。Node 這框架已經被科技界注意到,在加上它的模組化系統,在網路上已經有許多第三方的模組可以使用,來加強這完整框架。