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

相关文章

现在的js代码都是这种高级点的方式语法 , 就是ts语法 ,要使用ts语法那就要先安装一下 先安装nodejs最...
nvm是node版本管理工具 为了解决node各种版本存在不兼容现象 nvm是让你在同一台机器上安装和切换不同版...
1、安装nodejs 2、在项目文件夹目录下创建一个js文件,命名server.js(自定义名称),内容如下 3、打开命令...
1.连接路径:path.join([path1][, path2][, ...]) path.join()方法可以连接任意多个路径字符串。要连接...
简介 1.aes加密简单来说,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个...
定义 Object.keys 定义:返回一个对象可枚举属性的字符串数组; Object.getOwnPropertyNames 定义:返回...