解決大規模 I/O 的利器Node.js

什麼是Node.js

Node.js 是一個基於 Chrome V8 引擎的 JavaScript 運行環境。

Node.js 使用了一個事件驅動、非阻塞式 I/O 的模型,使其輕量又高效。

Node.js 的包管理器 npm,是全球最大的開源庫生態系統。

解決大規模 I/O 的利器Node.js

注:V8是谷歌開發的,目前公認最快的 Javascript 解析引擎,libuv 是一個開源的、為 Node 定製而生的跨平臺的異步I/O庫。Node.js已被IBM、Microsoft、Yahoo、Walmart、Groupon、SAP、 LinkedIn、Rakuten、PayPal、Voxer和GoDaddy等企業採用。

解決大規模 I/O 的利器Node.js

解決大規模 I/O 的利器Node.js

Node.js 的特點

解決大規模 I/O 的利器Node.js

作為後端JavaScript的運行平臺,Node保留了前端JavaScript中些熟悉的接口,沒有改寫語言本身的任何特性,依舊基於作用域和原型鏈,區別在於它將前端中廣泛應用的思想作用到了服務器端。

1、它是一個Javascript運行環境

2、依賴於Chrome V8引擎進行代碼解釋

3、事件驅動

4、異步I/O

5、輕量、可伸縮,適於實時數據交互應用

6、單進程,單線程

7、跨平臺


Node.js優點。採用事件驅動、異步編程,為網絡服務而設計。其實Javascript的匿名函數和閉包特性非常適合事件驅動、異步編程。而且JavaScript也簡單易學,很多前端設計人員可以很快上手做後端設計。Node.js非阻塞模式的IO處理給Node.js帶來在相對低系統資源耗用下的高性能與出眾的負載能力,非常適合用作依賴其它IO資源的中間層服務。Node.js輕量高效,可以認為是數據密集型分佈式部署環境下的實時應用系統的完美解決方案。Node非常適合如下情況:在響應客戶端之前,您預計可能有很高的流量,但所需的服務器端邏輯和處理不一定很多。

Node.js缺點。可靠性低,單進程,單線程,只支持單核CPU,不能充分的利用多核CPU服務器。一旦這個進程崩掉,那麼整個web服務就崩掉了。


Node.js簡史

解決大規模 I/O 的利器Node.js

Ryan Dahl

2009年由瑞安·達爾(Ryan Dahl)開發了Node.js

2009年11月Dahl在歐洲JSConf大會上展示了Node.js項目

2010年1月,一款名為“npm”的軟件包管理系統誕生

2011年6月,微軟和Joyent(達爾的公司)共同合作,把Node.js移植到了Windows系統上面

2012年1月,達爾離開了Node.js項目,開發工作由他的同事以及npm創始人艾薩克·施呂特(Isaac Schlueter)繼續主持

2014年2月,蒂莫西·費里斯(Timothy J. Fontaine)接任項目主管

2015年初成立Node.js基金會。基金會得到了IBM、Intel、微軟、Joyent等公司的支持

解決大規模 I/O 的利器Node.js

bat對中文Node.js的支持

npm包管理器

npm是Node.js附帶的包管理器。npm是一個命令行工具,用於從NPM Registry中下載、安裝Node.js程序,同時解決依賴問題。npm提高了開發的速度,因為它能夠負責第三方Node.js程序的安裝與管理。NPM是隨同NodeJS一起安裝的包管理工具,能解決NodeJS代碼部署上的很多問題,常見的使用場景有以下幾種:

允許用戶從NPM服務器下載別人編寫的第三方包到本地使用。

允許用戶從NPM服務器下載並安裝別人編寫的命令行程序到本地使用。

允許用戶將自己編寫的包或命令行程序上傳到NPM服務器供別人使用。

Node.js示例

用Node.js撰寫的HTTP Server版hello world示例:

var http = require('http');

http.createServer(function (request, response) {

response.writeHead(200, {'Content-Type': 'text/plain'});

response.end('Hello World\n');

}).listen(8000);

console.log('Server running at http://127.0.0.1:8000/');

另一個簡單的TCP服務器示例,監聽(Listening)端口7000並輸出 (echo)之前輸入的消息:

var net = require('net');

net.createServer(function (stream) {

stream.write('hello\r\n');

stream.on('end', function () {

stream.end('goodbye\r\n');

});

stream.pipe(stream);

}).listen(7000);

v6.10.3 主要更新內容

module:

The module loading global fallback to the Node executable’s directory now works correctly on Windows. (Richard Lau) #9283

src:

fix base64 decoding in rare edgecase (Nikolai Vavilov) #11995

tls:

(Trevor Norris) #11947

(Ben Noordhuis) #11898

(jBarz) #11776

fix rare segmentation faults when using TLS

總結

Node.js 從來不是用於解決大規模計算問題而創建的。它的出現是為了解決大規模I/O 的問題,並且在這一點上做的非常好;Node.js 的開發中99%的問題是由誤用阻塞操作而造成的;如果項目中不包含CPU密集型操作,也不需要訪問任何阻塞的資源,那麼你就可以利用的 Node.js 的優點。

相關推薦

推薦中...