以下是官方的描述:
Node.js 是一個基于 Chrome V8 引擎的 javaScript 運行環境。Node.js 使用了一個事件驅動、非阻塞式 I/O 的模型,使其輕量又高效。Node.js 的包管理器 npm,是全球最大的開源庫生態系統。當前的服務器處理請求的方式有什么問題? 在Tomcat之類web容器中,對于每個連接都需要一個線程,當有新的http請求進來后,web容器便則會從線程池中獲得一個線程來處理該請求(每個線程上下文大約占用 2 MB 的內存。在一個擁有 4 GB RAM 的jvm中,理論上最大的并發連接數量是 2,000個用戶,當然,Tomcat容器也可以選擇NIO方式來提高并發)。
Node對此進行了進一步的優化,對于每個連接,在 Node 引擎的進程中生成一個事件,而非分配一個線程或者采用多路復用。通過這種方式,nodeJs可以極大地降低內存資源的使用,實現其宣稱的“能支持數萬個并發連接”的目標。
由于nodeJs非阻塞高性能等特性,非常適合于大型高流量網站,此外,還可以使用它來開發一些快速移動Web框架。除了Web應用外,NodeJS也被應用應用程序監控、媒體流、遠程控制、桌面和移動應用等等。
RESTful API 對于不需要服務端復雜處理的請求,如:僅用于接收幾個參數,解析它們,簡單查詢數據庫,根據結果組合一個具有少量文本信息的響應返回給用戶。
前后端分離 在非SPA方式的開發模式下,前端負責View和Controller層,后端負責Model層。由于前端人員更熟悉js而非Java,因此更便于View與Controller在前端的交互。
隊列 對于高并發寫的場景,每秒有數千條或更多寫數據庫的請求,并且這些請求遠大于數據庫能夠支撐的tps.對于這種情況,Node 將它們寫入一個內存排隊機制(如redis),另一個單獨進程可以從那里將它們寫入數據庫。 (這一點與使用Java來處理基本類似,大多數情況下,從前后端分離的角度來看,更適合在后端使用Java來實現)
以下是一個nodejs的Hello World :
var http = require('http');server = http.createServer(function (req, res) {res.writeHeader(200, {"Content-Type": "text/plain"});res.end("Hello World/n");});server.listen(8000);console.log("httpd start @8000");jquery是一個運行在客戶端的javascript庫,主要提供操作DOM等等的簡化操作 node.js是運行在服務器端的程序,用來解釋和執行js語言, 它不僅提供js類庫,更是一個高性能的js處理平臺,其側重點在于提高并發處理能力。
對于線程池方式來處理請求的方式,它依然可能發生阻塞。原因在于,線程池的線程數量通常有限制的,如果所有線程都被阻塞(例如網速慢,或者被人惡意占用連接),那么未分配線程的請求將會排隊等待,從而發生阻塞。 Netty等網絡框架采用多路復用方式,只需要一個線程或者少量線程,就可以處理大量請求。從本質上來說,Node的原理與其有相似的地方,其不同之處在于,Node比Netty更進一步,拋棄了多線程的處理方式,而完全采用事件處理的方式。
http://www.ibm.com/developerworks/cn/opensource/os-nodejs/
新聞熱點
疑難解答