我在 Ubuntu 上查看我的 NodeJS 服务器的配置文件:
for( var index in cfgFiles ) {
fs.watch(cfgFiles[index], function(event, fileName) {
logger.info("======> EVENT: " + event);
updateConfigData(fileName);
});
}
因此,每当我保存一个配置文件时,处理函数至少会收到两次相同文件名的“更改”事件,从而导致 updateConfigData() 被执行多次。我在使用 C++/iNotify 观看配置文件时遇到了同样的行为。
有谁知道导致这种行为的原因吗?
最佳答案
简答:不是Node,文件真的改了两次。
长答案
我在开发设置中使用了一种非常相似的方法。如果它是开发机器,我的管理器进程会监视所有 js 源文件,并在集群上重新启动子进程。
我没有注意这个,因为它只是开发设置;但是在我阅读了您的问题之后,我看了一下并意识到我有相同的行为。
我在本地计算机上编辑文件,每当我保存时,我的编辑器都会通过 sftp 更新它们。每次保存时,文件上的更改事件都会被触发两次。
我已经为 fs.watch 调用返回的 FSWatcher 对象检查了 listeners('change');但它只显示我的事件处理程序一次。
然后我做了我应该先做的测试:服务器上的“touch file.js”,它只触发了一次。所以,对我来说,它不是 Node;但是文件真的改了两次。当打开文件进行写入(而不是附加)时,它可能会触发更改,因为它清空了内容。然后当写入新内容时,它会第二次触发该事件。
这对我来说没有任何问题;但是如果你想阻止它,你可以在你的事件处理函数中进行奇偶控制,方法是保留每个文件的调用号,并只在偶数索引调用上做任何你做的事情。
关于c++ - NodeJS 文件系统观察两次或更多次抛出事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11080132/