Junior — Middle
Jak je v systému implementován mechanismus omezení počtu požadavků za jednotku času?
sobes.tech AI
Odpověď od AI
Go中的速率限制机制(rate limiting)通常通过令牌桶或带有时间窗口的计数器实现。
使用golang.org/x/time/rate包的示例:
import (
"golang.org/x/time/rate"
"net/http"
)
var limiter = rate.NewLimiter(1, 5) // 每秒1个请求,最大存储5个令牌
func handler(w http.ResponseWriter, r *http.Request) {
if !limiter.Allow() {
http.Error(w, "Too Many Requests", http.StatusTooManyRequests)
return
}
// 处理请求
}
这里,rate.NewLimiter创建了一个限制器,允许每秒1个请求,但可以积累最多5个令牌,允许短时间的请求高峰。如果请求过多,它们会被拒绝,返回状态码429。
其他方法包括固定窗口、滑动窗口或使用Redis进行分布式速率限制。