我們用乙個ns_download_pool類來封裝對其的管理。
接下來我們針對資源傳送過程中限速進行分析和實現。
如果需要將傳送速度限制在乙個值,我們可以這麼理解,單位時間內最多允許傳送資料為n,若超過之,就需要降低速度,若不足,則需要提高速度。
如何控制速度?這裡我們採用最樸素的方法,sleep,只要將sleep的具體值控制好,我們是可以控制速度的。
1. 若超過限制的速度,則增加sleep的時間;
2. 若不足限制的速度,則減少sleep的時間;
那麼sleep的變化值怎麼考慮?我們希望速度變化越快趨近於預期值越好,這裡我們採用 計算機網路裡提到的網路頻寬探測的模型。
假設剛開始速度為0,採用乙個指數型計算公式提公升速度,當發現有一點超速了,退回到上乙個狀態,採用直線逼近。
橫座標t為時間軸,縱座標s為速度,1為起始位置,速度為0,2點之後探測到速度超過限制,退回到2點,然後採用直線逼近,直到逼近速度極限。
未完待續……
乙個基於socket的資源共享平台的實現(三)
需要共享資源,則需要探測本地資源分布情況。此處我們用的演算法比較2 不過還是說說吧。下面使用mfc的cfilefind實現乙個本地檔案遞迴收集器,以jason格式儲存檔案路徑和檔案大小 然後定期收集,對收集結果md5,若發生變化,則上傳伺服器。伺服器端使用乙個資料結構維護所有資源站資源,對於使用者的...
乙個基於socket的資源共享平台的實現(一)
前段時間和朋友一起做了乙個類似於電驢 迅雷 msn工具的毛坯模型,基本上所有功能都是從socket通訊級別向上實現。整體架構為c s架構,使用mfc實現。技術上都是很老的東西,此文主要介紹類似於 電驢 的這樣乙個軟體的設計思路和部分 框架。我們實現的 不是很優化,僅為設計思路的佐證。我最初做這個小軟...
乙個基於socket的資源共享平台的實現(四)
現在我們的整個系統基本可用了,還缺少什麼?客戶端自動公升級。所以我們應該要開發乙個loader,客戶端能夠自動檢測更新 公升級,並可以在伺服器端打包公升級流及公升級流資訊下發。在此系統中,我直接是伺服器下發一條公升級資訊 帶版本號 然後與客戶端當前版本號進行配對,若高於客戶端,則開始客戶端更新公升級...