2017-04-25 95 views
0

使用http.ResponseWriter上传大量数据时,有什么方法可以测量客户端的下载速度吗?使用http.ResponseBody测量上传速度

上下文更新:我正在为块存储Blob的blob存储编写一个流式下载端点。这些文件非常大,因此加载和缓冲整个斑点是不可行的。能够监视缓冲区状态,写入或类似的字节可以更好地调度块下载。

E.g.当回应时,有没有办法检查有多少数据已经排队?

上下文的一个示例,但不使用文件对象。

func downloadHandler(w http.ResponseWriter, req *http.Request, ps httprouter.Params) { 
    // Open some file. 
    f := os.Open("somefile.txt") 

    // Adjust the iteration speed of this loop to the client's download speed. 
    for 
    { 
     data := make([]byte, 1000) 
     count, err := f.Read(data) 
     if err != nil { 
      log.Fatal(err) 
     } 
     if count == 0 { 
      break 
     } 
     // Upload data chunk to client. 
     w.Write(data[:count]) 
    } 
} 
+2

”将此循环的迭代速度调整为客户端的下载速度。“ --- tcp堆栈已经为你做好了。只需使用'io.Copy' – zerkms

+0

@zerkms如果数据没有存储在本地,比如内容已经生成,那怎么能实现呢?数据生成器需要实现哪些接口? –

+2

'io.Reader' ..... – zerkms

回答

2

你可以实现一个自定义http.ResponseWriter测量发送的字节数,并计算吞吐量。

有可能包已经做类似的事情。谷歌发现this one(我没有用过)。 “