繁体   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