Мне нужно сделать около 15 вызовов для различных веб-сервисов (php) при запуске приложения.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 секунд.
Так что мой вопрос: так как все подключения относятся к одному и тому же серверу, как я могу улучшить эту задержку? Есть ли способ открыть соединение и отправить все петиции через этот «туннель», уменьшающий задержку?
ПРИМЕЧАНИЕ: Я проверил код и запросы взять то же самое время повторного использования HttpClient с использованием нового в каждом соединении
Благодаря
Если вы не можете распараллелить звонки, то вам нужно найти узкие места, и удалить их. Мы не можем сказать вам, где они находятся; вы должны измерить. Это сетевой ввод-вывод? Является ли веб-служба PHP самой медленной? Почему вы не можете использовать «лучший» веб-сервис, который не требует так много индивидуальных вызовов? –
Вы также контролируете реализацию сервера? Затем вы можете объединить службы по одному (или нескольким) запросам. Кроме того, является ли время ответа 1-2 секунды неотъемлемой медлительностью службы или латентностью сети? – jhonkola
Я предлагаю вам заменить свой метод 'requestToString()' на EntityUtils.toString (response.getEntity()) - он меньше кода, имеет лучшую обработку ошибок и фактически подчиняется кодировке символов, отправленной сервером. –