feat(rate): 自 go-hua 迁入秒级带宽限速器
- 按秒配额补充令牌, Add 阻塞限速, 配合 conn 使用; 附测试、例程与 README
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
// 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())
|
||||
}
|
||||
Reference in New Issue
Block a user