Java 速度不会因异步请求而改变

Java 速度不会因异步请求而改变,java,http,asynchronous,request,okhttp,Java,Http,Asynchronous,Request,Okhttp,我需要发出大约60个HTTP请求 在第一种情况下,我没有使用异步请求,速度大约为1.5分钟。 在第二种情况下,我使用了一个异步请求,速度也没有变化,大约为1.5分钟 请看我的密码。也许我没有正确地执行异步请求,或者是否有其他方法可以快速发出大量HTTP请求 public class Main { public static int page = 0; public static void main(String[] args) throws IOException {

我需要发出大约60个HTTP请求

在第一种情况下,我没有使用异步请求,速度大约为1.5分钟。 在第二种情况下,我使用了一个异步请求,速度也没有变化,大约为1.5分钟

请看我的密码。也许我没有正确地执行异步请求,或者是否有其他方法可以快速发出大量HTTP请求

public class Main {

    public static int page = 0;

    public static void main(String[] args) throws IOException {
        int totalPages = Util.getTotalPages();

        page = 0;
        while(page < totalPages) {
            // Function does not work
            new GetAuctions();
            page++;
        }
    }
}
公共类主{
公共静态整型页面=0;
公共静态void main(字符串[]args)引发IOException{
int totalPages=Util.getTotalPages();
page=0;
而(页数<总页数){
//函数不起作用
新的GetAuctions();
page++;
}
}
}
公共类Util{
公共静态最终字符串API_KEY=“***”;
公共静态最终OkHttpClient httpClient=新OkHttpClient();
公共静态最终列表拍卖=新建ArrayList();
公共静态int getTotalPage()引发IOException{
Request Request=new Request.Builder().url(“https://api.hypixel.net/skyblock/auctions?key=“+Util.API_KEY+”&page=0”).build();
Response-Response=httpClient.newCall(request.execute();
如果(!response.issusccessful())抛出新IOException(“错误:+response”);
assert response.body()!=null;
String jsonData=response.body().String();
JSONObject对象=新的JSONObject(jsonData);
返回object.getInt(“totalPages”);
}
}
公共类GetAuctions{
公共静态void main(字符串[]args)引发异常{
新建GetAuctions().run();
}
public void run()引发异常{
Request Request=new Request.Builder().url(“https://api.hypixel.net/skyblock/auctions?key=“+Util.API_KEY+”&page=“+Main.page).build();
Util.httpClient.newCall(request).enqueue(new Callback()){
@重写公共void onFailure(@NotNull调用,@NotNull IOE异常){
e、 printStackTrace();
}
@重写公共void onResponse(@NotNull调用,@NotNull响应)引发IOException{
如果(!response.issusccessful())抛出新IOException(“意外代码”+响应);
assert response.body()!=null;
String jsonData=response.body().String();
JSONObject对象=新的JSONObject(jsonData);
JSONArray数组=object.getJSONArray(“拍卖”);

对于(inti=0;i来说,您的示例看起来根本不是异步的。请查看中的示例并尝试使用它

具体来说,您应该调用enqueue而不是execute

    client.newCall(request).enqueue(new Callback() {
      @Override public void onFailure(Call call, IOException e) {
        e.printStackTrace();
      }

      @Override public void onResponse(Call call, Response response) throws IOException {
        try (ResponseBody responseBody = response.body()) {
          if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);

          Headers responseHeaders = response.headers();
          for (int i = 0, size = responseHeaders.size(); i < size; i++) {
            System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i));
          }

          System.out.println(responseBody.string());
        }
      }
    });
  }
client.newCall(request).enqueue(newcallback(){
@覆盖公共void onFailure(调用,IOE异常){
e、 printStackTrace();
}
@重写公共void onResponse(调用调用、响应响应)引发IOException{
try(ResponseBody ResponseBody=response.body()){
如果(!response.issusccessful())抛出新IOException(“意外代码”+响应);
Headers responseHeaders=response.Headers();
for(int i=0,size=responseHeaders.size();i
我在你的代码中看不到一个异步调用。你基本上在GetAuctions类中创建了一个run方法,每次在while循环中创建一个新方法时都调用它。你好,Yuri!我听了你的建议,在Internet上搜索了很多关于异步请求的信息。现在我已经完全重新设计了GetActions类。你能看到错误是什么吗?速度没有改变。()你最新的例子是使用JDK11 Http客户端而不是OkHttp。我建议你选择你喜欢的客户端,但我能做的最多就是帮助你使用我已经为OkHttp提供的链接。对不起。
public class GetAuctions {

    public static void main(String[] args) throws Exception {
        new GetAuctions().run();
    }

    public void run() throws Exception {
        Request request = new Request.Builder().url("https://api.hypixel.net/skyblock/auctions?key=" + Util.API_KEY + "&page=" + Main.page).build();

        Util.httpClient.newCall(request).enqueue(new Callback() {
            @Override public void onFailure(@NotNull Call call, @NotNull IOException e) {
                e.printStackTrace();
            }

            @Override public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);

                assert response.body() != null;
                String jsonData = response.body().string();

                JSONObject object = new JSONObject(jsonData);
                JSONArray array = object.getJSONArray("auctions");

                for (int i=0; i<array.length(); i++) {
                    JSONObject jsonObject = array.getJSONObject(i);

                    if (jsonObject.has("bin")) {
                        Util.auctions.add(jsonObject);
                    }
                }

                System.out.println(Util.auctions.size());
            }
        });
    }
}

    client.newCall(request).enqueue(new Callback() {
      @Override public void onFailure(Call call, IOException e) {
        e.printStackTrace();
      }

      @Override public void onResponse(Call call, Response response) throws IOException {
        try (ResponseBody responseBody = response.body()) {
          if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);

          Headers responseHeaders = response.headers();
          for (int i = 0, size = responseHeaders.size(); i < size; i++) {
            System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i));
          }

          System.out.println(responseBody.string());
        }
      }
    });
  }