【技术贴】golang实现像百度网盘一样的限速功能

基本原理:

通过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('
')

	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))

[em_30]

1