1 回答

TA贡献1719条经验 获得超6个赞
根据我的意见,重构以通过mapie a跟踪 IP 地址map[string]int以跟踪使用情况。
一个让你入门的基本实现:
// track unique addresses via a map:
// - key: string of the IP address
// - value: usage count
var (
usageMap = make(map[string]int) //
l sync.Mutex // ensure concurrent access to map is synchronized
)
func modifyAddr(addr string, delta int) int {
l.Lock()
defer l.Unlock()
usageMap[addr] += delta
return usageMap[addr]
}
func incAddr(addr string) int { return modifyAddr(addr, 1) }
func decAddr(addr string) int { return modifyAddr(addr, -1) }
并使用:
const maxConcurrentUsage = 20
func listen() {
rAddr := "1.1.1.2"
usage := incAddr(rAddr)
defer decAddr(rAddr)
if usage > maxConcurrentUsage {
log.Printf("maximum concurrent usage exceeded (%d) for address: %q", maxConcurrentUsage, rAddr)
return
}
// handler logic goes here
}
https://go.dev/play/p/Jvx8l4F9OE8
- 1 回答
- 0 关注
- 103 浏览
添加回答
举报