C++ NodeJS文件系统监视抛出事件两次或更频繁

C++ NodeJS文件系统监视抛出事件两次或更频繁,c++,events,node.js,filesystems,inotify,C++,Events,Node.js,Filesystems,Inotify,我正在Ubuntu上观看我的NodeJS服务器的配置文件,使用: for( var index in cfgFiles ) { fs.watch(cfgFiles[index], function(event, fileName) { logger.info("======> EVENT: " + event); updateConfigData(fileName); }); } 因此,每当我保存一个配置文件时,同一文件名的handler函

我正在Ubuntu上观看我的NodeJS服务器的配置文件,使用:

for( var index in cfgFiles ) {
    fs.watch(cfgFiles[index], function(event, fileName) {
        logger.info("======> EVENT: " + event);
        updateConfigData(fileName);
    });
}
因此,每当我保存一个配置文件时,同一文件名的handler函数至少会收到两次“change”事件,导致updateConfigData()被多次执行。在使用C++/iNotify查看配置文件时,我也经历了同样的行为


有人知道这种行为的原因吗?

简短回答:它不是节点,文件确实更改了两次

长答案

我在开发设置中使用了一种非常类似的方法。我的管理器进程监视所有js源文件(如果它是开发机器),并在集群上重新启动childs

我没有注意到这一点,因为这只是开发设置;但当我读了你的问题后,我看了一眼,意识到我也有同样的行为

我在本地计算机上编辑文件,每次保存时,我的编辑器都会通过sftp更新这些文件。每次保存时,文件上的更改事件都会触发两次

我已经检查了fs.watch调用返回的FSWatcher对象的侦听器('change');但它只显示一次我的事件处理程序

然后我做了我应该首先做的测试:“touch file.js”在服务器上,它只触发了一次。所以,对我来说,它不是节点;但文件确实更改了两次。当打开文件进行写入(而不是追加)时,可能会触发更改,因为它会清空内容。然后,当写入新内容时,它会再次触发事件


这不会给我带来任何问题;但是如果你想阻止它,通过保留每个文件的调用号码,您可以在事件处理程序函数中进行奇偶控制,并且只对偶数索引调用执行任何操作。

请参阅这一点,说明问题是由编辑器在保存时对文件进行多次编辑造成的。

您是否有机会检查这种情况?你的问题和我下面解释的一样吗?如果您需要我的回答中的任何澄清,请通过发表评论让我知道。我的回答没有解决您的问题吗?对不起,hasanyasin,我在另一个项目领域非常忙,但肯定会在这个领域回来。