Я пытаюсь вызвать веб-сервис, который возвращает слишком много данных только для извлечения небольшого фрагмента данных.
Итак, я решил не использовать стандартный клиент, сгенерированный 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-соединение используется повторно.