我正在 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 对象的监听器('change');但它只显示我的事件处理程序一次。
然后我做了我应该先做的测试:服务器上的“touch file.js”,它只触发一次。所以,对我来说,这不是 Node;而是 Node。但文件确实被更改了两次。当打开文件进行写入(而不是追加)时,它可能会触发更改,因为它清空了内容。然后当新内容写入时,会第二次触发该事件。
这对我来说不会造成任何问题;但如果你想阻止它,你可以在你的事件处理函数中通过保留每个文件的调用号来进行奇偶控制,并只在偶数索引调用上执行你所做的任何操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)