2012-05-08 144 views
1

我需要在應用程序啓動時對不同的Web服務(php)進行約15次調用。Http Post和網絡延遲

我用下面的代碼後

public static String post(String url, List<BasicNameValuePair> 
      postvalues, HttpClient httpclient) { 
    try { 
     if (httpclient == null) { 
      httpclient = new DefaultHttpClient(); 
     } 
     HttpPost httppost = new HttpPost(url); 

     if ((postvalues == null)) { 
      postvalues = new ArrayList<BasicNameValuePair>(); 
     } 
     httppost.setEntity(new UrlEncodedFormEntity(postvalues, "UTF-8")); 

     // Execute HTTP Post Request 
     HttpResponse response = httpclient.execute(httppost); 
     return requestToString(response); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return null; 
    } 

} 



private static String requestToString(HttpResponse response) { 
    String result = ""; 
    try { 
     InputStream in = response.getEntity().getContent(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 
     StringBuilder str = new StringBuilder(); 
     String line = null; 
     while ((line = reader.readLine()) != null) { 
      str.append(line + "\n"); 
     } 
     in.close(); 
     result = str.toString(); 
    } catch (Exception ex) { 
     result = "Error"; 
    } 
    return result; 
} 

的問題是,一些請願必須在一個給定的順序來請求和每個請求大約需要1-2秒鐘,這樣的「加載飛濺「大約需要10秒。

所以我的問題是:由於所有的連接都是在同一臺服務器上,我該如何改善這種延遲?有什麼方法可以打開連接,並通過該「隧道」發送所有請願以減少延遲?

注:我測試的代碼和請求採取相同的時間用在每個連接一個新的

感謝

+0

如果你不能並行的呼叫,然後你需要找到瓶頸所在,並刪除它們。我們不能告訴你他們在哪裏;你必須測量。它是網絡I/O嗎? PHP Web服務本身很慢嗎?爲什麼不能使用不需要太多個人電話的「更好」的Web服務? –

+0

您是否也控制服務器實施?然後,您可以在一個(或幾個)請求下合併這些服務。此外,服務或網絡延遲的答覆時間是否爲1-2秒? – jhonkola

+1

我建議你用'EntityUtils.toString(response.getEntity())'替換你的'requestToString()'方法 - 它的代碼更少,錯誤處理更好,並且服從服務器發送的字符編碼。 –

回答