如何使用pollingThrottle和pollingInterval?

时间:2016-07-29 14:21:55

标签: mongodb meteor ddp

所以我在我的应用程序中有一些东西,我不需要立即反应,并在文档中找到有关属性 pollingThrottleMs pollingIntervalMs 的内容。所以这里基本上是我设法找到的那些属性的所有信息:

  

pollingIntervalMs Number   (仅限服务器)在服务器上观察时轮询此查询的频率。以毫秒为单位。默认为10秒。

     

pollingThrottleMs数字   (仅限服务器)重新轮询之间允许的最短时间。增加这个将节省CPU和mongo负载,但代价是更慢的更新   用户。不建议减少这种情况。以毫秒为单位。默认   到50毫秒。

所以第一个问题 - 我不清楚这些属性之间有什么区别,也许有人可以向我解释一下? (pollingThrottleMs是订阅更新的速率限制,pollingIntervalMs是我们检查更新的频率,据我所知)还pollingIntervalMs默认为10s?真?为什么该物业名称中有Ms?这不可能是正确的。

然后我尝试在我的查询中设置这些属性:

Meteor.publish("currentRoom", function (roomName) {
    return Rooms.find({name: roomName}, {
      pollingThrottleMs: 5000,
      pollingIntervalMs: 5000
    });
});

我预计在一个客户端的更新和另一个客户端的反应更新之间有5秒的延迟,但它似乎根本不起作用。我甚至把断点放在观察中,并立即通知。难道我做错了什么?它是如何工作的?

1 个答案:

答案 0 :(得分:2)

那些10秒应该是10毫秒。

  1. 请确保您只更新MongoDB而不是Minimongo - 例如,如果您通过Meteor方法更新,请确保您没有客户端存根。

  2. 试试这个:

    Meteor.publish("currentRoom", function (roomName) {
      return Rooms.find({name: roomName}, {
        disableOplog: true,
        pollingThrottleMs: 10000, 
        pollingIntervalMs: 10000
      });
    });
    
  3. 您必须禁用oplog拖尾。如果不这样做,每次MongoDB日志更改时,您仍会收到通知。

    我在客户端上与观察者进行了测试,但它确实有效。

    Cursor.observe({
      changed: (newdoc, olddoc) => {
        console.log('changed');
      }
    });
    

    其他信息:

    https://github.com/meteor/docs/blob/version-NEXT/long-form/oplog-observe-driver.md http://info.meteor.com/blog/tuning-meteor-mongo-livedata-for-scalability