Files
4566704 45864a61dd feat(rate): 自 go-hua 迁入秒级带宽限速器
- 按秒配额补充令牌, Add 阻塞限速, 配合 conn 使用; 附测试、例程与 README
2026-09-20 12:25:36 +08:00

35 lines
939 B
Go

// rate 包示例:带宽限速(按秒配额,超限时 Add 阻塞等待),常配合 conn 包做连接限速
package main
import (
"fmt"
"time"
"git.zeroonesoft.cn/golib/zogo/rate"
)
func main() {
// 10Mbps 带宽(内部换算为 1310720 字节/秒的配额)
r := rate.NewRate(10)
r.Start() // 启动每秒配额重置
// 模拟写入流量:累计超过每秒配额后 Add 会阻塞,直到下一个配额周期
total := 0
for i := 0; i < 5; i++ {
size := 512 * 1024 // 512KB
start := time.Now()
r.Add(size)
total += size
fmt.Printf("写入 %dKB,本次等待 %v,当前秒已用 %d 字节\n",
size/1024, time.Since(start).Round(time.Millisecond), r.GetNow())
}
fmt.Println("累计写入:", total, "字节")
// 运行期间可动态调整限速(0 表示不限制)
r.SetLimit(0)
fmt.Println("已取消限速")
// 取出并清零当前秒用量
fmt.Println("ResetMax:", r.ResetMax())
}