我正在开发一个小型 NodeJS 应用程序,该应用程序本质上用作基于浏览器的桌面搜索,用于搜索基于 LAN 的服务器,可供多个用户查询。 LAN 上的用户都可以访问该服务器上的共享文件夹,并且习惯于将文件放在该文件夹中以供所有人共享,我希望保持该过程相同。
我遇到的第一个解决方案是 fs.watchFile在其他 stackoverflow 问题中已经提到了这一点。在第一个 question用户 Ivo Wetzel注意到在 linux 系统上 fs.watchFile 使用 inotify 但是,认为 fs.watchFile 不应该用于大量文件/文件夹。
在另一个 question关于 fs.watchFile 用户 tjameson首先重申在 Linux 上 inotify 将由 fs.fileWatch 使用,并建议仅使用 node-inotify-plusplus 的组合。和 node-walk但再次声明此方法不应用于大量文件。通过评论和回应,他建议只查看目录的修改时间,然后重新扫描相关目录以查找文件更改。
我最大的障碍似乎是,即使有 tjameson 的建议,监控的文件夹数量仍然存在硬性限制(其中有很多并且还在增加)。此外,它必须递归完成,因为目录树有点深,并且在较低的分支上也可能会发生变化,所以我必须在每个文件夹级别监视以下内容(或者监视文件夹的修改时间,然后扫描以了解发生了什么):
- 创建文件或子文件夹
- 删除文件或子文件夹
- 移动文件或子文件夹
- self 删除
- self 移动
假设 inotify 具有与上面所说的一致的限制,那么当我有大量嵌套子文件夹时,仅此一项对我来说似乎可能是监视器太多了。真正令人敬畏的方式似乎涉及kqueue我随后在 google group 中找到了关于更好的 fs.fileWatch 的讨论主题。 .
在我看来,保持相关文件和文件夹信息的数据库是查询方面的适当操作过程,但保持该数据库与关注目录下文件系统的实际状态同步,这对我来说似乎很清楚将是挑战。
那么社区的想法是什么?有没有更好或众所周知的解决方案来解决我不知道的这个问题?最好只查看所有感兴趣的目录以进行单个更改,例如修改时间然后扫描看看发生了什么?观察所有相关的 inotify 警报并适本地修改数据库会更好吗?这不是像我这样的农民能解决的问题吗?
最佳答案
看看monit .我用它来监视我的开发环境中的文件更改,并在相关项目文件更改时重新启动我的 Node 进程。
关于search - Node JS : How would one watch a large amount of files/folders on the server side for updates?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5567457/