讓我欲罷不能的node.js

從我大一接觸第一門編程語言C開始,到如今工做三年陸續接觸到了C、彙編、C++、C#、Java、JavaScript、PHP,還有一些HTML、CSS神馬的,歷來沒有一門語言讓我像對node.js同樣的着迷。接觸nodejs在我以前博客提到過在搞web socket在選擇服務器的時候不少人推薦nodejs版的,無奈當時對nodejs沒有任何概念,因此沒看懂人家寫的代碼,可是感受很熟悉,網上基本是以在服務器端運行的javascript來解釋什麼是nodejs,這就讓我更疑惑了,javascript怎麼可能作socket服務器,在用C#寫出服務器後回頭看了一下node.js,十分鐘以後我就被徹底吸引住了。javascript

補記:因爲寫博客是對nodejs處於瞭解語法階段,不少問題沒有說清楚,點反對的人很多,關於一些原理性東西能夠看看關於node.js的誤會html

什麼是node.js

到底什麼是node.js呢?看看官網對nodejs的描述:java

Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.node

咱們能夠對此總結出幾點python

  1. node.js是一個構建在Chrome JavaScript運行環境的平臺,這是很重要的一點,node.js並非一門語言,而是一個平臺
  2. node.js致力於使構建速度快、穩定的網絡程序更簡單
  3. node.js具備事件驅動和非阻塞I/O的特點,使之輕量級而且高效率
  4. node.js很是適合在分佈式設備運行數據密集型實時應用程序

服務器端運行的JavaScript?

Chrome JavaScript runtime也就是咱們常說的 Chrome的V8 JavaScript Engine,也就是Goole開發的一個用於Chrome瀏覽器的底層JavaScript引擎,用於解析JavaScript語句建立其運行環境,保證咱們寫的語句在瀏覽器上的表現和咱們預期的一致。git

那麼爲何說node.js是服務器端運行的JavaScript?好好地nodejs幹嗎要和V8扯上關係?除了Google搞的V8解釋JavaScript十分的快,十分重要的一個緣由是V8 JavaScript 引擎並不只限於在瀏覽器中運行,能夠嵌入任何應用程序中運行。Node.js 和.net framework相似是一個平臺(這裏有些搞不明白,望大神們指點一二),但它沒有像.net同樣創造了一門語言——C#在這個平臺上運行,而是很巧妙的借用了web開發人員已經很是熟悉的JavaScript語法,使用V8引擎來解析語句,並將其重建可在服務器上使用。因此嚴格上說node.js並非服務器端運行的Javascript,而是能夠在服務器端運行JavaScript語法的平臺。 web

爲何要用node.js

搞了半天就是一個新瓶裝舊酒的東西,看起來除了一個新鮮的可使用JavaScript語法,node.js沒什麼長處,爲何要用它而不是一樣能夠在服務器端運行的Java或C#呢?這要從node.js事件驅動和非阻塞I/O的特點談起。關於事件驅動熟悉JavaScript的同窗應該很熟悉了,node.js採用一系列「非阻塞」庫來支持事件循環的方式。本質上就是爲文件系統、數據庫之類的資源提供接口,好比一個數據庫訪問,採用事件機制,發起請求以後,當即將進程交出,當數據返回後觸發事件,再繼續處理數據。ajax

在傳統的阻塞I/O中其運行過程是這樣的數據庫

int num=query('select * from ......');

print(num);

...................//無關語句

print方法必須等待query方法返回結果,若是數據庫出現網絡鏈接故障,那麼print方法就要等到超時才能執行,而後後面一些無關語句才能一次執行,而在非阻塞I/O中是這樣的npm

query('select * from...',callback(data){
  .............//相關語句
  print();
});

..............//無關語句

跟咱們使用ajax,在回調函數中處理結果,可是不影響下面語句執行。 怪不得node.js要借用JavaScript來作此事,JavaScript的幾個特性使它很勝任這項工做

  1. 事件機制
  2. 函數式編程,支持匿名函數,函數參數
Node.js中代碼是單進程、單線程執行的(咱們寫的代碼是,但node.js自己不是有興趣同窗能夠看看 這個進一步瞭解),使用事件輪詢機制和非阻塞I/O,在不新增額外線程的狀況下對任務進行並行處理 。node.js解決了 阻塞式編程浪費大量進程資源只是在等待,致使的大量內存和cpu的浪費問題,因此纔敢宣稱本身perfect for數據密集型的實時web 應用程序。

如何安裝

nodejs的安裝仍是很簡單的,尤爲是如今安裝包都把npm集成了進去,不用單獨安裝了,下載下安裝包運行就能夠了,另外想完整使用nodejs的話須要有C語言的編譯環境、git和python,使用window的同窗很能會稍微麻煩一些,須要搞定這些。對命令行情有獨鍾的同窗能夠看看How to Install Node.js

npm是什麼

npm是node packaged modules的縮寫,實際上是一個nodejs的module的管理工具

什麼是module

所謂module和java中的包的概念很相似,一些解決方案的集合,官方會提供核心的幾個,第三方的不少

如何安裝第三方module

由於nodejs的社區很活躍,有不少好用的第三方的包,咱們能夠在終端中使用npm的命令安裝

  • npm install [-g] <name>:使用install指令能夠把nodule下載安裝的nodejs的全局的path處,不加的話會安裝到當前路徑
  • npm remove <name>:移除module
  • npm update <name>:更新 module

還有一些經常使用命令能夠看看npm經常使用命令

第一個demo

 這些都搞定後咱們就能夠寫傳說中的hello world了。在任意目錄建一個test.js文件

console.log('Hello, World!');

簡單的一句話就能夠,而後使用node命令運行

 這這這。。。太沒技術含量了,看看官方給的demo,使用nodejs建立一個web server有多簡單

var http=require('http');//引入http module
  2 http.createServer(function(request,response){//建立一個web server
  3     //回調函數,這樣建立server方法就不會阻塞了
  4     response.writeHead(200,{'contentType':'text/plain'});
  5     response.end('Hello World!\n');
  6 }).listen(8124);
  7 console.log('Server running at http://127.0.0.1:8124/');

 先運行一下服務器,按兩次Ctrl+C退出

使用瀏覽器訪問一下

就這麼簡單

如何學習

看到上面的demo是否是也對nodejs產生興趣了呢,但是像我這樣的懶人接觸一門新語言的時候不知道該如何下手,難道又要去作個無聊的購物車神馬的嘛,學習nodejs不用,nodejs爲咱們提供了一個小遊戲同樣的教程,就像個尋寶過程從零開始,沒步都有一個任務和一下提示讓你走的更遠,上nodeschool下載而後開始尋寶吧,我就是被這小遊戲迷住了,順便秀一下我一天的戰績,每一個任務都完成了

看看解釋就知道怎麼作了,不過建議最開始run和verify結合使用,verify告訴你執行結果和預期結果,run會告訴你有哪些錯誤

 固然除了這些小遊戲幫咱們熟悉nodejs語法及使用,一些優秀的社區也能夠幫咱們不少

CNode

開源中國

常見問題

相關文章
相關標籤/搜索