问题标签 [rate-limiting]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
15975 浏览

python - 如何在 Python 中限制对 Web 服务的请求率?

我正在开发一个与 Web 服务 API 接口的 Python 库。像我遇到的许多 Web 服务一样,这一项请求限制了请求的速率。我想为limit类实例化提供一个可选参数,如果提供,它将保持传出请求,直到指定的秒数过去。

我了解一般情况如下:该类的实例通过方法发出请求。当它发生时,该方法会发出一些信号,在某处设置一个锁定变量,并开始一个倒计时计时器,以计算limit. (很可能,锁是倒数计时器本身。)如果在此时间范围内发出另一个请求,则必须排队,直到倒数计时器达到零并且锁被解除;此时,发送队列中最旧的请求,并重置倒数计时器并重新锁定。

这是线程的情况吗?还有另一种我没有看到的方法吗?

倒数计时器和锁应该是实例变量,还是应该属于类,以便类的所有实例都持有请求?

此外,在库中提供速率限制功能通常是一个坏主意吗?我的理由是,默认情况下,倒计时为零秒,该库仍然允许开发人员使用该库并提供他们自己的速率限制方案。但是,鉴于任何使用该服务的开发人员都需要对请求进行速率限制,但我认为库提供一种速率限制方法会很方便。

无论是否在库中放置速率限制方案,我都想使用该库编写一个应用程序,因此建议的技术将派上用场。

0 投票
6 回答
33231 浏览

c# - 为 Web 请求实现速率限制算法的最佳方法是什么?

可能/部分重复:

我正在寻找为 Web 应用程序实现移动时间窗口速率限制算法以减少垃圾邮件或暴力攻击的最佳方法。

使用示例是“过去 5 分钟内来自给定 IP 的最大失败登录尝试次数”、“过去 N 分钟内(帖子/投票/等)的最大数量”。

我更喜欢使用移动时间窗口算法,而不是每 X 分钟硬重置一次统计数据(如 twitter api)。

这适用于 C#/ASP.Net 应用程序。

0 投票
5 回答
6498 浏览

javascript - 如何在Javascript中将按钮的点击次数限制为每分钟一次

我有一个基于 PHP 的 Web 应用程序,它监视进程的状态并显示具有该状态的页面。用户可以单击页面上的按钮来更新状态。但是,我的服务器上的处理负载非常重,以至于不希望过于频繁地更新状态。所以我想要一种方法来限制某人每分钟点击提交按钮(刷新页面上显示的状态)。例如,如果有人在 12:00:00 点单击按钮,他们应该直到 12:01:00 才能再次单击它。

单击按钮后,我可能希望禁用该按钮并在一分钟后重新启用它 - 这是我的首选解决方案。

非常感谢你。

0 投票
2 回答
1536 浏览

ruby - 限制 ruby​​ 文件流的速率

我正在从事一个项目,该项目涉及从多个地理分布的节点将 Flash 视频文件上传到 S3 存储桶。

每个视频文件大约 2-3mb,我们每十分钟只发送一个文件(每个节点),但是我们消耗的带宽需要限制在 ~20k/s,因为这些节点将流媒体传输到CDN,并且由于位置的原因,我们最多只能上传 512k。

我一直在研究 ASW-S3 gem,虽然它不提供任何速率限制,但我知道您可以传入 IO 流。鉴于此,我想知道是否有可能创建一个覆盖该read方法的速率限制流,添加速率限制逻辑(例如,以最简单的形式sleep在读取之间调用),然后调用被覆盖的超方法。

我考虑的另一个选择是破解 Net::HTTP 的代码并将速率限制放入send_request_with_body_stream使用while循环的方法中,但我不完全确定哪个是最佳选择。

我曾尝试扩展 IO 类,但这根本不起作用,只是从类中继承class ThrottledIO < IO并没有做任何事情。

任何建议将不胜感激。

0 投票
2 回答
1389 浏览

php - 使用 PHP 和 Memcached 限制昂贵操作的最佳方法是什么?

我想出了这个:

对此有任何想法,如果在 Memcached 中找到 IP,睡眠几秒钟是否有益?

0 投票
2 回答
785 浏览

api - 在 ColdFusion 中使用缓存来限制对 API 的调用

嗨,我正在使用 ColdFusion 调用 last.fm api,使用来自此处的 cfc 包。

我担心会超过请求限制,即每个原始 IP 地址每秒 5 个请求,平均超过 5 分钟。

cfc 包有一个中心组件,它调用所有其他组件,这些组件被分成“艺术家”、“轨道”等部分……这个中心组件“lastFmApi.cfc”。在我的应用程序中启动,并在应用程序的生命周期内持续存在

现在,如果我想通过处理程序/控制器调用 api,例如我的艺术家处理程序......我可以这样做

我对缓存有点困惑,但是我在这个处理程序中缓存了对 api 的每个调用 5 分钟,但这有什么不同吗,因为每次有人点击一个新的艺术家页面时,这仍然算作对 api 的新点击?

想知道如何最好地解决这个问题

谢谢

0 投票
2 回答
3530 浏览

django - 限制最大并发请求数django/apache

我有一个 django 站点,它演示了工具的使用。我的一个观点将文件作为输入,并通过外部 python 脚本运行一些相当繁重的计算,并将一些输出返回给用户。该工具运行速度足够快,可以在同一请求中返回输出。但是,我想限制对此 URL/视图的并发请求数,以防止服务器拥塞。

关于我将如何做到这一点的任何提示?页面本身非常简单,使用率会很低。

0 投票
2 回答
15555 浏览

c# - 如何在 ASP.NET MVC 站点中实现速率限制?

我正在构建一个 ASP.NET MVC 站点,我想在其中限制经过身份验证的用户可以使用该站点的某些功能的频率。

尽管我从根本上了解速率限制的工作原理,但我无法想象如何以编程方式实现它而不产生主要的代码异味。

您能否通过 C# 示例代码向我指出一个简单而强大的解决方案来解决此类问题

如果重要的话,所有这些功能目前都表示为只接受的动作HTTP POST。我最终可能还想对HTTP GET函数实施速率限制,因此我正在寻找一种适用于所有此类情况的解决方案。

0 投票
2 回答
810 浏览

python - 在 CGI 脚本中限制对 API 的请求速率

我正在编写的脚本有时会向 API 发出请求,而 API 要求将请求限制为每秒最多 1 个。

将我对 API 的请求限制为每秒 1 次的最直接方法是什么?

每次发出请求时是否会涉及将当前时间存储在文件中?

0 投票
3 回答
3385 浏览

google-app-engine - 基于Memcache的限速算法?(令牌桶?)

我正在寻找一种有效的方法来限制从 Google App Engine 到第三方服务的请求。第三方服务速率对每个帐户的请求进行限制,在 Google App Engine 方面,大部分工作都是在任务内部进行的。令牌桶在这里是一个很好的通用算法。

问:可以使用什么方法来有效地对每个帐户而不是每个服务的请求进行速率限制?

这不应该涉及在 GAE 任务队列上设置速率,因为每个帐户的请求数量和服务的帐户数量会有很大差异。出于性能原因,我最感兴趣的是基于 memcache(incr/decr?)的想法!

我认为这归结为基于 memcache 的令牌桶?

想法?