cursor.observe如何工作以及如何避免多个实例运行?

时间:2012-10-26 23:17:17

标签: mongodb meteor

观察

我试图弄清楚 光标 .observe 是如何在流星内部运行的,但却一无所获。 Docs

  

建立实时查询,通知回调对查询结果的任何更改。

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

  • 我的观察员功能将在哪里执行?通过流星还是通过mongo?

多次运行

当我们不仅仅是订阅观察者的用户时,每个客户端都会运行一个实例,从而导致我们遇到性能和竞争条件问题。

  • 如何将observe实现为singleton?只有一个实例运行。

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

1 个答案:

答案 0 :(得分:8)

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

  1. 构建与查询匹配的文档集。
  2. 定期使用查询轮询数据库并对更改进行区分,并将相关事件发送给回调。
  3. 当流星本身将匹配数据更改/插入mongo时,发出相关事件,短路步骤#2。
  4. 有计划(可能在下一个版本中)自动确保共享具有相同参数的订阅调用。所以基本上会自动为你处理单身部分。

    当然你可以自己实现这样的目标,但我相信这对流星团队来说是一个高优先级,因此在这一点上可能不值得付出努力。