2010-07-26 125 views
10

在Erlang中,我能够立即理解“节点”的概念 - 一个独立的Erlang虚拟机。我可以使用erl -name gandalf -setcookie abc在一台机器上启动一个节点,并在另一台机器上(在同一个LAN上)使用erl -name bilbo -setcookie abc启动另一个节点。然后,我可以在gandalf上产生进程,这将与bilbo上的其他进程神奇地进行通信。现在,因为我也想用Erlang过程的动画图形结果提供一个爵士网页,我选择了一些Javascript并学习了jQuery。仍然是一个谦虚的paduwan,但我有点理解Javascript如何适应事物的计划。node.js中的节点究竟是什么?

我最近遇到了node.js和一个(邪恶)的声音开始窃窃私语:'就是这样!现在你可以用Javascript来做所有事情!忘记厄兰和守卫和时期,坚持使用每个人都使用的语言'。

我已经读了一些文档,但我仍然不明白node.js中的节点是什么。我必须运行一个http服务器,并成为我的节点?如果我不喜欢http,或者我不在乎gandalf如何与bilbo交谈 - 这就是我喜欢的Erlang。也许我nai:真的期望node.js是使用Javascript糖的erlang吗?

+9

“我最近遇到了node.js,一个(邪恶的)声音开始低语” - 可能是Douglas Crockford。 – 2010-07-26 18:59:54

+0

也许,但只有当恶语也说永远不要用++或 - 。 – 2010-07-26 20:19:39

+0

或者总是缩进,特别是四个空格,而不是2不是3,并且绝对不是\ t ...... – Rixius 2010-07-28 17:26:02

回答

4

据我所知,Node.JS节点是V8引擎的一个实例,其中运行了Node.JS运行时和事件循环。虽然Node.JS运行时使您能够非常快速并简单地开始处理HTTP请求,但它不是强制性的;它确实非常擅长处理大多数任何类型的异步I/O。

对Erlang我不太了解,但我的肤浅认识是它的强大之处在于高并发计算。 Node.JS本身并不专注于此。它的心脏是“平坦的I/O”,用异步I/O整齐干净地处理。

7

与Erlang/OTP相比,Node.js与Twisted有很多共同之处。 Node.js只是一个线程SEDA事件循环。当涉及到分发,热代码重新加载和通过进程的可扩展性时,Node.js与Erlang VM相比没有什么优势,它不是任何接近“Erlang with Javascript sugar”的东西。

1

节点中没有“节点”。 JS

如前所述,当您运行

node my_script.js 
您正在运行V8 Java脚本解释器 (这是使用它的生命周期一个核心)的一个实例

7

也许是因为你的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. 

在节点,你会在一个非常不同的方式编写此:

​​

如果在您的节点错误代码。js脚本,如:

while(true) { } 

然后你卡住过程,它将不能够比目前要处理更多的请求,所以在Node.js的是必须遵循上述原则。