通过检查 IP 最大访问数进行限制

package main
 
import (
    "sync"
    "github.com/gin-gonic/gin"
)
 
var (
    connections = make(map[string]int)
    mutex       sync.Mutex
    maxConnPerIP = 100
)
 
func main() {
    r := gin.Default()
 
    r.Use(func(c *gin.Context) {
        clientIP := c.ClientIP()
        mutex.Lock()
        defer mutex.Unlock()
        if connections[clientIP] >= maxConnPerIP {
            c.AbortWithStatusJSON(429, gin.H{"error": "Too many connections from your IP"})
            return
        }
        connections[clientIP]++
        defer func() {
            mutex.Lock()
            defer mutex.Unlock()
            connections[clientIP]--
        }()
        c.Next()
    })
 
    // 路由和处理程序
    r.GET("/", func(c *gin.Context) {
        c.JSON(200, gin.H{"message": "Hello, World!"})
    })
 
    r.Run()
}