Node -- 使用場景及優缺點

據說了很久的node.js,今天查看了不少博文,終於對node.js有了必定的瞭解。
1、node的特色
1>事件驅動
2>非阻塞I/O
3>輕量、快,適合實時數據交互應用
4>單進程、單線程
2、node帶來原有系統瓶頸的解決方法
1>併發鏈接
舉個簡單的例子,不少人在銀行排隊辦理業務
1.1 單線程模式
銀行只有一個窗口工做,即服務端只有一個線程,那麼每次只能有一個用戶辦理業務,其他的都要等待,這就是阻塞,正在享受服務的請求阻塞後面的請求了。
1.2 多線程模式
和明顯,銀行經理髮現辦理業務的人比較多,他會立刻多開幾個窗口,即服務器端調節線程數量來知足多併發請求。這種方式與第一種比起來,效率很明顯提升了不少,但依然存在問題,如來來100個用戶辦理業務,但窗口只開了2個,每次只能辦理2我的,不少人依然須要等待;另一個問題就是 銀行新開窗口須要增長很大的成本:工做人員、窗口地方、處理業務所需的工具(計算機/櫃檯)等。由於銀行並不知道每次會來多少人辦理業務,若是固定的多開窗口,也是一種浪費。
1.3 node模式(異步、事件驅動模式)
一樣是用戶辦理業務,一樣只有一個櫃檯,可是與前面的處理方式不同,用戶事先將須要處理的業務準備好(好比:取錢/存錢/貸款等),而後到櫃檯提交材料就行,櫃檯會返給每一個用戶一個號碼,等銀行處理完了,打電話通知用戶過來拿結果。這樣,效率就高多了,全部的用戶只須要過來遞交材料和拿號碼就行。銀行處理完了後,打電話或經過人工喊(node.js中叫回調)用戶過來拿結果,接着用戶處理本身的事情(好比回家等)。
2>I/O阻塞
node.js解決了剛剛用戶排隊等待的問題,它的內部處理機制呢?以下
櫃檯的工做
1)接收用戶提交的材料
2)發號給用戶
3)通知用戶取結果
4)將材料分發給銀行內部工做人員(這是重點,這裏纔是處理業務的部分)
分析:櫃檯就是node.js的主線程,只要來了I/O事件(用戶請求提交材料),它就會建立子線程去處理業務(分發材料給銀行內部工做人員處理),可是主線程依然繼續執行(接着等待/處理下一位用戶)。這就不會致使I/O阻塞(即主線程不會中止接收請求,主線程處理業務)。html

3、node.js優缺點
優勢
1>高併發(即非阻塞)
2>適合處理I/O密集型應用(即處理請求頻繁的應用)
缺點
1>不適合CPU密集型應用,即不適合處理運算量很大的狀況,因爲JS單線程的緣由,若是長時間處理計算,會致使時間片不能釋放,則後續I/O沒法發起。 解決方案:將大型運算分解成多個小任務,使得CUP時間片適時釋放,不阻塞下一個I/O調用。
2>只支持單核CPU,不能充分利用CPU
解決方案:使用Nginx反向代理,作負載均衡。前端

4、node.js適合場景
1>restful api
這是node最理想的應用場景,它能夠處理數萬條請求鏈接。它不須要作太複雜的處理,只須要將從數據庫中取出的結果拼接成規定的格式返回給前端便可。
2>拼接UI界面
這是目前使用node最多的地方,因爲混合app的崛起,後臺負責處理複雜的業務邏輯,而後傳送給node這層,node作拼接,而後直接返回給前端,前端拿着這些數據直接顯示便可。
3>大量ajax請求的引用
不用解釋,這是node的特長。java

5、node應用場景
1>web開發:Express+ejs+Mongoose/mysql
express是node.js web應用框架
ejs是嵌入到js的模板,經過編譯生成html代碼
mongoose是mongodb對象模型工具,經過它能夠訪問MongoDb數據庫 mysql就不用說了
一般node作web開發,就須要上述3個框架配合使用,就好像java中的ssm框架整合。
2>rest開發:Restify
restify是一個基於node的rest應用框架,支持客戶端與服務端。
3>web聊天室
4>web爬蟲node

相關文章
相關標籤/搜索