因為剛好看完所以順便翻譯一下幫助後面的人,內容如果有錯請糾正,因為非正式僅供參考,專有名詞我就不翻譯了這樣比較準。
原文 :https://nodejs.org/en/about/
Node 是一個分同步事件驅動的javascript runtime,被開發來建立可擴展性的網路應用程式。在底下的 "hello world" 範例中,許多連線可以同事被處理。在每次連接時callback 才會被觸發,如果沒有工作Node就會進入睡眠。
原文 :https://nodejs.org/en/about/
Node 是一個分同步事件驅動的javascript runtime,被開發來建立可擴展性的網路應用程式。在底下的 "hello world" 範例中,許多連線可以同事被處理。在每次連接時callback 才會被觸發,如果沒有工作Node就會進入睡眠。
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World\n');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
相較於現今採用多threads 來達成同時處理多連線請求的模型。Thread-based networking 相對沒有效率,也很難使用。此外,因為根本沒有鎖死資源,Node 使用者將不須擔心process進入死結。在Node 幾乎沒有方法直接存取I/O,所以process永不Block。因為沒有Block,需要延展性的系統非常適合在Node 開發。
如果上面面有些字不懂,這裡有專門介紹Blocking vs Non-Blocking的章節.
與Node 有類式的設計跟影響設計的系統有Ruby's Event Machine 和Python's Twisted。Node的模式又更先進一點, Node的event loop 模式是一個runtime 架構,而不是一個類別庫。在其他系統中,在啟動 event-loop模式時一定會被Block住,通常Block會在會在script 開始時,直到伺服器啟動了。在Node 中沒有這類的啟動呼叫。Node 只會在執行script時才會進入event loop 。Node 會在沒有任呵callbacks 要被執行時離開。
這樣的行為就跟執行JavaScript 一樣 — 對使用者來說event loop是被隱藏。
HTTP 在Node 中是first class citizen,設計目的是為了streaming 跟讓核心低延遲。這個特性讓Node 適合被建置web library 跟framework。
雖然Node 被設計是沒有threads,但不代表你不能在你的環境中進階的使用多核心。子進程可以由
child_process.fork()
API 來做置換,而且被設計在父子進程(processes)是很容易溝通的。 上面的API 都是基於 cluster
module,讓你可以分享sockets 在每個進程之間達到平均負載平衡。