Search code examples
c++qtbandwidth

bandwidth throttling with Qt


I'm using the QNetworkAccessManager to download files from the web, it provides an easy API to the task. But I wish to add a download rate limit to the class, so all http replies won't exceed that limit (I see no reason to limit the requests).

I've googled abit and found an interesting post here. But what it does is subclass QTcpSocket and gives control over the bandwidth using a separate class that manages a set of sockets. While this is nice I want to continue using the QNetworkAcessManager class.

The way I see it I could:

  1. subclass QNetworkAccessManager and integrate the subclassed QTcpSocket somehow (this might involve subclassing even more classes, the QHttp* ones).
  2. use the classes offered in the article and build my own QNetworkAccessManager around those.
  3. the QNetworkAccessManager allows the use of a proxy. I could write a fake proxy class that will have the bandwidth throttling logic in it. But this seems like an ugly hack to me.

While the first 2 options are possible, I was wondering if there's an easier way to do this? If not which one would you suggest?


Solution

  • I ended up using the RcTcpSocket and RateController from this article with the QHttp class. Prior to making get/post requests with the QHttp I create a RcTcpSocket, add it to my RateController and use QHttp::setSocket(QTcpSocket*). I still didn't find a solution to keep using QNetworkAccessManager but this is close enough and works very good.