1. 程式人生 > >第一章(歡迎進入node.js世界)

第一章(歡迎進入node.js世界)

本章內容

1:Node.js是什麼

2:伺服器端javascript

3:node的非同步和事件觸發本質

4:node為誰而生

5:node程式示例

  1.1

  node.js他的首次亮相是在2009年,非常流行,它在github受關注專案排行榜上位列第二(https://github.com/joyent/node),node創始人Ryan Dahl 2009年柏林JSCONF的網站上有node創始人Ryan Dahl第一次介紹node的視訊。(已被拿掉)

  官網上(http://www.nodejs/org)給node下的定義是:“一個搭建在Chrome JavaScript執行時上的平臺,用於構建高速、可伸縮的網路程式。node.js採用的事件驅動、非阻塞I/O模型,使他既輕量又高效,併成為構建執行在封不上裝置鎖的資料密集型實時程式的完美選擇。‘’

  無論好壞,Javascript都是世界上最流行的程式語言,幾乎遍佈web上的每個角落,比較引入注目的先行者是Google地圖和gmail,但類似的web應用有一大堆,從Twitter到facebook,再到github。

  現代化JavaScript虛擬機器的效能正在改變著可以構建在web上的應用型別。一個很有說服力的、坦率地說是令人震撼的例子是jslinux,一個執行在JavaScript中的PC模擬器,它能載入Linux核心,可以利用終端會話與其互動,還能編寫C城西,而這一切都是在瀏覽器中完成的。

  json是目前非常流行的資料交換格式,並且還是JavaScript原生的。

  有些nosql資料庫中庸的就是JavaScript語言(couchDB和MongoDB)。

  JavaScript是一門編譯目標語言,現在有很多可以編譯成JavaScript語言。

  node用的虛擬機器V8會緊跟ECMAScript標準。換句話說,在node中如果想用新的JavaScript語言特性,不用等到所有瀏覽器都支援。

  JavaScript成了一種引人矚目的編寫服務端應用的語言,Node已經賺足了眼球。但JavaScript知識整幅拼圖中的一塊,node使用Javascript的方式更加有趣。

  

  1.2非同步和事件觸發:瀏覽器

  node為服務端JavaScript提供了一個事件驅動的、非同步的平臺。

它把JavaScript帶到了服務端中的方式跟瀏覽器把JavaScript帶到了客戶端的方式幾乎一模一樣。他們都是事件驅動(事件輪詢)和非阻塞的I/O處理(用非同步I/O)。

  例:

  $.post('',function(data){

  console.log(data);

  //指令碼繼續執行

  });

 

  var = data = $.post('/resource.json');

  console.log(data);//被阻塞,需要執行完上一行再執行

  

  1.3非同步和事件觸發:伺服器

  在node中,I/O幾乎總數在主事件輪詢之外進行,是的伺服器可以一直處於高效並且隨時能夠做除響應的狀態,就像Nginx一樣。這樣程序不會受I/O限制,因為I/O延遲不會拖垮伺服器,或者像在阻塞方式下那樣佔很多資源。因此曾經在伺服器上是重量級的操作,在node伺服器上仍然可以是輕量級的。

  1.4DIRT程式

  Node所針對 的應用程式有一個專門的簡稱:DIRT。他表示資料密集型實時程式(data-intensive real-time),因為node自身在I/O上非常輕量,它善於將資料從一個管道混排或代理到另一個管道上,這能在處理大量請求時持有很多開放的連線,並且只佔用一小部分記憶體,它的設計目標是保證相應能力,跟瀏覽器一樣。

  對於web來說,實時程式是個新生事物。現在有很多web程式提供的資訊幾乎都是即時的,比如通過白板線上協作,對臨近公交車的實時精準定位,以及多人線上遊戲。不管是實時元件增強已有程式,還是打造全新的程式,web都在朝著響應式和協作型環境逐漸開發。而這種新型的web應用程式需要一個能夠實時響應大量併發使用者請求的平臺來支撐他們。這正是node所擅長的領域,並不侷限於web程式,其他的I/O負載比較重的程式也可以用到它。

  Browserling就是一個用Node開發的DIRT程式,它是一個很好的範例。在這個網站上我們可以在瀏覽器中使用各種瀏覽器。這對web前端開發工程師來說特別有用。

  

  1.5:預設DIRT

  node從構建開始就有一個事件驅動和非同步的模型。JavaScript從來沒有過標準的I/O庫,那是服務端語言常見的配置。對於JavaScript而言,這總數有宿主環境決定的,JavaScript最常見的宿主環境,也是大多數開發人員所用的,就是瀏覽器,他是事件驅動和非同步的。

  node重新實現了宿主中哪些常用的物件,儘量讓瀏覽器和伺服器保持一致,比如:

  計時器API(setTimeout)

  控制檯API(console.log)

  

  1.5.1簡單的非同步程式

  $.post('',function(data){ console.log(data) })

  require(res).readFile('./resource,json',function(error,data){  })

  1.5.2hello world HTTP伺服器

  var http = require('http');

  http.createServer(function(req,res){

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

  res.end('hello world')

  }).listen(3000);

  console.log('server running')    

  1.5.3流資料

  node在資料流和資料流動上也很強大。你可以吧資料流看成特殊的陣列,只不過陣列中的資料分散在空間上,而資料流中的資料時分散在時間上的,通過將資料一塊一塊地傳送,開發人員可以每收到一塊資料就開始處理,而不用等到所有資料都到全了再做處理。

  只要有新的資料塊準備好,就會激發data事件,當所有資料庫都載入完之後,會激發一個end事件。

  node中也有可寫資料流,可以往裡寫資料塊。當http伺服器上有情趣過來時,對其進行相應的res物件就是可寫的資料流的一種。