feat(login): 引入基于 IP 的限流中间件
新增 github.com/xiaoqidun/limit 依赖,替换原有的全局速率限制器, 实现针对客户端 IP 的细粒度限流控制。在服务启动时初始化限流器, 并在程序退出前确保后台任务正确停止。同时更新 go.work 和 login/go.sum 文件以包含新的依赖项。此外,在 logic/main.go 中添加了主玩家数据 保存逻辑以确保服务关闭时数据持久化。
This commit is contained in:
42
common/utils/limit/README.md
Normal file
42
common/utils/limit/README.md
Normal file
@@ -0,0 +1,42 @@
|
||||
# limit [](https://pkg.go.dev/github.com/xiaoqidun/limit)
|
||||
一个高性能、并发安全的 Go 语言动态速率限制器
|
||||
|
||||
# 安装指南
|
||||
```shell
|
||||
go get -u github.com/xiaoqidun/limit
|
||||
```
|
||||
|
||||
# 快速开始
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/xiaoqidun/limit"
|
||||
"golang.org/x/time/rate"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// 1. 创建一个新的 Limiter 实例
|
||||
limiter := limit.New()
|
||||
// 2. 确保在程序退出前优雅地停止后台任务,这非常重要
|
||||
defer limiter.Stop()
|
||||
// 3. 为任意键 "some-key" 获取一个速率限制器
|
||||
// - rate.Limit(2): 表示速率为 "每秒2个请求"
|
||||
// - 2: 表示桶的容量 (Burst),允许瞬时处理2个请求
|
||||
rateLimiter := limiter.Get("some-key", rate.Limit(2), 2)
|
||||
// 4. 模拟3次连续的突发请求
|
||||
// 由于速率和容量都为2,只有前两次请求能立即成功
|
||||
for i := 0; i < 3; i++ {
|
||||
if rateLimiter.Allow() {
|
||||
fmt.Printf("请求 %d: 已允许\n", i+1)
|
||||
} else {
|
||||
fmt.Printf("请求 %d: 已拒绝\n", i+1)
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
# 授权协议
|
||||
本项目使用 [Apache License 2.0](https://github.com/xiaoqidun/limit/blob/main/LICENSE) 授权协议
|
||||
Reference in New Issue
Block a user