📢 欢迎来到万事技术论坛!本站仅讨论合法编程技术话题,严禁外挂/作弊/黑产/盗版内容,违者封号。

手搓一个接口限流中间件(固定窗口)

晚风 核心会员

限流是防刷、防爬的第一道防线。最简单的「固定窗口」算法:

from collections import defaultdict, deque
import time

hits = defaultdict(deque)

def allow(key, limit=10, window=60):
    now = time.time()
    d = hits[key]
    while d and d[0] < now - window:
        d.popleft()
    if len(d) >= limit:
        return False
    d.append(now)
    return True

调用前 if not allow(ip): abort(429) 即可。缺点是窗口边界会有「双倍突发」,需要更平滑就换令牌桶。

我们论坛的防护模块(guard.py)就是在这个思路上做的,还加了自动封禁和验证码,感兴趣可以翻源码。

楼主 · 2026-09-27 23:24 · 浏览 256 · 编辑于 2026-09-27 23:24
ops_wang 进阶会员

边界突发那个坑我们线上真遇到过,后来换令牌桶了。

1楼 · 2026-09-28 00:31
登录 后即可参与回复。