Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >速度不会因异步请求而改变

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

Stack Overflow用户
提问于 2020-12-18 09:51:18
回答 1查看 64关注 0票数 0

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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++;
        }
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Util {
    public static final String API_KEY = "***";
    public static final OkHttpClient httpClient = new OkHttpClient();
    public static final List<JSONObject> auctions = new ArrayList<>();

    public static int getTotalPages() throws 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();

        if (!response.isSuccessful()) throw new IOException("Error: " + response);

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

        JSONObject object = new JSONObject(jsonData);

        return object.getInt("totalPages");
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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());
            }
        });
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-18 10:03:42

看起来你的例子根本不是异步的。看一下来自https://github.com/square/okhttp/blob/master/samples/guide/src/main/java/okhttp3/recipes/AsynchronousGet.java的示例,并尝试使用它。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    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());
        }
      }
    });
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65354847

复制
相关文章
.love 域名|因你而爱
爱要大声说出来! 用.love域名谱写你们的故事 送给最爱的TA 2021年2月1日至28日 .love普通词新注只要25元/年 .love域名为新通用顶级域名,2018年1月23日,工信部正式给予批复,.love域名的网站可以进行ICP备案,正常在国内使用。 love象征着浪漫、家庭、情感、热情和赞颂。love总是和温暖、喜悦及幸福联系在一起。love是一个极具吸引力的英文单词,而.love作为域名后缀也是一个极具吸引力的域名。其含义“爱”,更是意味着唤醒你的感官,触发你的记忆,刺激你的思想。 点
腾讯云DNSPod团队
2021/01/29
1.3K0
[C#]控件大小随窗体改变而改变
这篇文章写的很好,一般我会选择第一种。 我改了一下格式,便于大家复制黏贴,O(∩_∩)O。
祥知道
2020/03/10
3K0
这个 Github 仓库因你而精彩
我于今年 6 月份创建自己微信读者群。群组人数从一开始零星几人到现在的两百多号人。群里面的小伙伴都非常好学,经常来群里面讨论技术问题。我自己从中学到很多知识,也认识很多新朋友。微信群中也有一些刚入门的 Python 学习者,大部分人的基础已经学得差不多,一直渴望能实战。因此,我一直在寻找一些比较好的项目。
猴哥yuri
2018/09/21
6830
这个 Github 仓库因你而精彩
servlet异步请求
其中第二步处理业务逻辑时候很可以碰到比较耗时的任务,此时servlet主线程会阻塞等待完成业务处理,对于并发比较大的请求可能会产生性能瓶颈,则servlet3.0之后再此处做了调整,引入了异步的概念。
全栈程序员站长
2022/09/18
9120
servlet异步请求
Spring 异步请求
With the above in mind, the following is the sequence of events for async request processing with a Callable:
数媒派
2022/12/01
8100
wpf 控件大小随窗体大小改变而改变
WPF可以直接通过设置图形类控件的水平和垂直Alighment为Stretch实现 用一个ViewBox装上所有的Window内容然后当window缩放时就可以一起放大缩小了 ViewBox的显示机制是,先在内存中把按照逻辑大小把子控件显示出来,然后等比例的缩放显示到ViewBox的客户区 例: Button btn = new Button(); btn.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch; btn.Vertic
hbbliyong
2018/03/06
3.3K0
信安之路因你我而更精彩
Hi,我是 Cherishao , 今天我想给大家分享下我的信安之路,故事很平淡,但有酒有肉有烧烤。
信安之路
2018/12/06
6490
【OkHttp】OkHttp Get 和 Post 请求 ( 同步 Get 请求 | 异步 Get 请求 | 同步 Post 请求 | 异步 Post 请求 )
【OkHttp】OkHttp 简介 ( OkHttp 框架特性 | Http 版本简介 ) 【OkHttp】Android 项目导入 OkHttp ( 配置依赖 | 配置 networkSecurityConfig | 配置 ViewBinding | 代码示例 ) 【OkHttp】OkHttp Get 和 Post 请求 ( 同步 Get 请求 | 异步 Get 请求 | 同步 Post 请求 | 异步 Post 请求 )
韩曙亮
2023/03/29
16.6K0
故障分析 | TRUNCATE 到底因何而慢?
一个爱笑的江苏苏宁银行 数据库工程师,主要负责数据库日常运维、自动化建设、DMP 平台运维。擅长 MySQL、Python、Oracle,爱好骑行、研究技术。
爱可生开源社区
2023/08/18
1.7K0
故障分析 | TRUNCATE 到底因何而慢?
python 异步post请求
import aiohttp headers = {'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 6.0.1; Nexus 5 Build/MMB29K) tuhuAndroid 5.24.6', 'content-type': 'application/json'} async with aiohttp.ClientSession(headers=headers) as sess:
Wyc
2021/08/13
3.5K0
IOS中get同步异步请求与post同步异步请求
#import "ViewController.h" @interface ViewController () @property(nonatomic,strong)UITextView *textView; @property(nonatomic,copy)NSString *BASE_URL; @property(nonatomic,copy)NSString *BASE_URL1_PARAM; @property(nonatomic,strong)NSMutableData *mutableData;
好派笔记
2021/10/29
2.8K0
SpringBoot异步请求和异步调用
可以先释放容器分配给请求的线程与相关资源,减轻系统负担,释放了容器所分配线程的请求,其响应将被延后,可以在耗时处理完成(例如长时间的运算)时再对客户端进行响应。
Ant丶
2022/03/01
2.2K0
js异步请求问题
首先想到的是,把promise存到数组,然后用Promise.all()把数据搞定
治电小白菜
2020/08/25
3.9K0
Ajax 关闭异步请求
在代码中,因为进行了后台的取值操作,导致有些内容还未加载就执行到了新的地方,所以想着 ajax 的异步关闭来解决。
zucchiniy
2019/10/30
4.1K0
SpringMVC 教程 - 异步请求
在Servlet容器中启动异步支持之后,controller的方法可以通过DeferredResult包装返回值来支持异步处理。例如:
代码拾遗
2018/07/24
2.2K0
取消(中止)异步请求
问题描述:动态获取图片宽、高。由于图片大小不一,导致异步请求返回时间有差异,频繁操作导致渲染结果出现问题。
奋飛
2021/12/30
1.2K0
取消(中止)异步请求
Ajax异步&同步请求
Ajax请求最重要的问题是代码执行的顺序。最长遇到的问题是,我们定义一个变量接收ajax异步请求的返回结果,后续代码使用,然而后续代码在使用时该变量为初始值,始终得不到想要的结果!!!
山河木马
2019/03/05
3.1K0
取消(中止)异步请求
问题描述:动态获取图片宽、高。由于图片大小不一,导致异步请求返回时间有差异,频繁操作导致渲染结果出现问题。
奋飛
2021/09/07
1.1K0
Suspense异步请求组件
通常我们都要一个需求,当组件中的数据还在请求时,展示loading效果,当请求完毕时在展示正常的数据 之前这部分逻辑要我们自己定义,现在可以使用Suspense
切图仔
2022/09/08
6540
Suspense异步请求组件
Ajax 异步&同步请求
XMLHttpRequest 支持同步和异步通信。但是,一般来说,出于性能原因,异步请求应优先于同步请求。同步请求阻止代码的执行,这会导致屏幕上出现“冻结”和无响应的用户体验。
奋飛
2019/08/15
3K0

相似问题

SKSpritenode:物理质量不会因重力而改变加速度

33

异步队列因请求而挂起

11

连接不会因Python3异步并发HTTP请求而关闭

22

颤动文本颜色不会因类而改变

113

列表不会因Ray parallel python而改变

120
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文