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

我在问这个,因为我现在没有工具或者时间来testing这个,但是这个想法正在困扰着我。 当我有时间玩时,我会自己回答。

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

例:

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)来自我更新,然后用新代码重新启动?

回答:

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

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

正如@Tom Grant所指出的,模块被caching。 因此,在重新开始之前,您需要尊重您的应用程序,如此处所述

这项工作,但需要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() } 
Interesting Posts