“Node.js是服務器端的JavaScript運行環境,具有非阻塞、事件驅動的特點。Node.js使用V8引擎。同樣,Node.js實現了類似Apache和nginx的web服務,允許妳通過它構建壹個基於JavaScript的Web應用。”
我認為不僅僅是Node.js在我們引入任何新技術之前,我們必須明確幾個問題:
我們遇到過哪些問題?
這項新技術解決了哪些問題,是否契合我們遇到的問題?
在解決我們問題的各種方案中,這種新技術的優勢是什麽?
使用新技術帶來的新問題有哪些?他們是認真的嗎?我們能解決它們嗎?
我們的問題:服務器端阻塞
Node.js旨在解決服務器阻塞問題。這裏有壹個簡單的代碼來解釋什麽是阻塞:
Js代碼:
//根據ID,在數據庫的Persons表中找到名字。
var name = db.query("從id=1的人員中選擇姓名");
//進程等待數據查詢完成,然後使用查詢結果。
輸出(“名稱”)
這段代碼的問題在於,在上面兩條語句之間,在整個數據查詢過程中,當前程序進程往往只是在等待結果的返回,導致進程被阻塞。對於高並發、I/O密集型線路的網絡應用,壹方面,進程長時間處於等待狀態。另壹方面,為了應對新的請求,不斷添加新的流程。這樣的浪費會造成系統支持的QPS遠遠小於後端數據服務支持的QPS,成為系統的瓶頸。而且這樣的系統特別容易受到慢速鏈接攻擊(客戶端故意不接收或者減慢接收到的數據,從而延長流程的等待時間)。