35 lines
939 B
Go
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())
|
|
}
|