Erlang风格的Node.Js?

当谈到Node.Js和Erlang时,我是一个完整的noob。 但是不可能构build一个模拟Erlang行为的Node.js应用程序?

例如,您可以将json消息传递到分布式node.js服务器园区,甚至可以将新代码传递给那些不会离线的服务器,就像erlang一样。

如果您收到消息时激活了消息处理程序callback,则此消息处理程序可以检查消息是否为代码更新消息,从而使用新代码replace自身(当前处理程序)。

所以应该有可能让Node.Js服务器没有宕机代码更新W / O太多大惊小怪,对吧?

不完全正确。

  1. 是的,你可以分发JSON消息
  2. 热代码部分更复杂一点,让我解释一下…

好的,首先你显然需要validation等,这不应该是一个大问题。 第一个小问题来自于JSON,它不允许任何JS代码/函数,你可以通过以stringforms发送数据来解决这个问题。

接下来的问题是,当你想要replace函数/方法时,你需要确保它保持作用域,以便新编译的函数可以访问相同的东西。

用一些黑暗的eval魔法这当然是可能的 ,但是不要指望它像Erlang一样自然地接近它:

 var Script = process.binding('evals').Script; var hello = 'Hello World'; var test = 42; function Swappable(initCode) { this.execute = function() {} this.swap = function(code) { this.execute = eval('func = ' + code); } this.swap(initCode); } // Note: Swappable's scope is limited, it won't inherit the local scope in which it was created... var foo = new Swappable('function(){console.log(hello);return function(){console.log(test)}}') var cb = foo.execute(); cb(); foo.swap('function(){console.log("Huh, old world?");return function(){console.log(test * test)}}'); var cb = foo.execute(); cb(); console.log(bar.execute()); foo.execute(); 

产量

 Hello World 42 Huh, old world? 1764 

这并不能保证在所有案例和范围内100%的工作。 此外,语法是可怕的,所以我build议如果你想热交换,留在Erlang。

记住: 正确的工作的正确工具。

更新
在不久的将来,没有比这更好的了。
https://github.com/ry/node/issues/issue/46#issue/46/comment/610779

这里是一个比较使用Erlang和Node.js的经验的博客:

http://blog.mysyncpad.com/post/2073441622/node-js-vs-erlang-syncpads-experience

这是另一个比较,有目的地不比较速度如此:

http://jlouisramblings.blogspot.com/2010/12/differences-between-nodejs-and-erlang_14.html

内部没有足够的评论意见,但是我想在rvirding的post上回应Ivo Wetzel的评论。 在mysyncpad上有一个更新的博客,作者使用nodejs和v8开发者特别推荐的nodejs版本。

http://blog.mysyncpad.com/post/2143658273/syncpad-node-js-server-revisited

我假设使用脚本模块,您可以执行JavaScript,而无需重新加载服务器。

nodejs的一个小监督脚本。 它运行你的程序,并监视代码的变化,所以你可以有热代码重新加载行为,而不用担心内存泄漏,并确保清理所有的模块间引用,并没有一个全新的需求系统。

但是,当它检测到文件更改时,它会重新加载(非常短的离线时间)。

Interesting Posts