Web开发

注册

 

发新话题 回复该主题

GoWeb开发基于IP限流 [复制链接]

1#
上一篇文章我们介绍了全局限流,当您希望严格对API的请求总速率进行限制,并且不关心请求来自何处时,使用全局限流器可能很有用。但通常更常见的是为每个客户端单独设置一个限流器,这样可以防止单个客户端发出太多请求,影响其他客户端。一种简单的实现方法是创建一个map来为每个客户端创建一个限流器映射,使用每个客户端的IP地址作为map的键。当一个新客户端向API发出请求时,我们将初始化一个新的限流器并将其添加到map中。对于任何后续请求,我们将从map中检索客户端的限流器,并通过调用其Allow()方法检查请求是否允许,就像之前所做的那样。因为可能会有多个goroutine并发地访问map,所以我们需要使用互斥锁来防止竞争条件来保护对map的访问。如果您正在跟随本文操作,那么一起开始编码并更新上一篇文章中的rateLimit()中间件来实现这一点。File:cmd/api/middleware.go

packagemain...func(app*application)rateLimit(next

分享 转发
TOP
发新话题 回复该主题