保持两个流星收藏同步
Keep two Meteor collections in sync
我想使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()
句柄,代码可以正常工作。
那么,我可以不停止句柄还是会给我内存泄漏?或者我应该如何保持两个流星收藏的同步?
您可以使用 matb33:collection-hooks
侦听对集合的更新。这将是服务器端:
Settings.after.update(function(userId, doc, fieldNames, modifier, options){
var insert = {};
//...your logic
ServiceConfiguration.configurations.update({service: "xmpp"}, insert);
});
退房 https://github.com/matb33/meteor-collection-hooks
TL/DR - 是的,你可以删除它。
如果我理解正确,在这种情况下,多个用户可以订阅"设置"发布,可能会更改设置集合中的设置,并且您需要自动将这些设置传播到 ServiceConfiguration 集合。
如果是这种情况,则不应尝试停止观察器,因为它是一个全局构造,旨在监视任何用户的所有更改。 您需要在发布闭包时停止观察者的情况是,当观察器从发布函数中运行时,因此会为每个连接的用户生成一个新的观察器。 如果您在这种情况下不停止观察者,则同一用户可能会反复连接和断开连接,并且您可能拥有无限数量的正在运行的观察者,并且您的应用程序将死亡。
但是,在这里,您永远只有一个观察器,该观察器独立于订阅客户端的数量运行。 此外,当任何单个发布停止时,您无法停止它,因为可能仍有其他客户端订阅者可以继续进行更改。
总之,删除onStop
块是可以的。 如果这没有意义,请告诉我。
- JQuery合并了keyup和focusout两个函数
- 如何使用 node.js 比较两个 json 数组
- 为复选框javascript指定两个值
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- 单击时切换两个图像
- 我可以'我似乎不知道如何修复javascript中的两个lint.有人能帮我理解吗
- 连接流星中的两个收藏(帖子评论)
- 保持两个流星收藏同步
- 流星:如何在MongoDB中单击一下即可从两个集合中删除两个文档
- 流星:通过 DDP 连接两个应用程序时,模板帮助程序中没有来自远程集合的文档
- 如何发布流星收藏中的所有记录..除了一两个
- 两个流星应用程序在一个数据库上的性能
- 渲染两个静态流星模板之间路由的最佳方式
- 流星——选择mongodb集合中的前两个对象
- 如何在文档(流星)中找到()数组中的两个值
- 如何返回两个字段,在流星上有不同的限制
- 流星,MongoDB.从集合中获取数据的麻烦(查找两个日期之间的文档)
- 在两个流星模板之间推送数据
- 如何比较流星HTML中的两个变量
- 流星:两个名称列表,项目可以在它们之间交换