NodeJS文件系统两次或更频繁地观察抛出事件
Posted
技术标签:
【中文标题】NodeJS文件系统两次或更频繁地观察抛出事件【英文标题】:NodeJS Filesystem Watch throwing event twice or more often 【发布时间】:2012-06-18 09:29:08 【问题描述】:我正在 Ubuntu 上查看我的 NodeJS 服务器的配置文件:
for( var index in cfgFiles )
fs.watch(cfgFiles[index], function(event, fileName)
logger.info("======> EVENT: " + event);
updateConfigData(fileName);
);
因此,每当我保存配置文件时,相同文件名的处理函数至少会收到两次“更改”事件,从而导致 updateConfigData() 被执行多次。我在使用 C++/iNotify 观看配置文件时遇到了同样的行为。
有人知道导致这种行为的原因吗?
【问题讨论】:
你有机会检查一下情况吗?你的问题和我下面解释的一样吗?如果您需要对我的回答进行任何澄清,请通过发表评论告诉我。 我的回答没有解决你的问题吗? 对不起,hasanyasin,我在另一个项目领域很忙,但一定会回来的。 【参考方案1】:简答:不是Node,文件真的改了两次。
长答案
我有一个非常相似的方法用于我的开发设置。如果是开发机器,我的 manager 进程会监视所有 js 源文件,并在集群上重新启动子进程。
我没有注意这个,因为它只是开发设置;但是在阅读了您的问题后,我看了一下并意识到我有同样的行为。
我在本地计算机上编辑文件,我的编辑器在我保存时通过 sftp 更新它们。每次保存时,文件上的更改事件都会触发两次。
我检查了由 fs.watch 调用返回的 FSWatcher 对象的 listeners('change');但它只显示我的事件处理程序一次。
然后我做了我应该先做的测试:服务器上的“touch file.js”,它只触发了一次。所以,对我来说,它不是 Node,而是 Node。但文件真的被改变了两次。当打开文件进行写入(而不是追加)时,它可能会触发更改,因为它会清空内容。然后在写入新内容时,会再次触发该事件。
这对我没有任何问题;但是如果你想阻止它,你可以在你的事件处理函数中进行奇偶控制,方法是保留每个文件的调用号,并只在偶数索引调用上做任何你做的事情。
【讨论】:
【参考方案2】:请参阅my response to a similar question,其中说明问题是由编辑器在保存时对文件进行多次编辑引起的。
【讨论】:
以上是关于NodeJS文件系统两次或更频繁地观察抛出事件的主要内容,如果未能解决你的问题,请参考以下文章