Не совсем верно.
- Да, вы можете распространять сообщения JSON
- Часть с горячей заменой кода немного сложнее, позвольте мне объяснить ...
Хорошо, во-первых, вам, очевидно, нужно провести валидацию и т. Д., Это не должно быть большой проблемой. Первая небольшая проблема возникает из-за JSON, который не допускает никакого кода / функций JS, поэтому вы можете обойти это, отправив данные в виде строки.
Следующая проблема, когда вы хотите заменить функцию / метод, вам нужно убедиться, что она сохраняет свою область видимости, чтобы вновь скомпилированные функции имели доступ к тем же вещам.
С некоторой темной магией eval
это определенно возможно , но не ожидайте, что она будет настолько же естественной, как в Эрланге:
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% случаев и областей применения. Кроме того, синтаксис ужасен, поэтому я хотел бы предложить, если вы хотите горячую замену, оставайтесь с Эрлангом.
Помните: Правильный инструмент для правильной работы.
Обновление
Там не будет ничего лучше, чем в ближайшем будущем, см .:
https://github.com/ry/node/issues/issue/46#issue/46/comment/610779