NodeJS Filesystem观看两次或更多次投掷事件

时间:2012-06-18 09:29:08

标签: 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);
    });
}

因此,每当我保存配置文件时,处理函数至少会为同一文件名接收“change”事件两次,导致updateConfigData()多次执行。使用C ++ / iNotify观看配置文件时,我遇到了相同的行为。

有没有人知道导致这种行为的原因是什么?

2 个答案:

答案 0 :(得分:5)

简答:这不是Node,文件确实改变了两次。

长答案

我有一个非常类似的方法,我用于我的开发设置。我的经理进程监视所有js源文件(如果它是开发机器并重新启动集群上的子节点)。

我没有注意到这个,因为它只是开发设置;但是在我读完你的问题后,我看了一眼,发现我有同样的行为。

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

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

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

这对我没有任何问题;但是如果你想阻止它,你可以通过保留每个文件的电话号码,在你的事件处理函数中做一个奇偶控制,并且只对偶数索引的调用做任何事情。

答案 1 :(得分:0)

请参阅my response to a similar question,其中说明问题是由您的编辑在保存时对文件进行多次编辑引起的。