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有一个"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()
}
相关文章:
- 代码只能在jsfiddle中工作
- 为什么不是'我的函数在解析云代码中工作吗?当我在Angular和Express中测试时,它是有效的
- 谷歌地图Api和JS代码不工作
- 如何检查这个代码点火器php函数是否工作,该函数是否在ajax url中使用
- 为什么这个代码不能正常工作
- Don't工作警报代码jQuery
- addEventListener的Javascript代码不工作!?(单击时打开放大的img)
- 我需要一个jQuery函数来只工作在700px以上的屏幕大小,无法在我的代码中发现错误
- 这个jquery代码是如何工作的
- 代码在angular中未按预期工作
- JavaScript代码未按预期工作
- 为什么jQuery代码段在没有IFrame的情况下可以工作,而在有IFrame时却不能工作
- 谷歌地图自动完成,即使使用工作代码也无法工作
- 需要 RepeatBox 及其行单击事件的工作代码才能在 smartface.io 中跳转到相应的页面上
- 任何人都可以指出我的工作代码或完整的概念图,用于 Angular2 中的 ViewMetadata
- 为什么我可以'不要对这个工作代码进行jsFiddle处理
- 工作代码带来错误addEventListener不是一个函数
- 需要修改此工作代码以在新窗口/选项卡中打开
- jQuery:如何计算和显示列的总和(部分工作代码)
- D3js缩放/拖动在我的代码中不再工作(+代码示例)