2009-04-08 20 views
2

QNetworkAccessManagerを使用してWebからファイルをダウンロードしていますが、タスクに簡単なAPIを提供しています。しかし、クラスにダウンロードレート制限を追加したいので、すべてのhttp応答がその制限を超えないようにします(リクエストを制限する理由はありません)。Qtによる帯域幅調整

私はグーグルでabitし、興味深い投稿を見つけましたhere。しかし、それはQTcpSocketをサブクラス化し、一連のソケットを管理する別のクラスを使用して帯域幅を制御します。これはいいですが、私はQNetworkAcessManagerクラスを使い続けたいと思います。

私は私ができるそれを見る方法:

  1. サブクラスQNetworkAccessManagerと(これは、サブクラス化してもそれ以上のクラス、QHttp *のものを必要とするかもしれない)何とかサブクラス化QTcpSocketを統合します。
  2. この記事で提供されているクラスを使用し、それらの周りに自分のQNetworkAccessManagerを構築してください。
  3. QNetworkAccessManagerは、プロキシの使用を許可します。私はそれに帯域幅スロットルロジックを持つ偽のプロキシクラスを書くことができます。しかし、これは私にとっては醜いハックのようだ。

最初の2つのオプションが可能ですが、これを行う簡単な方法があるのでしょうか?そうでない場合は、どちらをお勧めしますか?

答えて

1

QHttpクラスのthis articleからRcTcpSocketとRateControllerを使用しました。 QHttpで取得/ポストリクエストを行う前に、私はRcTcpSocketを作成し、それをRateControllerに追加し、QHttp :: setSocket(QTcpSocket *)を使用します。私はまだQNetworkAccessManagerを使用して解決策を見つけることができませんでしたが、これは十分に近く、非常にうまくいきます。

+0

リンクはもう役に立たなくなりました。 –

0

QNetworkReply :: setReadBufferSize(qint64サイズ)を見てください。私は、docを引用:

QNetworkReplyは、かつてこのバッファは、このようにもダウン絞るダウンロードを引き起こし、(すなわち、bytesAvailableプロパティ()がサイズ以上を戻す)、フルであるネットワークからの読み取りを停止しようとします。バッファのサイズが制限されていない場合、QNetworkReplyはネットワークからできるだけ早くダウンロードしようとします。

私はこの値で遊んでいて、downloadProgress()信号から値を減速させることができると思います。私はそれで正確な何かを得るのはかなり難しいはずだと思うが、おそらく実行可能だ。

+0

明らかに、なぜ「帯域幅の調整」が行われたのか分かりません。一部のサービスに優先順位を付け、すべてのサービスを機能させる(飢餓を防ぐ)必要があります。引用されたドキュメントは、この種の問題を解決するのには役立ちません。 –