2011-07-09 73 views
7

我知道node.js據說是「事件驅動I/O」服務器端JavaScript託管在V8 Javascript引擎。我訪問了node.js網站,然後閱讀了維基百科條目,但無法完全瞭解在哪裏使用它以及它的用處。 「事件驅動的I-O」? 「V8 Javascript引擎」?在某些情況下,雖然,我看到使用「服務器端」 JavaScript作爲一個小overkill..I就拿這段代碼在wikipedia entry of node.jsnode.js適合web開發環境嗎?

var http = require('http'); 

http.createServer(function (request, response) { 
    response.writeHead(200, {'Content-Type': 'text/plain'}); 
    response.end('Hello World\n'); 
}).listen(8000); 

console.log('Server running at http://127.0.0.1:8000/'); 

我一直在想,是真的有運行服務器的重要目的是特別提供在應用程序的前端部分執行的JavaScript文件嗎?

我還分叉了github中的node.js repo以瞭解更多關於它是如何工作的,事實證明它的一些模塊是用C++編寫的。那麼它畢竟不是JavaScript呢?

有人能給我一個關於這一切的明確解釋嗎?對不起,如果問題不明確或什麼的,我只是一個初學者。將欣賞任何輸入/建議。感謝

+0

從我所瞭解的情況來看,node.js可以處理大量的併發請求,因爲每個請求都不會像Apache那樣產生新的線程。除此之外,我迫不及待地想讀一些這個問題的答案。 – Stephen

+0

就像PHP剛開始時那樣,它只是一小部分用C語言編寫的函數/實用程序,對於提供文件和其他網絡資源很有用http://groups.google.com/group/comp.infosystems.www.authoring.cgi/MSG/cc7d43454d64d133?PLI = 1。優點是JS比C++更靈活,並且接近使用te V8引擎的C++速度。非阻塞等。 – zad

+0

它是一個服務器端應用程序開發的低級框架,使用JavaScript並具有您可能在維基百科上閱讀過的所有優點。有些框架位於node.js之上 – zad

回答

9

Node.js的服務器,簡單來說,一個更換的東西像Apache Web服務器 - 但它主要是用JavaScript編寫運行於服務器(由V8引擎執行)上,而不是客戶端。它可以用包含在JavaScript接口中的「本機代碼」模塊(用C++編寫)進行擴展以添加功能,但AFAIK大多數node.js模塊都是純JavaScript。

「事件驅動的I/O」只是一個術語,用於描述您在JavaScript中使用的常規異步回調機制。在node.js中,您爲各種事物提供回調,並且在相關事件發生時調用您的函數。

根據添加的模塊數量,node.js服務器與Apache相比相對輕量級,並且在某些方面要簡單得多。

到的node.js我看到的兩個主要優點是:

  1. 它可以讓你在相同的語言編寫一個Web應用程序的同時在服務器端和客戶端部分。在某些情況下,您可以在兩邊使用相同的代碼。
  2. 它使服務器端編碼可以被那些瞭解JavaScript的所有Web開發人員訪問,而無需學習像PHP或Java這樣的更常見的服務器端語言。

這裏有一個文章,我剛剛跨過來可能也提供一些線索:What is Node.js?

+1

第二點並不完全有效,因爲大多數聲稱瞭解JS的人並不真正瞭解語言的細微差別;他們只知道jQuery和DOM操作。 JS對於Node來說是一個很好的選擇的主要原因之一是,它本地支持異步**非阻塞** I/O。 –

+0

@Steve Wang:是JS規範的一部分,還是由於V8的實現? – sje397

+0

這是規範的一部分。 Javascript一直支持異步非阻塞I/O。它不支持的是節點所做的偶數IO,這就是節點增加的組合。 – jcolebrand

3

雖然我不能增加太多什麼@sje說,我會重複他分享了博客鏈接,因爲這是我發現,快速解釋的NodeJS最好的資源:

http://radar.oreilly.com/2011/07/what-is-node.html

還要注意,從奧賴利,誰我們大多數人知道的是在市場上一般的程序員最好的參考的出版商; )

我一直在想,運行一個服務器,特別是在應用程序的前端部分執行特定的JavaScript文件是否真的有一個重要目的?

這是完全錯誤的。這是關於節點的最錯誤假設。 Node運行服務器上的javascript ,就像運行ruby或php或asp.net代碼一樣。瀏覽器也可以運行javascript的事實對節點沒有影響。當然,您可以在服務器和客戶端之間共享模塊(例如,表單數據的驗證例程),但是基本上這些代碼庫是不同的,因爲它們是針對不同的事情。

我還分叉github中的node.js回購以瞭解更多關於它是如何工作的,事實證明它的一些模塊是用C++編寫的。那麼它畢竟不是JavaScript呢?

是的,節點是一個使用V8引擎解釋javascript的服務器。它必須寫在東西。我會給你一個比較:微軟的.NET代碼大部分都是用.NET編寫的,但是主要的代碼實際上完成了工作,運行時(大多數人蔘考它的CLR)管理託管代碼是用C編寫的。與節點相同的東西。是的,大部分(正如你所看到的)是用javascript編寫的,但運行其他所有內容的核心庫都是用C編寫的。

有人能給我一個清楚的解釋嗎?對不起,如果問題不明確或什麼的,我只是一個初學者。將欣賞任何輸入/建議。謝謝

我希望這有助於清除它的一部分。有很多內容需要解決,而且不會涉及到even-io(涉及理解流程,線程和io訪問以及很多其他內容),這幾乎是這個問題的基本高級答案。如果您願意,我會邀請您到聊天服務器上的nodejs聊天室進行更流暢的討論。 http://chat.stackoverflow.com/rooms/642/node-js

關於第一個問題,你問:

哪裏不適合?

同樣的地方紅寶石和PHP和Perl和Python和asp.net做。在服務器上生成客戶端收到的代碼。

1

我還沒有看到任何人給出了一個簡單的答案呢。

Node.js的是:

  • V8的JavaScript引擎
  • 事件循環
  • 一些C++綁定,除其他事項外,給V8引擎IO能力(網絡和文件IO)

重要的是要注意,Node並不一定要用於Web開發。它的目的是「放棄IO」。