我們可以通過限制下載速度來限制QNetworkAccessManager
消耗整個帶寬,因爲我們看到幾乎每個下載管理器都可以使用這些選項嗎?是否可以使用QNetworkAccessManager控制下載速度
3
A
回答
2
這是不可能開箱的。但看看Qt Torrent Example,特別是RateController
(ratecontroller.h | ratecontroller.cpp)。這個類幾乎可以通過控制一個而不是一個連接來實現你想要的。
然而,這樣的速度控制器上運行QTcpSockets
(準確的PeerWireClients
),所以你需要改變「同行」的類型爲QIODevice
,我希望並不難,因爲從PeerWireClient
繼承QTcpSocket
,這本身從QIODevice
繼承:
// old
void addSocket(PeerWireClient *socket);
// new
void addDevice(QIODevice *device);
(注意,從洪流例如RateController controlls上載和下載,但你只需要控制下載速率所以,你可以刪除不必要的代碼。)
然後你需要通過你的QNetworkAccessManager
提出的請求使用這個速率控制器。這可以通過重新實現QNetworkAccessManager
並覆蓋(擴展)方法QNetworkAccessManager::createRequest
來完成,每當創建新請求時都會調用該方法。此方法返回QNetworkReply*
(從QIODevice*
繼承),其中,下載將被讀取,所以告訴流速控制器控制該設備將限制下載速率:
QNetworkReply *MyNetworkAccessManager::createRequest(
QNetworkAccessManager::Operation op,
const QNetworkRequest &req,
QIODevice *outgoingData)
{
// original call to QNetworkAccessManager in order to get the reply
QNetworkReply *reply = QNetworkAccessManager::createRequest(op, req, outgoingData);
// add this reply (which is a QIODevice*) to the rate controller
rateController.addDevice(reply);
return reply;
}
你不會有,如果你要繼承QNetworkAccessManager已經知道你實際執行請求的代碼段。方法get()
和post()
返回QNetworkReply*
,您也可以將其添加到速率控制器。 (不過這樣一來,你手動做到這一點外的經理,這是不符合信息/隱藏執行的概念,在這種情況下的事實,下載是速度控制。)
相關問題
- 1. 是否可以控制.attr的速度?
- 2. 是否可以使用QNetworkAccessManager從文件託管網站下載文件
- 3. 是否可以使用下載屬性強制下載?
- 4. 我們是否可以控制滾動視圖的速度
- 5. 是否可以通過robots.txt控制抓取速度?
- 6. 是否可以使用OSMBonusPack獲取速度限制數據?
- 7. 可以壓縮Silverlight下載以加快下載速度嗎?
- 8. 是否可以準確確定用戶的即時下載速度?
- 9. MVC.NET下載速度限制
- 10. Apache2限制下載速度
- 11. 我可以限制JSF/PrimeFaces中的下載/上傳速度嗎?
- 12. Qt無法使用QNetworkAccessManager下載文件
- 13. 是否可以在活動的上下文之外使用加速度計?
- 14. 是否可以從控制檯應用程序加載web-config?
- 15. 是否可以通過QNetworkAccessManager檢測可恢復的鏈接
- 16. 減速控制檯速度
- 17. 使用Java優化下載速度
- 18. 使用Java/Android測量下載速度
- 19. 使用Eclipse測量下載速度
- 20. 使用調度隊列快速下載
- 21. 使用java優化下載速度
- 22. 是否可以使用VisualStateManager設置控件的最大寬度
- 23. 是否可以顯示Flash文件的下載進度?
- 24. 使用JButton控制風扇的速度
- 25. 是否可以在JS下載窗口?
- 26. 是否可以下載實時視頻?
- 27. AFNetworking和下載速度限制
- 28. 限制文件下載速度?
- 29. 如何限制Go的下載速度?
- 30. Laravel限制客戶端下載速度
其實,我不會使用QTcpSocket,QNetworkAccessManager是否可能?我的意思是這樣的可能:http://qt-project.org/forums/viewthread/19134/ –
對不起,我完全忘了。我改編了我的答案。我希望這會起作用,因爲我從來沒有這樣做過。但是這應該可以做到這一點。請注意,您甚至需要去QIODevices,因爲QNetworkAccessManager不會告訴您套接字,而是目標設備。將寫入速度限制在目標設備中=限制下載速度。 – leemes
哦,我只注意到這不起作用,因爲'outgoingData'是要爲HTTP POST請求上傳的數據。我們需要將答覆本身而不是outgoingData放入速率控制器。 – leemes