使两个Meteor集合保持同步

弗雷德里克凯伦德

我想使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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使两个Meteor集合保持同步

来自分类Dev

使两个YouTube视频保持同步

来自分类Dev

如何保持两个AVCaptureMovieFileOutput同步

来自分类Dev

在Swift中将滚动与两个集合视图同步?

来自分类Dev

[Meteor] [jQuery]同步两个div的滚动

来自分类Dev

使两个Git分支的特定文件保持同步

来自分类Dev

使两个jenkins服务器保持同步

来自分类Dev

Swift-保持两个属性同步

来自分类Dev

使选择在两个热图之间保持同步

来自分类Dev

JSXGraph:如何使两个图保持同步

来自分类Dev

使两个Git分支的特定文件保持同步

来自分类Dev

使两个jenkins服务器保持同步

来自分类Dev

如何发布Meteor集合中的两个随机项目?

来自分类Dev

如何使两个不同表中的两个不同列保持同步?

来自分类Dev

同步两个JSlider

来自分类Dev

两个git存储库,需要排除其中一个的路径,但保持同步

来自分类Dev

枚举两个集合

来自分类Dev

加入两个集合

来自分类Dev

调整大小时如何保持两个表的列宽同步?

来自分类Dev

Maven:如何在两个独立的Maven项目中保持依赖项版本的同步

来自分类Dev

保持两个远程目录在ubuntu中实时同步

来自分类Dev

如何在RoR中保持两个不同表的属性同步?

来自分类Dev

对一个数组进行排序并使其他两个数组保持同步

来自分类Dev

在两个组织之间同步数据

来自分类Dev

同步两个JTable的视图

来自分类Dev

如何同步两个ScrollViewer?

来自分类Dev

在Java中同步两个线程

来自分类Dev

同步两个svn存储库

来自分类Dev

Rails:确保两个表“同步”