3

Android アプリケーションからファイルをアップロードし、サーバーで処理して結果を取得しようとしています。サーバー側の処理には約 10 秒かかりますが、Android アプリでは約 15 秒かかります。私は違いを説明することができません。

アプリケーションのコードの関連部分は次のとおりです。

HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpClient client = new DefaultHttpClient(params);
HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("Authorization", getAuthString());
httpPost.setEntity(multipart);
httpPost.getParams().setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, false);
HttpResponse response;
try {
    Long start = System.currentTimeMillis();
    Log.v("Network Call", "Time start: " + start);
    response = client.execute(httpPost);
    Long end = System.currentTimeMillis();
    Log.v("Network Call", "Time end:" + end);
    Log.v("Network Call Response Time", "Time:" + (end - start));
}

上記のログは、合計時間が約 15 秒であることを示しています (11 ~ 17 秒の間でランダムに変化します) サーバー上で、HTTP Post 要求が行われた時間と、Apache が要求を完了するのにかかった時間を測定しました。これは約 10 秒でした (ほぼ一貫しています)。

この違いは、サーバーの php スクリプトが終了してから Android クライアントがデータを受信するまでの時間差です。(転送されるデータは非常に小さい - < 5 文字)

これは、クライアントからサーバーに送信された他の要求 (GET 要求) では発生しません。合計時間が 1 秒未満で、転送されるデータがより大きくなります (したがって、ネットワークの遅延と帯域幅は問題ではないようです)。

私の質問は次のとおりです。

  1. データを正しく投稿していますか? DefaultHttpClient に 10 秒の待機が予想されることを知らせるために微調整する必要があるフィールドはありますか?
  2. サーバーがリクエストの処理を終了してからクライアントがリクエストを受信するまでに、このネットワーク呼び出しに時間がかかる理由を追跡する方法はありますか?
4

1 に答える 1

1

これを追加 :

HttpConnectionParams.setConnectionTimeout(httpParams,
            TIMEOUT_MILLISEC);
HttpConnectionParams.setSoTimeout(httpParams, TIMEOUT_MILLISEC);
于 2012-09-28T09:52:05.620 に答える