如何使用 pollingThrottle 和 pollingInterval?
How to use pollingThrottle and pollingInterval?
所以我的应用程序中有一些不需要立即反应的东西,我发现了属性 pollingThrottleMs 和 pollingIntervalMs在文档中。所以这里基本上是关于我设法找到的那些属性的所有信息:
pollingIntervalMs Number
(Server only) How often to poll this query when observing on the server. In milliseconds. Defaults to 10 seconds.
pollingThrottleMs Number
(Server only) Minimum time to allow between re-polling. Increasing this will save CPU and mongo load at the expense of slower updates to
users. Decreasing this is not recommended. In milliseconds. Defaults
to 50 milliseconds.
所以第一个问题 - 我不太清楚这些属性之间的区别是什么,也许有人可以向我解释一下? (pollingThrottleMs 是订阅更新的一种速率限制,而 pollingIntervalMs 是我们检查更新的频率,据我所知)另外 pollingIntervalMs 默认是 10s?真的吗?为什么 属性 的名字里有 Ms 呢?这不可能是对的。
然后我尝试像这样在我的查询中设置这些属性:
Meteor.publish("currentRoom", function (roomName) {
return Rooms.find({name: roomName}, {
pollingThrottleMs: 5000,
pollingIntervalMs: 5000
});
});
我预计一个客户端的更新与另一个客户端的响应更新之间有 5 秒的延迟,但它似乎根本不起作用。我什至在 observe 中设置了断点,它会立即得到通知。难道我做错了什么?它是如何工作的?
那 10 秒应该是 10 毫秒。
请确保您只更新 MongoDB 而不是 Minimongo - 例如,如果您通过 Meteor 方法更新,请确保您没有客户端存根。
试试这个:
Meteor.publish("currentRoom", function (roomName) {
return Rooms.find({name: roomName}, {
disableOplog: true,
pollingThrottleMs: 10000,
pollingIntervalMs: 10000
});
});
您必须禁用 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
所以我的应用程序中有一些不需要立即反应的东西,我发现了属性 pollingThrottleMs 和 pollingIntervalMs在文档中。所以这里基本上是关于我设法找到的那些属性的所有信息:
pollingIntervalMs Number (Server only) How often to poll this query when observing on the server. In milliseconds. Defaults to 10 seconds.
pollingThrottleMs Number (Server only) Minimum time to allow between re-polling. Increasing this will save CPU and mongo load at the expense of slower updates to users. Decreasing this is not recommended. In milliseconds. Defaults to 50 milliseconds.
所以第一个问题 - 我不太清楚这些属性之间的区别是什么,也许有人可以向我解释一下? (pollingThrottleMs 是订阅更新的一种速率限制,而 pollingIntervalMs 是我们检查更新的频率,据我所知)另外 pollingIntervalMs 默认是 10s?真的吗?为什么 属性 的名字里有 Ms 呢?这不可能是对的。
然后我尝试像这样在我的查询中设置这些属性:
Meteor.publish("currentRoom", function (roomName) {
return Rooms.find({name: roomName}, {
pollingThrottleMs: 5000,
pollingIntervalMs: 5000
});
});
我预计一个客户端的更新与另一个客户端的响应更新之间有 5 秒的延迟,但它似乎根本不起作用。我什至在 observe 中设置了断点,它会立即得到通知。难道我做错了什么?它是如何工作的?
那 10 秒应该是 10 毫秒。
请确保您只更新 MongoDB 而不是 Minimongo - 例如,如果您通过 Meteor 方法更新,请确保您没有客户端存根。
试试这个:
Meteor.publish("currentRoom", function (roomName) { return Rooms.find({name: roomName}, { disableOplog: true, pollingThrottleMs: 10000, pollingIntervalMs: 10000 }); });
您必须禁用 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