完全に正しくありません。
- はい、JSONメッセージを配布できます
- ホットコード置換の部分はもう少し複雑です...説明させてください...
OK、最初に検証などを実施する必要がありますが、それは大きな問題ではありません。最初の小さな問題は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を参照してください。