У меня есть программа на Java, которая использует OAuth для связи с сервером для получения данных XML.
Он использует библиотеку Signpost OAuth для соединения с источником и использует стандартный способ чтения InputStream для доступа к возвращаемому XML.
В последнее время я заметил медленное время, необходимое для получения информации, и тесты показали, что некоторые запросы могут занимать от 2000 мс до 10000 мс (если это имеет значение, исходный сервер находится в Европе, я в Австралии).
Я добавил метку времени после связи OAuth (request.connect()
) и снова после чтения InputStream, и вот вывод:
Request #1: Communication: [6351ms] Data process: [403ms] Total: [6754ms]
Request #2: Communication: [1ms] Data process: [3121ms] Total: [3122ms]
Request #3: Communication: [1ms] Data process: [1297ms] Total: [1298ms]
Request #4: Communication: [0ms] Data process: [539ms] Total: [539ms]
- Запрос № 4 фактически является запросом № 2, выполняемым во второй раз. Все запросы выполняются за один запуск программы (нет остановки и запуска).
Мой вопрос: - это InputStream
, возвращаемый объекту HttpURLConnection
как часть метода connect()
, или он возвращается обратно, когда я читаю его (как следует из названия), и часть фактического процесса подключения?
Вторичный вопрос: Учитывая вышеприведенное время, является ли медленное время наиболее вероятной проблемой для сервера или моего метода чтения InputStream?
Для справки вот код:
long startTime = System.currentTimeMillis();
URL url = new URL(urlString);
HttpURLConnection request = (HttpURLConnection) url.openConnection();
consumer.sign(request);
request.connect();
long connectionTime = System.currentTimeMillis();
InputStream is = request.getInputStream();
if (is != null) {
final BufferedReader bufferedreader = new BufferedReader(
new InputStreamReader(is, "UTF-8"));
final StringBuffer s2 = new StringBuffer();
String line;
line = bufferedreader.readLine();
if (line != null) {
s2.append(line);
while ((line = bufferedreader.readLine()) != null) {
s2.append('\n');
s2.append(line);
}
}
bufferedreader.close();
rv = s2.toString();
}
long finishTime = System.currentTimeMillis();
long timeTaken = finishTime - startTime;
long totalConnectionTime = connectionTime - startTime;
long processDataTime = finishTime - connectionTime;
String info = "Communication: [" + totalConnectionTime +
"ms] Data process: [" + processDataTime +
"ms] Total: [" + timeTaken + "ms]";
Заранее спасибо.