Sobes.tech
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进行分布式速率限制。