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秒。
所以我的問題是:由於所有的連接都是在同一臺服務器上,我該如何改善這種延遲?有什麼方法可以打開連接,並通過該「隧道」發送所有請願以減少延遲?
注:我測試的代碼和請求採取相同的時間用在每個連接一個新的
感謝
如果你不能並行的呼叫,然後你需要找到瓶頸所在,並刪除它們。我們不能告訴你他們在哪裏;你必須測量。它是網絡I/O嗎? PHP Web服務本身很慢嗎?爲什麼不能使用不需要太多個人電話的「更好」的Web服務? –
您是否也控制服務器實施?然後,您可以在一個(或幾個)請求下合併這些服務。此外,服務或網絡延遲的答覆時間是否爲1-2秒? – jhonkola
我建議你用'EntityUtils.toString(response.getEntity())'替換你的'requestToString()'方法 - 它的代碼更少,錯誤處理更好,並且服從服務器發送的字符編碼。 –