Meteor 如何限制服务器端的呼叫?
我知道客户端_underline.js可以用来限制点击率,但如何限制服务器端的呼叫?我曾想过使用相同的模式,但不幸的是,throttle似乎不允许区分Meteor.userId()的Meteor 如何限制服务器端的呼叫?,meteor,Meteor,我知道客户端_underline.js可以用来限制点击率,但如何限制服务器端的呼叫?我曾想过使用相同的模式,但不幸的是,throttle似乎不允许区分Meteor.userId()的 目前meteor中没有对此的内置支持,但是它已经在路线图上了 理论上,您可以在这里使用一些选项,但您必须推出自己的解决方案这是一个我已经编写好的包,但还没有提交到大气中(等待我熟悉tinytest并为其编写单元测试) 可以随意使用、扩展、修复和贡献(鼓励拉取请求) 这个概念非常简单,它只在服务器上运行(应该只运行
目前meteor中没有对此的内置支持,但是它已经在路线图上了
理论上,您可以在这里使用一些选项,但您必须推出自己的解决方案这是一个我已经编写好的包,但还没有提交到大气中(等待我熟悉tinytest并为其编写单元测试) 可以随意使用、扩展、修复和贡献(鼓励拉取请求) 这个概念非常简单,它只在服务器上运行(应该只运行) 你首先需要拿出一个独特的关键,你想油门 例如:
Meteor.userId()+“我的函数名”+“随便什么”
此系统使用新的集合“throttle”和一些辅助方法来:
检查
,设置
和清除
记录。还有一个助手checkThenSet
方法,这实际上是最常见的模式,检查我们是否可以做些什么,
这也创造了我们的记录
用法
(用例)如果你的应用程序正在发送电子邮件,你就不会希望通过网络发送相同的电子邮件
一次又一次,即使是用户触发了它
// on server
if (!Throttle.checkThenSet(key, allowedCount, expireInSec)) {
throw new Meteor.Error(500, 'You may only send ' + allowedCount + ' emails at a time, wait a while and try again');
}
....
节流方法研究
检查一个密钥,如果通过,则设置该密钥以备将来检查checkThenSet(key,allowedCount,expireInSec)
检查一个key,如果存在少于check(key,allowedCount)
的(未过期)记录,则它通过allowedCount
为key设置一条记录,它将在set(key,expireInSec)
秒后过期,例如:expireInSec
=1分钟60
purge()
-->throttle(按键、允许计数、过期输入)
throttle.选中设置()
-->油门检查(钥匙,允许计数)
油门检查()
-->throttle set(键,expireInSec)
throttle.set()
// on server
if (!Throttle.checkThenSet(key, allowedCount, expireInSec)) {
throw new Meteor.Error(500, 'You may only send ' + allowedCount + ' emails at a time, wait a while and try again');
}
....