根据API docs for Node 0.4.3,fs.watchFile(filename, [options], listener)
函数启动一个例程,该例程将
查看filename
上的
更改。每次访问文件时都会调用
callback
侦听器。
它还说
options
(如果提供)应该是包含两个成员的对象:布尔值persistent
和轮询值interval
(以毫秒为单位
这表明它将根据间隔中的内容频繁地进行检查。但它也说
默认值为
{ persistent: true, interval: 0 }
。
那么这是否意味着它将每毫秒检查一次,看看文件时间是否发生了变化?它是否监听操作系统级别的事件?这是如何工作的呢?
发布于 2011-04-03 13:15:43
是的,cpedros是正确的,这看起来确实是重复的。不过,我想我可以对此有更多的了解。
每个操作系统都会触发自己的文件更改事件。在Linux上,它是inotify (以前是dnotify),在Mac上,它是fsevents,在Windows上,它是FileSystemWatcher。我不确定底层代码是否能处理每种情况,但这是一般的想法。
如果你只是想在Linux上看一个文件,我推荐node-inotify-plus-plus。如果你想查看一个目录,在node-walk中使用inotify-plus-plus。我已经实现了这一点,它就像一个护身符。
如果你感兴趣,我可以发布一些代码。node- inotify -plus-plus背后的美妙之处在于,它抽象了inotify的大部分糟糕之处,并提供了一个直观的API来监听文件上的特定事件。
编辑:这不应该用来查看大量的文件。在我的系统上,最大值是8192。您可以使用此命令cat /proc/sys/fs/inotify/max_user_watches
找到您的最大值。这可以用来观察目录的变化,然后找出其中的单个文件。如果直接位于该目录下的文件被修改,则会触发modified事件。
编辑:感谢@guiomie指出,Windows现在完全支持观看文件。我假设这是在v0.6.x版本中。
发布于 2012-04-19 11:44:39
要扩展tjameson的精彩答案,您可以使用watchr来标准化节点版本和操作系统监视差异之间的应用编程接口。它还为unlink
和new
提供事件,而不仅仅是change
,还添加了对目录树监视的支持。
https://stackoverflow.com/questions/5394620
复制相似问题