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

Go 使用http.ResponseBody时测量上传速度,go,Go,当使用http.ResponseWriter上传大量数据时,是否有办法测量客户端的下载速度 上下文更新:我正在为blob存储编写一个流式下载端点,它将blob存储在块中。文件非常大,因此加载和缓冲整个blob是不可行的。能够监视缓冲区状态、写入的字节或类似的字节将允许更好地安排区块下载 例如,当Write()对响应进行排队时,是否有方法检查已排队的数据量 上下文示例,但不使用文件对象 func downloadHandler(w http.ResponseWriter, req *http.Re

当使用
http.ResponseWriter
上传大量数据时,是否有办法测量客户端的下载速度

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

例如,当
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])
    }
}

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


可能已经有包做类似的事情了。Google找到了(我没有用过)。

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


可能已经有包做类似的事情了。谷歌发现(我没有使用)。

“将此循环的迭代速度调整到客户端的下载速度。”---tcp堆栈已经为您完成了。只需使用
io.Copy
@zerkms如果数据不是本地存储的,比如说内容是生成的,如何实现这一点?数据生成器需要实现哪些接口?
io.Reader
..“将此循环的迭代速度调整到客户端的下载速度。”---tcp堆栈已经为您完成了这项工作。只需使用
io.Copy
@zerkms如果数据不是本地存储的,比如说内容是生成的,如何实现这一点?数据生成器需要实现哪些接口?
io.Reader
。。。。。