我有一个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]
我的问题:是作为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]";
提前致谢。
答案 0 :(得分:0)
根据所提供的信息,这里有一些观察和建议。
Bufferedreader.close()
和s2.toString();
之外)您没有在代码中进行任何其他处理,因此延迟似乎在服务器BUT中,只是为了确保(如果可能)使用URL命中任何浏览器,并查看获取请求所需的时间。 (从代码中我看到你只是从URL获取数据,因此应该很容易使用浏览器访问相同的内容)InputStream
读取xml数据。答案 1 :(得分:0)
openConnection()
会创建TCP连接,但除非您使用非默认的流式传输模式,否则在获取输入流或读取器或响应代码之前不会发送任何数据。因此,在您的情况下,发送请求被视为getInputStream()
的一部分。