NodeJS:如何在服务器端观看大量的文件/文件夹进行更新?

我正在开发一个小型的NodeJS应用程序,它基本上用作基于浏览器的桌面search,以便用户可以查询的基于局域网的服务器。 在局域网上的用户都可以访问该服务器上的共享文件夹,传统上习惯于将文件夹放在该文件夹中以便在每个人之间共享,并且我希望保持该过程相同。

我碰到的第一个解决scheme是fs.watchFile ,在其他的stackoverflow问题上已经被触及。 在第一个问题中,用户Ivo Wetzel指出,在linux系统上,fs.watchFile使用inotify,但是认为fs.watchFile不应该用于大量的文件/文件夹。

在关于fs.watchFile的另一个问题中 ,用户tjameson首先重申,在Linux上,inotify将被fs.fileWatch使用,并推荐使用node-inotify-plusplus和node-walk的组合,但是再次声明这种方法不应该用于大量的文件。 有了评论和回应,他build议只查看目录的修改时间,然后重新扫描相关目录以更改文件。

我的最大障碍似乎是,即使有tjameson的build议,受监控文件夹的数量仍然有很大的限制(其中有很多不断增长的文件夹)。 此外,它将不得不做recursion,因为目录树是有点深,也可能会受到更改在较低的分支机构,所以我将不得不在每个文件夹级别监视以下(或者监视修改时间的文件夹,然后扫描以查明发生了什么):

  • 创build文件或子文件夹
  • 删除文件或子文件夹
  • 移动文件或子文件夹
  • 删除自我
  • 自我移动

假设inotify的限制与上面所说的一致,那么当我拥有大量的嵌套子文件夹时,这对我来说似乎可能是太多监视器。 真正的真棒方式看起来像它会涉及kqueue ,我后来发现,作为一个更好的fs.fileWatch在谷歌组讨论的话题。

在我看来很清楚,保持相关文件和文件夹信息的数据库是在事物的查询方面的适当的操作过程,但是保持该数据库与在所关注的目录下的文件系统的实际状态同步将是挑战。

那么社区是怎么想的呢? 有没有一个更好的或众所周知的解决scheme来攻击这个问题,我只是不知道? 最好只是观察所有感兴趣的目录,例如修改时间,然后扫描以查明发生了什么? 观察所有相关的inotify警报并适当地修改数据库是否更好? 这不是像我这样的农民可以解决的问题吗?

看看monit 。 我用它来监视我的开发环境中的更改文件,并在相关项目文件更改时重新启动我的节点进程。

我build议你看看Dropbox的API 。

我在客户端和服务器端使用ruby进行类似的实现。 最好的办法是保持哈希来检查文件或文件夹是否改变。