2017-04-25 97 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(我沒有用過)。 「