29 lines
833 B
Markdown
29 lines
833 B
Markdown
# 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` 中叠加使用。
|