基本原理:
通过limitRate库构建基于token限流的ioReader,再通过iocopy的方式将文件内容复制到http响应的body中
应用场景:
边缘节点反代限速
fmt.Println(r.RequestURI)
resp, err := http.Get("http://localhost" + r.RequestURI)
//file, err := os.Open("1.zip")
if err != nil {
fmt.Println(err)
return
}
//fileInfo, err := file.Stat()
if err != nil {
fmt.Println(err)
return
}
limitFile, _ := os.Open("limit")
limitReader := bufio.NewReader(limitFile)
line, _ := limitReader.ReadString('\n')
limitNum, err := strconv.Atoi(line)
fmt.Println(limitNum)
bucket := ratelimit.NewBucketWithRate(float64(limitNum)*1024, 1*1024)
w.Header().Set("Content-Type", "application/octet-stream")
w.Header().Set("Content-Length", strconv.FormatInt(resp.ContentLength, 10))
io.Copy(w, ratelimit.Reader(resp.Body, bucket))