[英]Self modifying code in node.js, would cluster work?
我問這個,因為我現在沒有工具或時間來測試這個,但這個想法讓我煩惱。 當我有時間玩它時,我會自己回答這個問題。
在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)就可以自我更新,所以用它重新啟動新代碼?
回答:
在node.js中,require()如何工作? 它是否在內存中保留了所需的功能? 或者它會重新讀取文件?
在node.js中,當執行require時,它將緩存正在加載的模塊,因此每次進一步需要調用將從內存加載它,而不是從磁盤加載作為優化。 請參閱: http : //nodejs.org/api/modules.html#modules_caching
正如@Tom Grant指出的那樣,模塊是緩存的。 因此,你需要重新啟動它之前,尊重你的應用程序,如解釋在這里
這項工作,但需要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()
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.