From 506de49586c09a63ea928e42eabfb579292a7d09 Mon Sep 17 00:00:00 2001 From: user123456 Date: Sun, 27 Jul 2025 08:01:34 +0800 Subject: [PATCH] =?UTF-8?q?IP=E7=99=BD=E5=90=8D=E5=8D=95=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/ratelimiter.go | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/utils/ratelimiter.go b/src/utils/ratelimiter.go index 4fe4830..2734b30 100644 --- a/src/utils/ratelimiter.go +++ b/src/utils/ratelimiter.go @@ -19,12 +19,13 @@ const ( // IPRateLimiter IP限流器结构体 type IPRateLimiter struct { - ips map[string]*rateLimiterEntry - mu *sync.RWMutex - r rate.Limit - b int - whitelist []*net.IPNet - blacklist []*net.IPNet + ips map[string]*rateLimiterEntry + mu *sync.RWMutex + r rate.Limit + b int + whitelist []*net.IPNet + blacklist []*net.IPNet + whitelistLimiter *rate.Limiter // 全局共享的白名单限流器 } // rateLimiterEntry 限流器条目 @@ -75,12 +76,13 @@ func InitGlobalLimiter() *IPRateLimiter { } limiter := &IPRateLimiter{ - ips: make(map[string]*rateLimiterEntry), - mu: &sync.RWMutex{}, - r: ratePerSecond, - b: burstSize, - whitelist: whitelist, - blacklist: blacklist, + ips: make(map[string]*rateLimiterEntry), + mu: &sync.RWMutex{}, + r: ratePerSecond, + b: burstSize, + whitelist: whitelist, + blacklist: blacklist, + whitelistLimiter: rate.NewLimiter(rate.Inf, burstSize), } go limiter.cleanupRoutine() @@ -170,7 +172,7 @@ func (i *IPRateLimiter) GetLimiter(ip string) (*rate.Limiter, bool) { } if isIPInCIDRList(cleanIP, i.whitelist) { - return rate.NewLimiter(rate.Inf, i.b), true + return i.whitelistLimiter, true } normalizedIP := normalizeIPForRateLimit(cleanIP)