2

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

私は abit をグーグルで検索し、ここで興味深い投稿を見つけました。しかし、それは QTcpSocket のサブクラスであり、ソケットのセットを管理する別のクラスを使用して帯域幅を制御します。これは良いことですが、QNetworkAcessManager クラスを引き続き使用したいと考えています。

私の見方では、次のことができます。

  1. QNetworkAccessManager をサブクラス化し、サブクラス化された QTcpSocket を何らかの方法で統合します (これには、さらに多くのクラス (QHttp* クラス) をサブクラス化することが含まれる場合があります)。
  2. この記事で提供されているクラスを使用して、それらを中心に独自の QNetworkAccessManager を構築します。
  3. QNetworkAccessManager はプロキシの使用を許可します。帯域幅調整ロジックを含む偽のプロキシ クラスを作成できます。しかし、これは私には醜いハックのようです。

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

4

2 に答える 2

0

QNetworkReply::setReadBufferSize(qint64 size) を確認する必要があります。ドキュメントを引用します:

QNetworkReply は、このバッファーがいっぱいになると (つまり、bytesAvailable() が size 以上を返すと)、ネットワークからの読み取りを停止しようとするため、ダウンロードも抑制されます。バッファーのサイズが制限されていない場合、QNetworkReply はネットワークからできるだけ速くダウンロードしようとします。

この値と、おそらく downloadProgress() シグナルから取得した値を使用して、処理を遅くすることができると思います。正確なものを手に入れるのはかなり難しいと思いますが、おそらく実行可能です。

于 2009-04-08T14:03:37.197 に答える