- Node.js權威指南
- 陸凌牛
- 540字
- 2019-01-01 00:13:22
1.1 Node.js概述
1.1.1 使用Node.js能夠解決什么問題
Node.js的首要目標是提供一種簡單的、用于創建高性能服務器及可在該服務器中運行的各種應用程序的開發工具。首先讓我們來看一下現在的服務器端語言中存在著什么問題。在Java、PHP或ASP.NET等服務器端語言中,為每一個客戶端連接創建一個新的線程,而每個線程需要耗費大約2MB的內存,也就是說,理論上,具有8GB內存的服務器可以同時連接的最大用戶數為4000個左右。要讓Web應用程序支持更多的用戶,就需要增加服務器的數量,而Web應用程序的硬件成本也就隨之增加了。不僅如此,在技術層面也會因此產生一些潛在的問題。例如,由于同一個用戶的不同客戶端請求可能會被不同的服務器處理,因此必須在所有的服務器之間共享所有的資源。由此可見,在一個Web應用程序中,一個主要的瓶頸是服務器所支持的最大同時連接用戶量。
Node.js修改了客戶端到服務器端的連接方法,解決了這個問題。因為它并不為每個客戶端連接創建一個新的線程,而是為每個客戶端連接觸發一個在Node.js內部進行處理的事件。因此,如果使用Node.js,可以同時處理多達幾萬個用戶的客戶端連接。因此,當需要使Web應用程序能夠支持大量用戶的并發連接的時候,我們應該考慮使用Node.js。
1.1.2 實現高性能服務器
嚴格地說,Node.js是一個用于開發各種Web服務器的開發工具。在Node.js服務器中,運行的是高性能V8JavaScript腳本語言,該語言是一種可以運行在服務器端的JavaScript腳本語言。
那么,什么是V8JavaScript腳本語言呢?該語言是一種被V8JavaScript引擎所解析并執行的腳本語言。V8JavaScript引擎是由Google公司使用C++語言開發的一種高性能JavaScript引擎,該引擎并不局限于在瀏覽器中運行。Node.js將其轉用在了服務器中,并且為其提供了許多附加的具有各種不同用途的API。例如,在一個服務器中,經常需要處理各種二進制數據。在JavaScript腳本語言中,只具有非常有限的對二進制數據的處理能力,而Node.js所提供的Buffer類則提供了豐富的對二進制數據的處理能力。
另外,在V8JavaScript引擎內部使用一種全新的編譯技術。這意味著開發者編寫的高端的JavaScript腳本代碼與開發者編寫的低端的C語言具有非常相近的執行效率,這也是Node.js服務器可以提供的一個重要特性。
1.1.3 非阻塞型I/O及事件環機制
為了實現高性能,Node.js中采用了以下兩種機制:
·非阻塞型I/O
·事件環
JavaScript腳本語言的一個特征是它只支持單線程。V8JavaScript腳本語言也是如此,因此不需要擔心它會造成死鎖現象。但是與客戶端腳本語言不同的是,Node.js中為V8JavaScript腳本語言提供了非阻塞型I/O機制。例如,當在訪問數據庫取得搜索結果的時候,在開始訪問數據庫之后、數據庫返回結果之前,存在一段等待時間。在傳統的單線程處理機制中,在執行了訪問數據庫的代碼之后,整個線程都將暫停下來,等待數據庫返回查詢結果之后才能繼續執行其后面的代碼。也就是說,I/O操作阻塞了代碼的執行,極大地降低了程序的執行效率。由于Node.js中采用了非阻塞型I/O機制,因此在執行了訪問數據庫的代碼之后將立即轉而執行其后面的代碼,把數據庫返回結果的處理代碼放在回調函數中執行,從而提高了程序的執行效率。
另外,在Node.js中,雖然不具有因為用戶鼠標單擊按鈕或輸入文字等操作而觸發的事件,但是具有由于客戶端請求建立連接、通過此連接而接收客戶端提交數據、停止客戶端提交數據的接收等行為而觸發的事件。在Node.js中,在一個時刻只能執行一個事件回調函數,但是在執行一個事件回調函數的中途可以轉而處理其他事件(包括觸發新的事件、聲明該事件的回調函數等),然后返回繼續執行原事件回調函數,這種處理機制稱為事件環機制。
1.1.4 Node.js適合開發的應用程序
到目前為止,我們對Node.js進行了相關的概要介紹,那么,Node.js適合用來開發何種應用程序呢?回答是:當應用程序需要處理大量并發的輸入/輸出,而在向客戶端發出響應之前,應用程序內部并不需要進行非常復雜的處理的時候,我們應該考慮使用Node.js來進行該應用程序的開發。例如,我們可以開發如下應用程序:
·聊天服務器:在一個具有很高人氣的聊天應用程序中,在同一時刻通常可能存在著大量用戶與聊天服務器之間的并發連接,而服務器端本身并不存在非常復雜的處理。
·綜合服務類網站或電子商務網站的服務器:在這類網站的服務器端,往往可能在每秒鐘內接收到多達上千條數據并且需要將這些數據書寫到數據庫中,Node.js是解決這類問題的關鍵。Node.js將通過其隊列機制將這些數據迅速書寫在緩存區中,然后再通過每一個單獨的處理從緩存區中取出這些數據并將其書寫到數據庫中。如果使用其他服務器(如Apache服務器或Tomcat服務器)的話,由于這些服務器采用的均為阻塞型I/O機制,因此需要為每條數據(到數據庫中)的寫入等待一段時間。如果使用Node.js服務器,由于其采用的是非阻塞型I/O機制,因此可以同時實現這些數據到數據庫中的寫入,而不必再為每條數據的寫入等待一段時間。
- Visual Basic .NET程序設計(第3版)
- Learning Chef
- Microsoft Dynamics 365 Extensions Cookbook
- C語言程序設計教程(第2版)
- PhpStorm Cookbook
- 量化金融R語言高級教程
- Mastering Android Development with Kotlin
- Windows Phone 7.5:Building Location-aware Applications
- Visual Basic程序設計
- Python期貨量化交易實戰
- Java EE架構設計與開發實踐
- Python面試通關寶典
- 安卓工程師教你玩轉Android
- Getting Started with JUCE
- Visual C++程序設計全程指南