perl - 如何为 Perl Web 服务实现服务器端速率限制?

标签 perl cgi throttling

我有一个基于 Perl 的 CGI/Fast CGI web 服务,并希望通过 IP 地址对客户端进行速率限制,以阻止激进的客户端导致过多的工作。

我四处寻找一些代码,发现 Algorithm::TokenBucket在 CPAN 中,但这是针对客户端请求的;它没有持久性,也没有每个用户的配置,因此对于服务器端速率限制并不是很有用。

我正在为已经存在的东西寻找建议,否则我需要根据一些简单的持久性来推出我自己的建议,例如与 DB_File 相关联。每个 IP 地址和一些执行 token 管理的批处理作业。

最佳答案

我用过 Cache::FastMmap通过跟踪每个 IP 地址的命中来限制速率。这是一个缓存,因此数据会随着时间的推移而过期,但是如果您将大小和过期时间设置正确,这应该不是问题。

IP 地址是哈希键,哈希值是时间戳数组。我有第二个数据结构(也由 Cache::FastMMap 支持),它是被禁止的 IP 地址的哈希,根据第一个结构中的数据进行更新。

关于perl - 如何为 Perl Web 服务实现服务器端速率限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/501405/

相关文章:

cgi - 在循环内的变量中传递值

javascript - 为什么前 4 次执行的 setInterval 调用没有受到限制?

perl - 在 Perl 中,如何处理整个哈希?

perl - 使用 perl 创建层次文件

arrays - (Perl) 尝试使用简单数组编写 foreach 语句。对格式感到困惑

Perl DBI - 使用多条语句运行 SQL 脚本

Python 重定向不起作用

javascript - 如何在 ruby​​ 中使用 cgi 方法引用 jquery 库?

javascript - Chromium 上的 Indexeddb OpenCursor 是否在非事件选项卡上受到限制?