簡體   English   中英

在node.js中自修改代碼會集群工作嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM