我需要对同一个网址发出多个GET请求,但查询不同。我将在移动设备(Android)上执行此操作,因此我需要尽可能地进行优化。我从观看谷歌的Android网络研讨会了解到,连接服务器需要大约200毫秒,而且还有其他各种与数据通话相关的延迟。我只是想知道是否有一种方法可以优化对同一URL发出多个请求的过程,以避免一些延迟?
到目前为止,我一直在使用以下方法,但我已经调用了6次,每次GET请求一次。
//Make a GET request to url with headers.
//The function returns the contents of the retrieved file
public String getRequest(String url, String query, Map<String, List<String>> headers) throws IOException{
String getUrl = url + "?" + query;
BufferedInputStream bis = null;
try {
connection = new URL(url + "?" + query).openConnection();
for(Map.Entry<String, List<String>> h : headers.entrySet()){
for(String s : h.getValue()){
connection.addRequestProperty(h.getKey(), s);
}
}
bis = new BufferedInputStream(connection.getInputStream());
StringBuilder builder = new StringBuilder();
int byteRead;
while ((byteRead = bis.read()) != -1)
builder.append((char) byteRead);
bis.close();
return builder.toString();
} catch (MalformedURLException e) {
throw e;
} catch (IOException e) {
throw e;
}
}
答案 0 :(得分:2)
如果对于每个请求,您希望得到另一个结果,并且您无法通过在同一请求中添加多个GET变量来组合请求,则无法避免这6个调用。
但是,您可以使用多个线程同时运行请求。您可以使用Java中的本机ExecutorService来使用线程池方法。我建议你使用ExecutorCompletionService来运行你的请求。由于处理时间不受CPU限制,但受网络限制,因此您可以使用比当前CPU更多的线程。
例如,在我的一些项目中,我使用10+,有时50多个线程(在线程池中)同时检索URL数据,即使我只有4个CPU核心。