gpt4 book ai didi

java - 在 Java 中高效地向同一 url 发出多个 GET 请求

转载 作者:行者123 更新时间:2023-12-02 05:50:28 25 4
gpt4 key购买 nike

我需要向同一 URL 发出多个 GET 请求,但使用不同的查询。我将在移动设备(Android)上执行此操作,因此我需要尽可能优化。我通过观看 Google 的 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;
}
}

最佳答案

如果对于每个请求,您都期望得到另一个结果,并且无法通过在同一请求中添加多个 GET 变量来合并请求,那么您就无法避免 6 次调用。

但是,您可以使用多个线程同时运行您的请求。您可以使用 Java 中的 native ExecutorService 来使用线程池方法。我建议您使用 ExecutorCompletionService 来运行您的请求。由于处理时间不受 CPU 限制,而是受网络限制,因此您可以使用比当前 CPU 更多的线程。

例如,在我的一些项目中,我使用 10 多个、有时 50 多个线程(在线程池中)同时检索 URL 数据,即使我只有 4 个 CPU 核心。

关于java - 在 Java 中高效地向同一 url 发出多个 GET 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23581735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com