socket上傳輸大文件時,如何能提升傳輸的效率?

既然是Socket 那就是傳2進制的數據 也就是字節數組 使用 某種網絡協議,點對點的傳輸數據。算法

提升的效率能夠分爲三部分!數組

1. 網絡狀況。  下嗶片什麼的咱們這裏不討論,可是首先你要明確你的網絡類型,你的帶寬容許你多大的傳輸量纔好寫程序。網卡咱們暫時不討論。

 2. 服務器狀況。  國內的網絡運營商都會 限制不少機房服務器的上傳限額。下行200k 上行可能只有20k。也就是1:10 你網絡沒問題程序沒問題,服務器不吃,也沒辦法! 因此這個也要解決。

3 若是上面兩個都不是問題,那就徹底是程序方面的了,咱們開始討論。

    假設你須要製做一個提供至少1G 的單體文件上傳,你會怎麼辦。我想你絕對不會 搞一個線程 慢慢讀過去。

爲何? 由於若是斷網,死機,或者停電,你又要從頭來。服務器

因此 效率這個概念既然提出來了就不光是速度問題。還有實用性的問題。可是咱們不上升到一個完整的下載上傳軟件的高度。

     因此你能夠看到如下的概念:

       上傳端:

       (1). 將你的文件包分割成數據模型,並以一個配置文檔描述。這個文檔能夠很小 1G的文件幾k足以。

          (2) 根據分割狀況開啓數個線程,根據你的網絡狀況去調整你的每一傳輸線程裏的 byte數組大小。

         (3) 控制好線程管理, 若是這個程序能獨享一臺電腦的話 就所有全力工做。

        接收端:

         首先接收到你的說明文件 ,而後根據狀況開啓接受程序,並按照你的說明文件,將每一個線程裏的數據重構到一個臨時文件裏。而且開始重寫說明文件,介紹各個狀況的進度,與位置。

        因而 一個簡單的斷點續傳就這麼出來了。

          傳輸效率這是個很大的命題,算法是一部分,形式是一部分,網絡是最重要的一部分。

         以上。
相關文章
相關標籤/搜索