有關(guān) Node.js的技術(shù)報道越來越多,Node.js 的寫法也是五花八門,有寫成 NodeJS 的,有寫成 Nodejs的,到底哪一種寫法最標準呢,我們不妨遵循官方的說法。在 Node.js 的官方網(wǎng)站上, 一直將其項目稱之為”Node“或者”Node.js“,沒有發(fā)現(xiàn)其他的說法, ”Node“用的最多,考慮到 Node 這個單詞的意思和用途太廣泛,容易讓開發(fā)人員誤解,我們采用了第二種稱呼 - ”Node.js“,js 的后綴點出了 Node項目的本意,其他的名稱五花八門,沒有確切的出處,我們不推薦使用。
node.js是什么?
Node 是一個服務(wù)器端 JavaScript 解釋器,它將改變服務(wù)器應(yīng)該如何工作的概念。它的目標是幫助程序員構(gòu)建高度可伸縮的應(yīng)用程序,編寫能夠處理數(shù)萬條同時連接到一個(只有一個)物理機的連接代碼。
如果您聽說過 Node,或者閱讀過一些文章,宣稱 Node 是多么多么的棒,那么您可能會想:“Node 究竟是什么東西?” 即便是在參閱 Node 的主頁之后,您甚至可能還是 不明白 Node 為何物?Node 肯定不適合每個程序員,但它可能是某些程序員一直苦苦追尋的東西。
為試圖解釋什么是 Node.js,本文將簡要介紹一些背景信息:它要解決的問題,它如何工作,如何運行一個簡單應(yīng)用程序,最后,Node 在什么情況下是一個好的解決方案。本文不涉及如何編寫一個復雜的 Node 應(yīng)用程序,也不是一份全面的 Node 教程。閱讀本文應(yīng)該有助于您決定是否應(yīng)該繼續(xù)學習 Node,以便將其用于您的業(yè)務(wù)。
深入淺出node.js PDF
這本迷你書的發(fā)布可以說是眾望所歸,筆者作為“深入淺出Node.js”專欄的發(fā)起人倍感欣慰。如今已是2013年盛夏,距離專欄的第一篇文章發(fā)布已經(jīng)快兩年時間,可是在每月InfoQ中文站的文章訪問量Top10排行榜上,總有該專欄的某一篇或者幾篇文章位列其中,這足以說明,“深入淺出Node.js”這個專題得到了廣大讀者的肯定和歡迎。
一門技術(shù)的發(fā)展歷程類似于人生,總要經(jīng)歷孕育、誕生、成長、成熟、衰落等幾個過程,作為技術(shù)人員,應(yīng)該敏銳地觀察和把握住所在領(lǐng)域的技術(shù)發(fā)展趨勢,才不至于被技術(shù)的浪潮所淹沒。專欄誕生之初,應(yīng)該是Node.js技術(shù)的萌芽之后并在起步成長的關(guān)鍵階段。InfoQ中文站適時地推出了這個專欄,從Node.js的基本概念、到模塊管理、再到異步IO,按照循序漸進的思路向讀者呈現(xiàn)了Node.js的魅力。作者永強兄(樸靈)是一位非常地道的Node.js實踐者和布道師,他對前后端的Javascript領(lǐng)域都有著多年的一線經(jīng)驗,對Node.js技術(shù)的優(yōu)缺點也有著獨到的見解。雖然工作很忙,但永強還是積極地為InfoQ撰稿,從而成就了這個專欄和這本迷你書。在Qcon北京2013技術(shù)大會上,永強更是擔任了“Node.js”專題的出品人,儼然已是國內(nèi)Node.js社區(qū)的領(lǐng)袖。
時至今日,Node.js技術(shù)已經(jīng)進入了青年時期,不論你是否感覺到,它已經(jīng)慢慢滲入到了很多公司、軟件、技術(shù)者的心里。如果說在專欄誕生之初,開發(fā)者只是觀望和評估,那么現(xiàn)在越來越多的領(lǐng)域已經(jīng)把Node.js應(yīng)用于生產(chǎn)環(huán)境當中并取得了預期的效果。如果你在互聯(lián)網(wǎng)領(lǐng)域或者企業(yè)級Web領(lǐng)域,如果是前端JS或者后端Web服務(wù)器開發(fā)者,那么Node.js現(xiàn)在是一門必須要了解、最好能夠掌握的好技術(shù),一方面可以直接應(yīng)用于自己的產(chǎn)品和解決方案中,另一方面Node.js的設(shè)計思想也能夠開闊架構(gòu)師和開發(fā)者的思維方式。這本迷你書正是你了解Node.js技術(shù)的最佳入口之一,除此之外,InfoQ中文站還發(fā)布了許多Node.js相關(guān)的新聞、文章和講座,讀者可以邊看書邊閱讀其他網(wǎng)上內(nèi)容,相信會收獲不少。
在這個信息爆炸的年代,我們每天要面對成千上萬的數(shù)據(jù)輸入,大腦已經(jīng)在超負荷運轉(zhuǎn)了。有多少次我們曾經(jīng)計劃開始讀一本好書、計劃開始鍛煉身體、計劃開始寫點日記,有多少次我們回首發(fā)現(xiàn)一切如故!安环e跬步無以至千里”,下載這本迷你書,設(shè)定一個閱讀計劃,給自己一個豐富有用知識、改善自身習慣的機會吧:)
本書目錄
深入淺出Node.js(一):什么是Node.js
深入淺出Node.js(二):Node.js&NPM的安裝與配置
深入淺出Node.js(三):深入Node.js的模塊機制
深入淺出Node.js(四):Node.js的事件機制
深入淺出Node.js(五):初探Node.js的異步I/O實現(xiàn)
深入淺出Node.js(六):Buffer那些事兒
深入淺出Node.js(七):Connect模塊解析(之一)
深入淺出Node.js(八):Connect模塊解析(之二)靜態(tài)文件中間件
Node 旨在解決什么問題?
Node 公開宣稱的目標是 “旨在提供一種簡單的構(gòu)建可伸縮網(wǎng)絡(luò)程序的方法”。當前的服務(wù)器程序有什么問題?我們來做個數(shù)學題。在 Java™ 和 PHP 這類語言中,每個連接都會生成一個新線程,每個新線程可能需要 2 MB 的配套內(nèi)存。在一個擁有 8 GB RAM 的系統(tǒng)上,理論上最大的并發(fā)連接數(shù)量是 4,000 個用戶。隨著您的客戶群的增長,如果希望您的 Web 應(yīng)用程序支持更多用戶,那么,您必須添加更多服務(wù)器。當然,這會增加服務(wù)器成本、流量成本和人工成本等成本。除這些成本上升外,還有一個潛在技術(shù)問題,即用戶可能針對每個請求使用不同的服務(wù)器,因此,任何共享資源都必須在所有服務(wù)器之間共享。鑒于上述所有原因,整個 Web 應(yīng)用程序架構(gòu)(包括流量、處理器速度和內(nèi)存速度)中的瓶頸是:服務(wù)器能夠處理的并發(fā)連接的最大數(shù)量。
Node 解決這個問題的方法是:更改連接到服務(wù)器的方式。每個連接發(fā)射一個在 Node 引擎的進程中運行的事件,而不是為每個連接生成一個新的 OS 線程(并為其分配一些配套內(nèi)存)。Node 聲稱它絕不會死鎖,因為它根本不允許使用鎖,它不會直接阻塞 I/O 調(diào)用。Node 還宣稱,運行它的服務(wù)器能支持數(shù)萬個并發(fā)連接。
現(xiàn)在您有了一個能處理數(shù)萬個并發(fā)連接的程序,那么您能通過 Node 實際構(gòu)建什么呢?如果您有一個 Web 應(yīng)用程序需要處理這么多連接,那將是一件很 “恐怖” 的事!那是一種 “如果您有這個問題,那么它根本不是問題” 的問題。在回答上面的問題之前,我們先看看 Node 的工作原理以及它的設(shè)計運行方式。