【问题标题】:NodeJS large directory file changesNodeJS 大目录文件更改
【发布时间】:2013-12-12 22:37:31
【问题描述】:

我正在开发更多的安全仪表板,它监视整个主目录中包含数百个站点(所有 Joomla,所以有很多文件)中文件的更改。

为了及时了解潜在的安全问题,我们希望以一种有效的方式监视文件更改,而不会产生不必要的 CPU/内存开销。我们希望以更快的时间间隔观看它,但我知道它更多的是一种平衡行为,当您确实希望防止它使用更多的 cpu 而不是辅助进程应该使用时。

我尝试使用“watch”和以下代码,在主目录中运行:

var watch, fs;
watch = require('watch');
fs = require('fs');

watch.createMonitor(__dirname,{interval:500,filter:function(file,stat){
    if(file.indexOf('index.php')!=-1){
        return true;
    }else{
        return false;
    }
}},function(monitor){
    monitor.filter(function(file){
        console.log(file);
    })
    monitor.on('created',function(file,stat){
        console.log(file + ' new');
    });
    monitor.on('changed',function(file,stat){
        console.log(file + ' changed');
    });
    monitor.on('removed',function(file,stat){
        console.log(file + ' deleted');
    });
});

但是,这会使 CPU 达到 8 个单核(有时是 2 个)的 100% 以上。内存也很快占用了大约 8gb 的 20%。这只是为了在所有文件上创建监视事件,因此它可以在实际检测到任何文件更改之前。

我知道这个问题是它单独遍历每个文件,并且只有在您过滤那种文件时才不会跟踪它。通常我需要注意的是每个目录中的 index.php,直到它可以保持一致(有一些例外)。

是否已经构建了一个模块来执行此操作?或者这是什么新东西?我发现的所有模块都假设它是一个较小的目录(比如看 LESS 或其他东西)所以根本不是为这种应用程序构建的。

有什么想法吗?我知道这段代码需要废弃,因为我无法看到停止 CPU 开销。

【问题讨论】:

    标签: node.js watch


    【解决方案1】:

    不要使用package 'watch',只使用fs.watch(...)

    包'watch':

    fs.watch(..)

    【讨论】:

    • 这是我开始走的路线。它不能观看除文件之外的任何内容,但通过使用 fs.readdir 和一些 forEach 循环,我可以轻松地过滤到我想要的文件。
    猜你喜欢
    • 2012-03-22
    • 1970-01-01
    • 2015-01-11
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    相关资源
    最近更新 更多