node.js中的自修改代码可以集群工作

Self modifying code in node.js, would cluster work?

本文关键字:工作 代码 修改 js node      更新时间:2023-12-24

我之所以问这个问题,是因为我现在没有工具或时间来测试它,但这个想法一直困扰着我。我会在有时间玩的时候自己回答这个问题。

在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有一个"main"方法的start()函数,它就可以通过修改自己的源文件和process.exit(0)进行自我更新,然后用它重新启动新代码?

要回答:

在node.js中,require()是如何工作的?它是否将所需的功能保存在内存中?还是重新读取文件?

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

正如@Tom Grant所指出的,模块是缓存的。因此,在重新启动应用程序之前,您需要尊重它,就像这里解释的

这是可行的,但需要self_modifying.js来导出启动的函数

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()
}