BB10でマップを描いています。マップはタイルに分割されています。開始時に、ユーザーが経度、緯度、ズーム レベルを指定すると、その座標でマップが表示されます。QNetworkAccessManager で http リクエストを実行して、単一のタイルを取得します。最初に 7x5 タイルがダウンロードされます。しかし問題は、ユーザーが画面内で非常に速くパンを開始し、ユーザーがパンを停止した後、タイルのダウンロードに大きな遅延が発生する場合です。ユーザーがパンを行うたびに、いくつかの新しいタイルがダウンロードされて画面に表示されます。ユーザーがしばらくパンニングを続けるため、QNetworkAccessManager で不要なネットワーク リクエストが非常に多く発生します。私の推測では、それがタイルのダウンロードが遅い理由です。不要なリクエストに対しては、abort() メソッドを使用して QNetworkAccessManager の QNetoworkReply を中止してみました。しかし、それでも本当に遅いです。私が試みていることを達成する別の方法はありますか? ありがとう。
1 に答える
1
個人的には、不必要な接続が多すぎることが問題だと思います。
一般に、HTTP はやや重みのあるプロトコルと見なされます。これは TCP に基づいて構築されているため、これらの HTTP ヘッダーを生成して解析する時間を考慮せずに、確立するには 3 ウェイ ハンドシェイクが必要であり、終了するには 4 ウェイ ハンドシェイクが必要です。
また、サーバーの負荷も考慮してください。小規模な通常の Web サーバーは、1 秒あたり最大 100 のリクエストを処理します。あなたのクライアントがそのような頻繁なリクエストを実行している場合、サーバーがあなたのアプリケーションを喜んで歓迎しないのではないかと心配しています.
したがって、パニング速度がしきい値よりも低い場合にのみリクエストを送信するか、保留中のリクエストの固定サイズのキューを保持し、キューがいっぱいでない場合にのみ新しいリクエストを作成することにより、リクエスト密度を手動で制限することを検討してください。リクエストが殺到するのは避けてください。低帯域幅のクライアントやそれほどアイドル状態ではないサーバーには、どのような最適化を行っても効果がありません。
于 2013-04-20T11:59:58.900 に答える