Настройка производительности при вызове WebService с использованием HttpURLConnection - PullRequest
0 голосов
/ 10 января 2012

Я пытаюсь вызвать веб-сервис, который возвращает слишком много данных только для извлечения небольшого фрагмента данных.

Итак, я решил не использовать стандартный клиент, сгенерированный Java.

Я использую следующий код для подключения:

HttpURLConnection connection;
byte[] requestData = .....
URL url = new URL(wsUrl);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "text/xml");
connection.setRequestProperty("Content-Length", String.valueOf(requestData.length));
connection.connect();
OutputStream connOs = connection.getOutputStream();
connOs.write(requestData);
connOs.close(); 
InputStream is = connection.getInputStream();   // <<< THIS IS THE MOST TIME CONSUMING, it takes about 70 ms
byte[] rply = stream2Bytes(is);
is.close();
connection.disconnect();

Наибольшее время в вызове затрачивается на connection.getInputStream();, что занимает около 70 мс.

Я пытаюсь установить много заголовков запросов, чтобы сократить это время, но не могу достичь.

Насколько я понимаю, HttpUrlConnection использует протокол HTTP1.1, который по умолчанию использует заголовок Connection=KEEP-ALIVE, так что базовое TCP-соединение используется повторно.

1 Ответ

0 голосов
/ 10 января 2012

connection.getInputStream(); - функция, которая ожидает ответа сервера ... вы не можете ускорить этот процесс.

...