使用http.ResponseBody时测量上传速度

时间:2017-04-25 10:34:38

标签: go

使用http.ResponseWriter上传大量数据时,有没有办法衡量客户端的下载速度?

上下文更新:我正在为blob存储编写流式下载端点,它以块的形式存储blob。文件非常大,因此加载和缓冲整个blob是不可行的。能够监视缓冲区状态,写入的字节或类似内容将允许更好地安排块下载。

E.g。当Write()响应时,有没有办法检查已排队的数据量?

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

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

1 个答案:

答案 0 :(得分:2)

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

有可能包已经做过类似的事情了。 Google发现this one(我还没有使用过)。

相关问题