【问题标题】:How cursor.observe works and how to avoid multiple instances running?cursor.observe 如何工作以及如何避免多个实例运行?
【发布时间】:2012-10-26 23:17:17
【问题描述】:

观察

我试图弄清楚 cursor.observe 如何在流星中运行,但一无所获。 Docs

建立一个实时查询,在查询结果发生任何变化时通知回调。

我想更好地理解 实时查询 的含义。

  • 我的观察者函数将在哪里执行?通过 Meteor 还是通过 mongo?

多次运行

当我们有多个订阅观察者的用户时,每个客户端都会运行一个实例,这会导致我们出现性能和竞争条件问题。

  • 我怎样才能像singleton 一样实现我的observe?只需一个实例即可运行。

编辑:这里有第三个问题,但现在是一个单独的问题:How to avoid race conditions on cursor.observe?

【问题讨论】:

  • 我选择一起问两个问题,因为我猜它们太耦合了。第一个可能会回答第二个。

标签: mongodb meteor


【解决方案1】:

服务器端,截至目前,observe 的工作方式如下:

  1. 构造与查询匹配的文档集。
  2. 定期使用查询轮询数据库并获取更改的差异,将相关事件发送到回调。
  3. 当匹配数据被流星本身更改/插入到 mongo 中时,发出相关事件,将上面的步骤 #2 短路。

有计划(可能在下一个版本中)自动确保共享具有相同参数的订阅调用。所以基本上会自动为你处理单例部分。

当然,你自己也可以实现这样的目标,但我相信这是流星团队的首要任务,所以目前可能不值得付出努力。

【讨论】:

  • 我不确定。我看到了另一个问题,如果这就是你的意思。
  • 好的,很酷,有道理。如果马特没有回复,我会向您发送另一个问题的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多