我想使ServiceConfiguration
集合与设置集合保持同步。我(几乎)使用observeChanges
如下方法完成了此任务:
var handle = Settings.find().observeChanges({
changed: function (id, post) {
var insert = {};
post.hostName && (insert.host = post.hostName);
post.domainName && (insert.domain = post.domainName);
ServiceConfiguration.configurations.update({service: "xmpp"}, insert);
}
});
Meteor.publish("Settings", function() {
this.onStop = function () {
handle.stop();
};
return Settings.find();
});
但是,此代码的问题是发布的onStop
方法被立即调用,而不是在客户端断开连接时被调用。我使用该回调的原因是因为Meteor文档强调了手动取消observeChanges
句柄的重要性,但是如果以这种方式取消它,那么我实际上将无法观察到对该集合所做的更改。但是,如果我没有stop()
处理该代码,该代码就可以正常工作。
因此,我不能停止手柄吗?还是会导致内存泄漏?还是应该使两个Meteor集合保持同步?
TL / DR-是的,您可以删除它。
如果我正确理解,则可能是多个用户可以订阅“设置”发布,有可能更改“设置”集合中的设置,并且您需要将这些设置自动传播到ServiceConfiguration集合。
如果是这种情况,那么您不应该尝试停止观察者,因为它是一个全局构造,旨在监视任何用户的所有更改。在你需要在发布关闭停止观测器的情况是当观察者从运行中的发布功能,所以没有为每个连接的用户生成一个新的。如果您在这种情况下不停止观察者,则同一用户可能会反复连接和断开连接,并且您将可能拥有无限数量的正在运行的观察者,并且您的应用程序将死亡。
但是,在这里,您将只有一个观察者,该观察者的运行与订阅客户端的数量无关。此外,在停止任何单个发布后,您将无法停止它,因为可能还会有其他客户订阅者可以继续进行更改。
总而言之,删除该onStop
块是可以的。让我知道这是否没有道理。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句