feat(rate): 自 go-hua 迁入秒级带宽限速器
- 按秒配额补充令牌, Add 阻塞限速, 配合 conn 使用; 附测试、例程与 README
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
# rate
|
||||
|
||||
按秒配额的带宽限速器:为读写字节流提供令牌补充式限速(字节数/秒),
|
||||
常配合 `conn` 包使用。
|
||||
|
||||
> 迁移自 go-hua/rate,代码保持原样。
|
||||
|
||||
## 用法
|
||||
|
||||
```go
|
||||
import "git.zeroonesoft.cn/golib/zogo/rate"
|
||||
|
||||
r := rate.NewRate(512 * 1024) // 512 KB/s;0 表示不限速
|
||||
r.Start() // 启动每秒配额补充
|
||||
defer r.Stop()
|
||||
|
||||
r.Add(n) // 每次读/写后上报本秒已消耗字节数,超配额时 Add 阻塞到下个周期
|
||||
|
||||
r.SetLimit(1024 * 1024) // 动态调整限速
|
||||
used := r.GetNow() // 本秒已消耗
|
||||
```
|
||||
|
||||
完整可运行例程:[examples/rate/main.go](../examples/rate/main.go)
|
||||
|
||||
## 注意
|
||||
|
||||
- `NewRate(0)` 为不限速模式,`Add` 直接放行。
|
||||
- 限速粒度为秒级令牌桶,短时突发精度有限;逐连接限速在 `conn` 中叠加使用。
|
||||
Reference in New Issue
Block a user