【问题标题】:worker process run code of master process主进程的工作进程运行代码
【发布时间】:2014-08-17 14:38:39
【问题描述】:

当我更改 test.js 时,console.log("Source code change, start to restart worker one by one") 运行 3 次?我有一个主进程,所以应该是一次

var cluster = require('cluster');
var fs      = require('fs');

if (cluster.isMaster) {

    for (var i = 0; i < 2; i++) {
        cluster.fork();
    }

    fs.watch('./config/test.js', function(curr, prev) {
        console.log("Source code change, start to restart worker one by one");
        delete require.cache[require.resolve('./config/config.js')];
    })

}else{
    var config = require('./config/test.js')
}

【问题讨论】:

  • 我怀疑。如果你把你的 3 名工人改为 10 名会发生什么?我假设您的修改过程更改了文件 3 次...
  • @CFrei,是的,我换成 10 个工人,我还是得到 3 个。那你发现了什么问题?
  • @CFrei,我的 nodejs 服务器在 Amazon 的 EC2 上运行,我使用 WinSCP 远程修改 test.js

标签: node.js process


【解决方案1】:

不知何故,您的看门狗 (fs.watch) 被触发了 3 次,可能是因为您写入了三个数据块?当文件变大时,它可能会更频繁地触发? (也许 WinSCP 在写入之前会截断文件?)

我假设您只想在文件完全上传时触发?

很遗憾,您无法收到来自inotify(..) 的消息IN_CLOSE_WRITE

所以在你的fs.watch 中执行类似var old = to; to = setTimeout(function() { clearTimeout(old); /* insert real stuff here */ }, 1000) 的操作。如果文件在 1000 毫秒内不断变化,则该函数只会触发一次...

【讨论】:

  • 是的,我认为这是我现在能做的最好的方式,谢谢!
猜你喜欢
  • 2016-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多