3

我正在使用以下命令在 Ubuntu 上查看我的 NodeJS 服务器的配置文件:

for( var index in cfgFiles ) {
    fs.watch(cfgFiles[index], function(event, fileName) {
        logger.info("======> EVENT: " + event);
        updateConfigData(fileName);
    });
}

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

有谁知道是什么导致了这种行为?

4

2 回答 2

5

简短的回答:它不是节点,文件真的被改变了两次。

长答案

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

我没有注意这一点,因为它只是开发设置;但是在阅读了您的问题后,我看了看并意识到我有同样的行为。

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

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

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

这不会对我造成任何问题;但是如果你想阻止它,你可以在你的事件处理函数中进行奇偶控制,方法是保留每个文件的调用号,并只在偶数索引调用上做任何你做的事情。

于 2012-07-04T17:26:40.737 回答
0

请参阅我对类似问题的回复,该回复解释了该问题是由您的编辑器在保存时对文件进行多次编辑引起的。

于 2014-04-26T11:08:35.293 回答