Erlang风格的Node.Js?

对于Node.Js和Erlang,我都是一个完整的菜鸟。 但是不可能构建一个模拟Erlang行为的Node.js应用程序吗? 例如您将json消息传递到分布式node.js服务器园区,甚至将新代码传递给那些没有脱机的服务器,就像erlang一样。 如果您有一个在收到消息时激活的消息处理程序回调,则此消息处理程序可以检查该消息是否是代码更新消息,从而用新代码替换自身(当前处理程序)。 所以应该可以让Node.Js服务器没有停机时间来进行代码更新,而不是太大惊小怪,对吧?     
已邀请:
不完全正确。 是的,您可以分发JSON消息 热代码更换的部分有点复杂让我解释一下...... 好的,首先你显然需要验证等,这应该不是一个大问题。第一个小问题来自JSON,它不允许任何JS代码/函数,你可以通过将数据作为字符串发送来解决这个问题。 下一个问题,当你想要替换函数/方法时,你需要确保它保持它的范围,以便新编译的函数可以访问相同的东西。 有了一些黑暗的
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%中有效。此外,语法是可怕的,所以我建议如果你想热插拔,留在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的帖子上回应上面的Ivo Wetzel的评论。在mysyncpad上有一个更新的博客,作者使用nodejs和v8开发人员特别推荐的nodejs版本。 http://blog.mysyncpad.com/post/2143658273/syncpad-node-js-server-revisited     
我假设使用脚本模块,您可以执行javascript而无需重新加载服务器。 监   nodejs的一个小主管脚本。   它运行你的程序,并监视   代码更改,因此您可以拥有热代码   重新加载行为,没有   担心内存泄漏和制造   确保你清理所有的模块间   参考,没有一个全新的   要求系统。 但是当它检测到文件更改时,它将再次重新加载(非常短的离线时间)。     

要回复问题请先登录注册