Java 速度不会因异步请求而改变
我需要发出大约60个HTTP请求 在第一种情况下,我没有使用异步请求,速度大约为1.5分钟。 在第二种情况下,我使用了一个异步请求,速度也没有变化,大约为1.5分钟 请看我的密码。也许我没有正确地执行异步请求,或者是否有其他方法可以快速发出大量HTTP请求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 {
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());
}
}
});
}