初涉node.js


  

之前一直聽說node.js在處理網站大規模並發上十分有用,所以有一定規模的公司都在使用node。我在工作中只用過jquery,屬於那種邊做功能邊學習的那一種。甚至連原生的js都不太會寫,只是知道語法差不多吧。於是誠惶誠恐的購買了一本《node.js權威指南》,先看再說吧,邊看邊學習語法和一些api,遇到不懂的就直接百度。從這兩天學習的進程來說,對於我這個將近兩年工作經驗的.net程序員來說還不算困難。

本文章將會總結我這兩天的學習心得,並在一些地方,比如語法等地方對比C#,使大家更容易去理解,給想學習node.js的人一點幫助,也可以共同學習。

node.js的優勢

  在常規的后台語言搭建的服務器環境里面,客戶端每建立一個鏈接就得去創建一個新線程。一台8G內存服務器可以同時承擔的最大連接數也就4000。所以,當用戶數量上去的時候,一台服務器的資源就捉襟見肘了。重構又麻煩傷神,而且也不會有多大的改進,只能來堆硬件了,造成成本的增加。

  node.js則修改了客戶端到服務器的連接方法,解決了高並發的問題。因為它不去為每個客戶端創建一個新的線程,而是為每個客戶端連接觸發一個在node.js內部進行處理的事件(使我想到了寫頁面jquery的時候各種事件)。如果使用node.js,可以同時處理多達幾萬個用戶的客戶端連接,優勢顯而易見。

node.js為何能搭建服務器

  node.js使用的語言就是javascript,在我看來這個只是運行在瀏覽器的腳本語言而已,為什么會用它去做一些后台語言的事情?

  node.js是一個用於開發各種Web服務器的開發工具。在node.js服務器中,運行的是高性能的V8 Javascript腳本語言,這是一個可以運行在服務器端的Javascript腳本語言。該語言是一種被V8 Javascript引擎所解釋並執行的腳本語言。V8 Javascript引擎是由Google使用C++開發的一種高性能Javascript引擎,這個引擎不限於在瀏覽器中運行。node.js將其用在了服務器中,並且為其添加了許多不同功能的API。最重要的是V8 Javascript引擎使用了一種全新的編譯技術,使其有非常高的執行效率,可以說跟C比較接近了。

node.js實現高性能所采用的機制

  1.非阻塞型I/O

  眾所周知,Javascript是單線程的,V8 Javascript也是如此,所以不用擔心其爭奪資源而造成死鎖現象。但與客戶端腳本語言不同的是,node.js中為V8 Javascript提供了非阻塞型I/O機制。在傳統的單線程處理機制中,在訪問數據庫的時候,整個線程都處於等待狀態,等待數據返回的結果,才能繼續執行后面的代碼。也就是說I/O操作阻塞了代碼的執行,極大的降低了運行效率。由於node.js采用了非阻塞行型I/O機制,因此在執行了訪問數據庫的代碼之后將立即轉而其后面的代碼,把數據庫返回的結果放在了回調函數中運行。

  2.事件環

  在node.js中,在一個時刻只能執行一個事件的回調函數,但是在執行一個事件回調函數的中途可以轉而去處理其他事件。包括觸發新的事件、聲明該事件的回調函數等。然后返回繼續執行原事件的回調函數,這種處理機制成為事件環機制。

node.js的使用背景

  上面已經有涉及,當應用程序需要處理大量並發的輸入/輸出,而在向客戶端發出響應之前,應用程序內部並不需要進行非常復雜的處理的時候,我們就應該考慮使用node.js來進行該應用的開發,比如聊天服務器和服務類網站或電子商務網站。

node.js安裝

  我在這兒就闡述windows下的安裝,安裝就很簡單了,直接上官網https://nodejs.org/下載(家里突然就打不開,就沒截圖了),基數版本是算是beta版本,偶數版本是穩定版本。下載下來就直接雙擊打開,點擊下一步安裝就行了。想看是否安裝成功或者是版本,打開cmd命令行工具,輸入node -v 就可以查看機器下的node.js版本了。如下圖:

  

 

node.js的簡單實例程序

  我在D盤下建立了一個文件夾nodejs,然后在里面新建兩個js文件,function.js和entrance.js。

  function.js代碼如下:

var add=function(a,b){
	console.log("a+b=%s",a+b);
}

exports.add=add;

   entrance.js代碼如下:

var object=require('./function');

object.add(3,4);

   代碼很容易理解,在node.js中,文件相當於模塊。我的理解是,這一個單獨的文件相當於C#里面一個cs文件,一個cs文件里面可以寫一個類。然后供其他的類去調用。exports.add=add;的意思是將這個方法暴露給外面,然后entrance.js就可以調用function.js暴露的方法了。這個可以理解,相當於C#里面,public聲明的方法,其他沒有給exports對象的方法,相當於私有方法。var object=require('./function');相當於C#里面的引用吧。

node.js運行代碼

  打開命令行工具,默認在C盤某個路徑。因為我的代碼放在D盤,所以我得先切換到D盤。輸入d: 切換到D盤。

   執行entrance.js

 

總結

  書一天的時間看了50頁,還是不難去理解node.js的,只不過Javascript基礎薄弱,遇到一些API和基礎知識必須得去慢慢學習。這個算是摸索着成長吧。
 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM