当前位置: 首页 > 面试题库 >

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

卞嘉许
2023-03-14
问题内容

根据Node0.4.3的API文档,该fs.watchFile(filename,[options], html" target="_blank">listener)函数启动一个例程,该例程将

注意上的更改filenamecallback每次访问文件时都会调用该侦听器。

它还说

options提供的if应该是包含两个成员的对象,boolean persistentinterval,以毫秒为单位的轮询值

这表明它将每隔一段时间检查一次。但这也说

默认值为{ persistent: true, interval: 0 }

那么这是否意味着它将每毫秒检查一次文件时间是否更改?它是否监听操作系统级别的事件?这是如何运作的?


问题答案:

是的,cpedros是正确的,这似乎是重复的。我想我可以对此进一步阐明。

每个操作系统都有其自己的文件更改事件,该事件会被触发。在Linux上,它是inotify(以前是用于通知),在Mac上是fsevents,在Windows上是FileSystemWatcher。我不确定底层代码是否可以处理每种情况,但这是一般的想法。

如果您只想在Linux上观看文件,建议使用node-inotify-plus-
plus
。如果要观看目录,请在节点移动中使用inotify-plus-plus 。我已经实现了它,并且它就像一个魅力。

如果您有兴趣,我可以发布一些代码。node-inotify-plus-
plus背后的优点在于,它抽象了inotify的大部分功能,并提供了直观的API,用于侦听文件中的特定事件。

编辑:这不应该用来观看大量文件。在我的系统上,最大值为8192。可以使用此命令找到最大值cat /proc/sys/fs/inotify/max_user_watches。这可以用来仅监视目录中的更改,然后从那里找出单个文件。如果直接修改该目录下的文件,则将触发修改事件。

编辑:感谢@guiomie指出,Windows现已完全支持观看文件。我认为这是与v0.6.x版本一起发布的。



 类似资料:
  • 问题内容: 有人可以解释持续监视的工作原理吗? 如果它正在监视文件中的更改,是否会占用PC上的某些资源? 谢谢 ;) 问题答案: 创建一个,然后在要监视的文件上执行。在底层(除了执行明显的stats调用之外)到底发生了什么,取决于编译该节点的事件循环实现。 因此,是的,它占用了一些CPU,但是除了在此处进行轮询之外,您无能为力,也就是说,除非基础文件系统本身会发出文件更改事件。 参见: https

  • 问题内容: 我不了解关于nodejs的几件事。每个信息来源都说,由于缺少线程锁定和上下文切换,node.js比标准线程化Web服务器更具可伸缩性,但是我想知道,如果node.js不使用线程,它将如何并行处理并发请求?事件I / O模型意味着什么? 非常感谢您的帮助。谢谢 问题答案: 节点完全是事件驱动的。基本上,服务器由一个线程处理一个事件接着另一个事件组成。 一个新的请求进入是一种事件。服务器开

  • 问题内容: 我对Node.js流有疑问-特别是它们在概念上如何工作。 不缺少有关如何使用流的文档。但是我很难找到流在数据级别如何工作。 我对Web通信HTTP的有限理解是,来回发送完整的数据“包”。类似于个人订购公司目录,客户端向服务器发送GET(目录)请求,然后服务器以目录进行响应。浏览器不会收到目录的页面,而是会收到整本书。 节点流可能是多部分消息吗? 我喜欢REST模型- 尤其是它是无状态的

  • 问题内容: 在我提出疑问之前,我至少应该解释一下使用中间件时发生的事情。要使用中间件,要使用的功能是。在执行中间件时,它将使用或使其调用下一个中间件,从而不再调用任何中间件。这意味着我放置中间件调用的顺序很重要,因为某些中间件依赖于其他中间件,而接近末尾的某些中间件甚至可能不会被调用。 今天,我正在开发应用程序,并在后台运行服务器。我想进行一些更改并刷新页面,然后立即查看更改。具体来说,我正在更改

  • 问题内容: 我尝试了这个: 所以我想象require()可能是这样实现的: 那正确吗?请帮助我了解require()或在哪里可以找到源代码。谢谢! 问题答案: 源代码在这里。/ 不是关键字,而是全局变量。你的主要脚本包前开始在其拥有所有喜欢全局的功能,等在其上下文。 请注意,虽然module.js本身正在使用,但这是一个不同的require函数,它是在名为“ node.js”的文件中定义的 上面的

  • 问题内容: 输出如下: 我原以为takes2Second函数会在takes5Second开始之前完全完成。那是应该如何工作的。请告诉我。最后的功能永远不会运行。谢谢。 问题答案: 不完全的。您正在立即执行这些功能(对数组求值后立即执行),这就是它们似乎同时启动的原因。 传递给要执行的每个函数的回调在异步库内部。您可以在函数完成后执行它,并传递错误和/或值来执行它。您无需自己定义该功能。 最终函数永