歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Node.js 教程

Node.js 教程

日期:2017/3/1 9:39:34   编辑:Linux編程

一.什麼是Node.js,而又能做什麼?

什麼是Node.js

Q:Node.js?

A:這貨不是Javascript。但它的的確確是Javascript

Q:一個新的Javascript框架?

A:不是框架,哦,如果不嚴格地說,好像也算是框架,但是在浏覽器中它不並怎麼受支持

Q:那有個屁用?

A:那就錯了,它的作用會讓你和你的小伙伴驚呆的。

Q:哦?我不相信!

A:額,如果有人告訴你,這貨是做服務器端開發的,就像Java,PHP,.NET,GO,Python和Ruby等等做服務器端開發一樣,你會相信嗎?

Q:是嗎?你這是在侮辱我的智商!

A:別著急,首先要申明,當初網景這個公司開發LiveScript的時候,本來就在同步制作服務端的開發,只是因為那個時代已經有很多有名的後台語言誕生,從而放棄這個夢想,所以你現在只看到浏覽器中的Javascript,而且它被人長久誤會為玩具。哦,對了,JavaScript和LiveScript是一個東西。

Q:好吧,這好像有點意思,那麼它能做什麼?

A:不要著急,這麼偉大的一個創舉,你為什麼不多體會一下呢,其實一直有人在做這樣的事情,只不過沒有被得到廣泛應用,或者只是自己用來玩玩,而不像V8團隊這樣聰明。

Q:V8?

A:沒錯,V8,這是一個在丹麥的Google團隊,專門開發Javascript引擎,或許你已經無時無刻的都在使用它,也許你用過Chrome浏覽器,或者基於Chromium的浏覽器,那麼你可以體會到頁面的加載速度如此之快,這些一部分得利於V8引擎。

Q:那你的意思是,V8引擎可以將Javascript用於服務器功能開發?

A:正如你所說,谷歌開源了這個引擎,不僅僅開源這樣簡單,在Javascript的發展到路上具有劃時代的意義。在前端,jQuery的出現加速了頁面性能的優化,提高了Javascript的腳本功能,從而使得更多的前端框架出現,而現在Javascript的服務端功能得以東山再起,使得Javascript不在是單兵作戰。

Ubunru 12.04 下Node.js開發環境的安裝配置 http://www.linuxidc.com/Linux/2014-05/101418.htm

Node.Js入門[PDF+相關代碼] http://www.linuxidc.com/Linux/2013-06/85462.htm

Node.js開發指南 高清PDF中文版 +源碼 http://www.linuxidc.com/Linux/2014-09/106494.htm

Node.js入門開發指南中文版 http://www.linuxidc.com/Linux/2012-11/73363.htm

Node.js安裝與配置 http://www.linuxidc.com/Linux/2013-05/84836.htm

Ubuntu 編譯安裝Node.js http://www.linuxidc.com/Linux/2013-10/91321.htm

又能做什麼

Q:我已經知道Javascript的服務端功能了,那麼這個項目就叫做Node.js?

A:是的。

Q:那他能做什麼呢?

A:服務端想要做到的事情基本都能做到。

Q:它由什麼編寫而成的呢?

A:C++

Q:那麼它對底層的支持如何?

A:嗯,這樣給你說吧,Node.js的實質就是用Javascript的代碼規范通過C++進行了實現和封裝,現在Node.js正在快速發展,對底層的支持也在逐步擴展,其中很多原生的Node都是使用底層的方式進行運作的。

Q:那這麼說,我是否可以開發HTTP或者HTTPS協議這樣的服務呢?

A:當然可以,而且還非常簡單,甚至可以做TCPsocket開發,當然UDP一樣支持。

Q:如果這樣,我想我會考慮學習這個語言,可是,它有什麼優點和缺點,現在的服務端語言這麼多,我為什麼要使用它呢?

A:當然,你沒有必要必須要使用它,或許他也不是一門必修的語言課程,但是他的魅力足以讓你學習。如果說優點,那麼就是它是單線程多核多進程的語言,並且在他眼裡所有的都是事件,而缺點也是因為如此,它無法滿足實時密集型請求處理,而事件模型是很多人無法理解的。

Q:單線程?我的天,那效率怎麼能提高呢?

A:不,其實多線程的語言處理是以消耗內存為代價,對於CPU的使用率一直不是很好,V8團隊堅信,單線程已經夠用了,使用非阻塞式IO和請求大大提高CPU的使用率,如果使CPU達到100%利用,那最好不過了,並且這對內存的釋放也是有好處的。但也是因為如此對於密集方式請求,可能會出現阻塞,但好在當前密集方式請求並不是很多。

Q:好吧,那麼什麼是事件模型,我不太明白。

A:事件模型,從概念上來說就是通過一些列事件的綁定和觸發進行交互的反饋,如果你使用過一些語言的監聽器,或者理解什麼是監聽者模式,你會更好的理解這些,但是這裡我不想太多講解這些,你可以簡單的理解為,所有的處理都像是在發命令,而對這個命令有興趣的人會有反應,從而做一些事情。

Q:哦,那如果這樣說,Node不是順序執行了?

A:是的,這正是事件模型的核心,它不考慮順序,而是以實際的事件響應順序為主,所以這也給一些想學習這個語言的人帶來了一些障礙,或許無法很好的理解這一點,但是我想應該先去學習一下什麼是監聽者模式就夠了。

忽視了什麼

Q:很好,我現在知道一些大概了,那我們是不是忽略了什麼?

A:你說的很對,我們忽略了很多,但是猶如之前的對話,其中的缺點也就是我們所忽略的,Node不是萬能的,比如他無法實現客戶端界面的開發,至少目前是這樣,對數據庫的鏈接有些官方沒有發行和開發,你或許可以在社區中看到有類似mysql的處理庫,但這不意味者這是官方發行版本,所以很多人不願意通過Node與數據庫進行鏈接,當然現在Node對NoSQL類型數據庫鏈接支持的不錯。

Q:社區?那麼這個社區活躍嗎?

A:非常活躍,也正式因為如此,Node的發展速度非常驚人,比如你可以自己構建一個LIB,通過npm進行發布的升級,就是這麼簡單。

Q:那他在什麼系統下開發?

A:除了傳統的linux和unix外,現在也支持windows,當然windows下畢竟不是主流,我想你不也不會考慮在windows下進行開發。

Q:是的。不過能否給我一個簡單的例子,讓我體會一下呢?

A:沒有問題。

一個簡單的案例

var http = require('http'); var util = require('util'); var querystring = require('querystring'); http.createServer(function(request,response){ var post = ''; request.on('data',function(chunk){ post += chunk; console.log(chunk); }); request.on('end',function(){ post = querystring.parse(post); response.end(util.inspect(post)); }); }).listen(8080);

更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2014-09/106956p2.htm

Copyright © Linux教程網 All Rights Reserved