在node.js中自修改代码会集群工作吗?

时间:2013-11-29 15:39:50

标签: javascript node.js self-modifying

我问这个,因为我现在没有工具或时间来测试这个,但这个想法让我感到烦恼。当我有时间玩它时,我会自己回答。

在node.js中,require()如何工作?它是否在内存中保留了所需的功能?或者它会重新读取文件吗?

例:

launcher.js

var cluster = require('cluster');

if (cluster.isMaster) {
    cluster.fork();
    cluster.on('exit', function () {
        cluster.fork();
    }
}
if (cluster.isWorker) {
    var self = require('self_modifying.js');
    self.start()
}

只要self_modifying.js有一个start()函数,它就是' main'方法,它可以通过修改自己的源文件和process.exit(0)进行自我更新,然后用它重新启动新代码?

2 个答案:

答案 0 :(得分:3)

回答:

  

在node.js中,require()如何工作?它是否在内存中保留了所需的功能?或者它会重新读取文件吗?

在node.js中,当执行require时,它将缓存正在加载的模块,因此每次进一步需要调用都将从内存加载,而不是从磁盘加载优化。请参阅:http://nodejs.org/api/modules.html#modules_caching

答案 1 :(得分:1)

正如@Tom Grant指出的那样,模块是缓存的。因此,您需要在重新开始之前尊重您的应用程序,例如解释here

这项工作,但需要self_modifying.js导出函数start

var cluster = require('cluster');

if (cluster.isMaster) {
    cluster.fork();
    cluster.on('exit', function () {
        delete require.cache[require.resolve('/full/path/to/self_modifying.js')];
        cluster.fork();
    }
}
if (cluster.isWorker) {
    var self = require('self_modifying.js');
    self.start()
}