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

【技术贴】golang实现像百度网盘一样的限速功能 基本原理: 通过limitRate库构建基于token限流的ioReader,再通过iocopy的方式将文件内容复制到http响应的body中 应用场景: 边缘节点反代限速 fmt.Println r.RequestURI resp, err := http.Get "http://localhost" +…

【技术贴】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