Node.js 指南(關於Node.js)

關於Node.js

做爲異步事件驅動的JavaScript運行時,Node旨在構建可伸縮的網絡應用程序,在下面的「hello world」示例中,能夠同時處理許多鏈接,在每次鏈接時都會觸發回調,可是若是沒有工做要作,Node將會休眠。git

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}/`);
});

這與目前使用OS線程的更常見的併發模型造成對比,基於線程的網絡效率相對較低且很是難以使用,此外,Node的用戶沒必要擔憂死鎖,由於沒有鎖。Node中幾乎沒有任何函數直接執行I/O,所以進程永遠不會阻塞,因爲沒有任何阻塞,可擴展系統在Node中開發很是合理。github

若是不熟悉這種語言,有一篇關於阻塞與非阻塞的完整文章。segmentfault

Node在設計上與Ruby的Event Machine或Python的Twisted等系統相似,並受其影響,Node進一步採用事件模型。它將事件循環呈現爲運行時構造而不是庫,在其餘系統中,始終存在阻塞調用以啓動事件循環。一般,行爲是經過腳本開頭的回調來定義的,最後經過阻塞調用來啓動服務器,如EventMachine::run()。Node在執行輸入腳本後簡單地進入事件循環,當沒有更多回調要執行時,Node退出事件循環,此行爲相似於瀏覽器JavaScript — 事件循環對用戶隱藏。瀏覽器

HTTP是Node中的一等公民,設計時考慮了流媒體和低延遲,這使得Node很是適合Web庫或框架的基礎。服務器

僅僅由於Node沒有線程設計,並不意味着你沒法利用環境中的多個核心優點,子進程能夠經過使用咱們的child_process.fork() API生成,而且設計爲易於與之通訊,基於相同的接口構建的是羣集模塊,它容許你在進程之間共享sockets,以便在覈心上實現負載平衡。網絡


上一篇:Node.js 指南(目錄)

下一篇:入門指南

相關文章
相關標籤/搜索