Node.JS:“fs.watchFile”如何工作?
根据Node 0.4.3的API文档 , fs.watchFile(filename, [options], listener)
函数启动一个例程
注意
filename
变化。 每次访问文件时都会调用callback
监听器。
它也说
提供的
options
应该是一个包含两个成员的对象,一个布尔型,persistent
和interval
,一个以毫秒为单位的轮询值
这表明它会根据间隔时间来检查每一个。 但它也说
缺省值是
{ 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版本。
为了延伸tjameson的梦幻般的答案,你可以使用watchr来规范节点versiosn和OS之间的差异。 它还提供了unlink
和new
unlink
事件,而不仅仅是change
,还增加了对目录树监视的支持。