Meteor:服务器端数据库插入延迟

4
有趣的问题:我有一个MongoDb集合,我在服务器端进行更新,在Meteor客户端钩入同一集合。我注意到,对于一个mongo-cursor(服务器端)插入的记录,需要约10秒钟才能传递到客户端。
问题在于:如果我通过Meteor Client(通过Chrome控制台)进行相同的插入,则客户端和所有其他附加的客户端都可以在次秒内更新。
服务器端插入到Mongo与客户端侧之间存在非常大的差异-以某种方式,客户端侧插入比我通过MongoDb shell手动插入文档更快地传播并推送到其他客户端。
对此有什么想法吗?我确定我漏掉了什么...
1个回答

3
流星Mongo驱动程序每10秒轮询Mongo中的更改,以确保从Meteor外部写入的数据传递到客户端。以下是相关的源代码
  // every once and a while, poll even if we don't think we're dirty,
  // for eventual consistency with database writes from outside the
  // Meteor universe
  var intervalHandle = Meteor.setInterval(
    _.bind(self._ensurePollIsScheduled, self), 10 * 1000 /* 10 seconds */);
    self._stopCallbacks.push(function () {
    Meteor.clearInterval(intervalHandle);
  });

这种行为可能会发生变化 核心开发人员之一Matt Debergalis所说

这种轮询是为了让Meteor注意到没有通过Meteor服务器处理的数据库更改。

然而,很多应用程序并不需要这个功能。我们正在考虑禁用它的方法。我们也有一个更有效的实现计划。


谢谢。我有可能能够观察()解决这个问题吗?看文档时我在想是否有一种方法可以强制它更频繁地更新... - mcauth
可能有一种强制的方法,但说实话,我要么(1)使用 DDP 推送数据,要么(2)等待并查看 in the hopper 中的内容,因为他们的发布周期相当快... - TimDog
DDP 对我来说确实是正确的选择。我将发布一个单独的问题,询问它的具体实现方式 - 目前已有的库似乎非常新,并且缺乏示例。再次感谢,这对我来说足够了。 - mcauth
1
通过你的建议 @TimDog,我已经让它工作了。完整的解决方案已发布在这里。非常感谢! - mcauth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接