簡體   English   中英

node.js中的節點究竟是什么?

[英]What exactly is a node in node.js?

在Erlang中,我能夠立即理解“節點”的概念 - 一個獨立的Erlang VM。 我可以在一台機器上使用erl -name gandalf -setcookie abc啟動一個節點,在另一台機器上(在同一局域網上)使用erl -name bilbo -setcookie abc啟動另一個節點。 然后,我可以在gandalf上生成進程,這些進程可以與bilbo上的其他進程神奇地進行通信。 現在,因為我還想提供一個帶有Erlang進程動畫圖形結果的爵士網頁,所以我選擇了一些Javascript並學習了jQuery。 仍然是一個不起眼的paduwan,但我有點理解Javascript如何適應事物的方案。

我最近遇到了node.js,一個(邪惡的)聲音開始竊竊私語:'就是這樣! 現在你可以使用Javascript做任何事情! 忘記Erlang和守衛和時期,堅持每個人都使用的語言'。

我已經閱讀了一些文檔,但我仍然不明白node.js中的節點是什么。 我是否必須運行http服務器並成為我的節點? 如果我不喜歡http怎么辦,或者我不在乎gandalf如何與bilbo交談 - 這就是我在Erlang中所喜歡的。 也許我不知道:vely期望node.js是帶有Javascript糖的erlang嗎?

Node.js與Twisted比Erlang / OTP有更多共同之處。 Node.js只是一個單線程SEDA事件循環。 在涉及分發,熱代碼重新加載和通過進程的可伸縮性時,Node.js與Erlang VM沒有任何關系,它與“使用Javascript糖的Erlang”無關

也許是因為你的Erlang知識,你認為Node.js與“節點”(作為erlang節點)有某種關系,但它只是名稱。

Node.js的主要思想是推遲所有昂貴的I / O操作並將回調分配給這些操作的結果。 原因是I / O阻止了此時正在運行的(唯一)進程。 鑒於您正在以正確的方式編碼,Node.js將為您處理此問題。

一個簡單的例子是數據庫調用:

result = SQL.query("EXPENSIVE SELECT HERE")
doSomething(result);
moreStuff(); // This line must wait until the previous ones are completed.

在節點中,您將以一種非常不同的方式對其進行編碼:

SQL.query("EXPENSIVE SELECT HERE", function(result) {
  doSomething(result);
});
moreStuff(); // This line executes inmediately

如果您的Node.js腳本中有錯誤的代碼,例如:

while(true) { }

然后您阻止該進程,它將無法處理比當前請求更多的請求,因此在Node.js中必須遵循上述准則。

據我了解,Node.JS節點是V8引擎的一個實例,其中運行Node.JS運行時和事件循環。 雖然Node.JS運行時使您能夠非常快速而簡單地開始處理HTTP請求,但它並不是強制性的; 它非常擅長處理大多數任何類型的異步I / O.

我對Erlang知之甚少,但我的膚淺理解是它的強大功能是高並發計算。 Node.JS本身並不專注於此。 它的核心是“I / O”,使用異步I / O整齊而干凈地處理。

node.js中沒有“節點”

如上所述,當你跑步時

node my_script.js 

您正在運行一個V8 java腳本解釋器實例(在其生命周期中使用一個內核)。

是什么

[英]What is the <!--​ operator in Node.js?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM