學習NodeJS第一天:node.js引言

來源:互聯網
上載者:User

標籤:blog   http   io   os   使用   java   ar   strong   檔案   

Node.JS 是資深 C 程式員 Ryan Dahl(http://four.livejournal.com/)的作品,依據 Google 著名的開源 JavaScript 引擎 V8 來進行二次開發的 Web I/O 伺服器(http://nodejs.org/)。V8 本身是非常快的 JavaScript 引擎,處理 JS 執行啟動並執行速度非常高。相關測試表明,FireFox、Opera 和 IE 的 JS 引擎速度都不及 V8 來得快。而且,還可以說,只要瀏覽器之間的 JS 引擎大戰一日不減,NodeJs 就可以從中受益。有競爭才有進步:)。

NodeJS 基本用法也是十分簡單明了的,我們看看一下這一句,就是最簡單的代碼:

[javascript] view plaincopy 
  1. var  
  2.      sys  = require(‘sys‘)  
  3.     ,http = require(‘http‘);  
  4. http.createServer(function (req, res) {  
  5.     res.writeHead(200, {‘Content-Type‘: ‘text/plain‘});  
  6.     res.write(‘Hello World‘);  
  7.     res.close();  
  8. }).listen(8006);  
  9. sys.puts(‘Server running at http://127.0.0.1:8006/‘);  

 

以上語句 var http = require(‘http‘);http.createServer(function (req, res) {…}); 就是建立一個 HTTP 伺服器,偵聽來自用戶端的請求,匿名參數中的 req 和 res 分別代表請求對象和響應對象。NodeJS 把邏輯語句寫在一個函數中,說明建立伺服器 createServer() 連這一步驟都是非同步!而且除此之外,req 也有相關的非同步作業:

[javascript] view plaincopy 
  1. http.createServer(function (req, res) {  
  2.     req.addListener("end",function(){  
  3.         sys.puts("request end");  
  4.     });  
  5.     res.writeHead(200, {‘Content-Type‘: ‘text/plain‘});  
  6.     res.write(‘Hello World‘);  
  7.     res.close();  
  8. }).listen(8006);  

 

這樣就對請求 req 登記了 end 的事件。在請求結束時通過 sys.puts 方法加入"request end"。在使用事件的過程中,實質也算是一個非同步過程,非同步的。


從宏觀層面看以上的示範,上面僅僅是一個比較底層的操作,都是低層次的控制,不足以提供更多 High Level 邏輯。要增強 NodeJS 這個平台功能,我們可以使用其他圍繞 NodeJS 而開發模組,甚至是一個初具規模的“架構”,——其中一個就是 Express(http://github.com/visionmedia/express)。安裝 Express 的前提是安裝另一個依賴包:Kiwi(http://github.com/visionmedia/kiwi),然後鍵入kiwi -v install express 才可以正式安裝 Express。安裝好 Express 之後,立刻輸入下面代碼測試一下:

[javascript] view plaincopy 
  1. var sys = require("sys"),  
  2. kiwi = require("kiwi"),  
  3. express = kiwi.require(‘express‘);  
  4.    
  5. get(‘/‘, function(){  
  6.      this.redirect(‘/hello/world‘)  
  7. });  
  8.    
  9. get(‘/hello/world‘, function(){  
  10.      return ‘Hello World‘  
  11. });  
  12.    
  13. get(‘/goodbye/world‘, function(){  
  14.      return ‘Goodbye World‘  
  15. });  
  16.    
  17. run();  


Express 啟動並執行 URL 和連接埠是 http://localhost:3000,預設請求的規則都會被轉移到 /hello/world 目錄,返回 ‘Hello World‘ 的字串。訪問 /goodbye/world 目錄就返回 ‘Goodbye World‘。Express 之所以被稱為一個“架構”,應該還有其他的功能在內,例如請求路由、渲染視圖的其他進階功能。

Web伺服器的事件編程其意義
我們知道並且十分清楚,JavaScript 是單線程的(就當前流行的 js v1.5而言),怎麼避免 I/O 通道上的阻塞(block)呢?——基於事件驅動(Event-based)的編程或者或者是一種可行之道,為不少背景程式解決線程/阻塞之用。自從 Viusal Basic 流行起,基於事件驅動的編程模型在GUI之上早已為我們所熟悉,存在很長的一段時間了。若說上早期的開發,那時我們經常的一個做法,就是在main()方法寫一個無限迴圈(while(true) loop),從而獲得控制任何時刻程式的能力,亦算是一種樸素的“事件”模型。我們清楚,JavaScript天然是Function First Level的,對一個函數還可以送入一個函數的參數(即傳入一個閉包closure),換言之,JS天生與事件驅動的編程是不謀而合,相得益彰的。鑒於此,Node.js的事件編程理念的確是一個亮點。

 

另外一點,高並發的 Web 服務器一直乃久經不衰的熱點和話題,也許有很多的解決方案,效能達到一定的指標也沒有問題,不過問題是,因而,在保證並滿足效能達標的前提下,卻很少見一個自然、適合編寫商務邏輯的開發平台,以 JavaScript 為開發語言的 NodeJS 正好符合這一需求,一種符合大多數人需求的 DSL(估計 js 玩家數量可觀得可以……)。例如,一個簡單的計數器設計,我登入某個 url,就觸發一個計數器的事件,十分自然。當然,更重要的是,還是 JS 的語言特徵,即 Function、閉包、相似的 C 文法、精鍊與簡潔的風格等等,尤其 Function,簡直為事件模型而生,輕鬆吻合 node.js 非同步機制的理念,才是真正吸引玩家去樂此不疲的原因。


儘管 NodeJS 現在還非常的年輕,也沒有久經世故,不過值得可喜的是,現在湧現了一大批圍繞 NodeJS 的外掛程式、增強包,有的是連結資料庫,有的是用於 logging、Template模板、單元測試,有的還是服務於長連結下(long polling)輪詢的……等等。我們可以參見 NodeJS 具體的模組列表,在http://wiki.github.com/ry/node/modules。

 

分享一個 Node.js 的專題網站,適合初學者:

http://howtonode.org/

nodejs與websocket的資源:

http://blog.new-bamboo.co.uk/2009/12/7/real-time-online-activity-monitor-example-with-node-js-and-websocket

http://blog.johngoulah.com/2010/03/nodejs-websockets-and-the-twitter-gardenhose/http://blog.andregoncalves.com/2009/12/29/Nodejs-twitter-streaming-with-html5-websockets.html

寫node.js的外掛程式(C++)

https://www.cloudkick.com/blog/2010/aug/23/writing-nodejs-native-extensions/

在win平台上跑node.js,藉助虛擬機器:

http://www.lazycoder.com/weblog/2010/03/18/getting-started-with-node-js-on-windows/

在win直接啟動並執行可執行檔(已編譯):

http://www.grati.org/?page_id=213 不錯的node.js中文資源

學習NodeJS第一天:node.js引言

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.