Java发起同异步HTTP请求和处理数据

您所在的位置:网站首页 java接口异步返回结果不对怎么解决呢 Java发起同异步HTTP请求和处理数据

Java发起同异步HTTP请求和处理数据

2024-07-15 15:22| 来源: 网络整理| 查看: 265

📚专栏

「Java数据集成」专栏

《Java发起HTTP请求并解析JSON返回数据》:下图简称为《请求和解析》《基于MyBatis实现依次、批量、分页增删改查操作》:下图简称为《依批分增删改查》《用Python根据JSON生成Java类代码和数据库建表SQL语句》:下图简称为《生成代码脚本》《基于SpringBoot+MyBatis的数据增删改查模板》:下图简称为《增删改查模板》《Java发起同异步HTTP请求和处理数据》:下图简称为《同异步请求和处理》《基于SpringBoot+MyBatis的数据集成模板》:下图简称为《数据集成模板》《JavaHTTP请求工具类HTTPUtils》:下图简称为《HTTP请求工具类》《JavaJSON处理工具类JSONUtils》:下图简称为《JSON处理工具类》《JavaXML处理工具类XMLUtils》:下图简称为《XML处理工具类》《用Python生成随机JSON数据》:下图简称为《生成随机数据脚本》 基础支撑 辅助(可选) 进阶 基础支撑 基础支撑 辅助(可选) 辅助(可选) 辅助(可选) 测试(可选) 《请求和解析》 《依批分增删改查》 《生成代码脚本》 《增删改查模板》 《同异步请求和处理》 《集成模板》 《HTTP请求工具类》 《JSON处理工具类》 《XML处理工具类》 《生成随机数据脚本》 同步与异步概念辨析

同步(synchronous)和异步(asynchronous)通常用于描述在执行操作时是否需要等待某个操作完成,以及如何处理返回结果

类比生活 同步是接力跑:前一个人跑完了再轮到下一个人跑异步是齐跑:大家在起跑线同时起跑 编程 同步编程(synchronous programming):大多数编程都是同步编程。在同步编程中,任务是按顺序执行的,一个任务必须等待另一个任务完成后才能开始执行异步编程(asynchronous programming):同时处理多个任务 请求 同步请求(synchronous request):每个请求都必须按顺序进行,并且程序必须等待每个请求完成后才能继续执行下一个请求异步请求(asynchronous request):同时发起多个请求

此处再提两个相关但不同的概念,并发(concurrency)和并行(parallelism)

并发是指看起来貌似在同时执行多个任务(如时间片轮转),但在微观上他们都是按一定顺序被处理的,也可以算是某种意义上的“同时”、“异步”,看你怎么理解并行则是指多个任务执行就在同一时刻发生,算是真正意义上的“同时”、“异步” Java 中的 HTTP 请求

对于 Java 中发起 HTTP 请求而言,一样有同步异步之分。看本文剩余部分之前首先需要学习用 Java 发起 HTTP 请求,对应后文的 requestHTTPContent() ,意为请求后获取响应内容,并在此篇博客文章中有介绍,可以说是本文的基础

💬相关

本文前置基础博客文章《Java发起HTTP请求并解析JSON返回数据》

https://blog.csdn.net/weixin_42077074/article/details/128672130

笔者做了个简单的测试,测试方案如下,一个 JSON 对象对应数据表中的一条记录,对象含有两个键,取值分别为长度为 10 的和长度为 1000 的随机字符串,记录不同方案、不同请求量级下请求获取数据的耗时。

以下每项耗时数据至少测试三次并取平均值。 此外,测试数据是在较为理想的环境下测试获取的,而在实际使用场景中的数据应该会比测试数据略高。

请求数依次同步请求耗时批量异步请求耗时分页异步请求耗时10115ms25ms31ms100010.19s1073ms1106ms10000017m53.28s2m55.20s2m55.80s

为了更好描述同步与异步,以下给出一个示例场景,我想发起 10 次 HTTP 请求,每次请求都带有参数开始时间 startTime 和 endTime,为 2023 年 1 月 1 日至 2023 年 1 月 10 日十天中每日零点和下一日的零点,如第一次请求的参数为 2023-01-01 00:00:00 和 2023-01-02 00:00:00

依次同步请求

同步发请求无非就是直接调用或在 for 里调用 requestHTTPContent()

// 设置请求头 Map headers = new HashMap(){{ // 设置接收内容类型 put("Accept","application/json"); // 设置发送内容类型 put("Content-Type","application/json;charset=UTF-8"); // 设置字符集 put("charset", "UTF-8"); // 设置访问者系统引擎版本、浏览器信息的字段信息,此处伪装成用户通过浏览器访问 put("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); }}; // 设置开始时间和结束时间 LocalDateTime startTime = LocalDateTime.of(2023, 1, 1, 0, 0, 0); LocalDateTime endTime = LocalDateTime.of(2023, 1, 2, 0, 0, 0); // 创建一个数组来保存结果 String[] results = new String[10]; for (int i = 0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3