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

v6666 2022-11-8 1235

基本原理:

通过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))
最新回复 (1)
  • C 2022-11-8
    2

返回
发新帖