filesystems – Node.JS:“fs.watchFile”如何工作?

根据API docs for Node 0.4.3,fs.watchFile(filename,[options],listener)函数启动一个例程

Watch for changes on filename. The callback listener will be called each time the file is accessed.

它也说

The options if provided should be an object containing two members a boolean, persistent, and interval, a polling value in milliseconds

这表明它将根据间隔内的频率进行检查。但是它也说

The default is { persistent: true, interval: 0 }.

那么这是否意味着它会检查每毫秒以查看文件时间是否改变?听听操作系统级别的事件吗?这是如何工作的?

是的,cpedros是正确的,这似乎是一个重复的。我想我可以再说一遍了。

每个操作系统都有自己的文件更改事件被触发。在Linux上,它是inotify(以前是dnotify),在Mac上是fsevents,在Windows上它是FileSystemWatcher。我不知道底层代码是否处理每个案例,但这是一般的想法。

如果你只是想在Linux上观看一个文件,我建议你使用node-inotify-plus-plus.如果你想观看一个目录,请使用inotify-plus-plus和node-walk.我已经实现了它,它的工作就像一个魅力。

如果您有兴趣,我可以发布一些代码。 node-inotify-plus-plus背后的美丽之处在于它吸收了大量的inotify的烦恼,并提供了直观的API来监听文件上的特定事件。

编辑:这不应该被用来观看大量的文件。在我的系统上,最大值为8192.您可以通过使用此命令cat / proc / sys / fs / inotify / max_user_watches找到最大值。这可以用于只是观看目录进行更改,然后从中找出各个文件。如果修改了该目录下的文件,修改后的事件将触发。

编辑:感谢@guiomie指出,Windows上现在完全支持观看文件。我假设这是与v0.6.x版本。

http://stackoverflow.com/questions/5394620/node-js-how-does-fs-watchfile-work

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:filesystems – Node.JS:“fs.watchFile”如何工作?