spring boot合并 http请求(前后端实现)

news2024/11/15 19:55:44

为什么要合并http请求

页面加载时要初始化很多资源信息,会发送好多http请求,根据http的通信握手特点,多个http请求比较浪费资源。进而如果能将多个http请求合并为一个发送给服务器,由服务器获取对应的资源返回给客户端

奇思妙解

解1

将所有http请求,包装成一个大的参数

 [
 	{method:'请求方法GET',url:'user/detail',params:{userId:1}}, // http1
 	{method:'请求方法GET',url:'freidn/detail',params:{friend:1}} // http2
 ]

上述参数封装了两个http请求,将参数发送给服务器,服务器进行解析,获取两个http请求所需的数据,然后再一起返回

这样虽然完成了 http的合并请求,但是导致了单次的请求时间过长,而且两个http请求必须等待一起完成。不能像原来的那样,一个http获取到数据后就能立即的对数据进行处理

解2

有没有什么办法可以让服务器提供的资源分阶段返回?即http1的数据处理完成后立即响应给客户端,http2 的数据处理完成后立即响应给客户端,当两个http都响应完成后,该请求结束。

  • 遇题不会找百度!! 发现了 EventSources。立马尝试

百度百科:事件源(Event sources),产生事件的组件或对象称为事件源。事件源产生事件并把它传递给事件监听器(event listeners)。

  • 立马写了个demo尝试了一下

EventSources 可以实现 当http1的数据处理完成后立即响应给客户端,http2 的数据处理完成后立即响应给客户端,两个http都响应完成后,请求结束。
服务端可以开启线程使用SSE,分次写会响应数据

  • 恩,真棒,这么容易解决了,收拾收拾睡觉,躺下了,总感觉哪里不对劲,恩,是的,参数太大,get请求就废了

是的,参数太大了,已经超出了get请求的长度限制,那怎么办?把参数进行压缩然后放入请求头?但是请求头也有大小限制,那用POST?

  • 查询了 EventSources的文档后发现这东西不支持post。那这个想法是不是就泡汤了?

解3

经过一系列的折腾,感觉的这个想法要泡汤,于是就先放了放,过了一段时间后,灵机一动,能不能自己弄个 EventSource出来?

  • 灵机一动 开始行动 经过磨难 难题终结

效果

将多个http 合并为一个自定义的EventSources,携带参数发起post请求,到服务端,服务端调整为SSE,并开启线程,每条线程处理一个http任务,处理完成后通过SSE写回数据,这时http请求未关闭,仍可让其他http任务的线程继续写回数据。等待所有任务都处理完成后,关闭这一个http请求。

效果图

在这里插入图片描述

有需要的可以联系我

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/821262.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

echarts实现正负轴柱状图

效果: data变量配置: // 正负柱状图zhengfuZhu: {},data1: [],data2: [],data3: [],data4: [],xAxisData1: [],//横轴刻度seriesLabel: { //柱子上的字体show: false,position: outside,color: #BEC3EB,},seriesEmphasis: { //itemStyle: {shadowBlur: …

【福建事业单位-语言理解】01中心理解

【福建事业单位-语言理解】01中心理解 一、中心理解题:关键词1.1 转折关系词总结 1.2因果关系词总结 1.3必要条件关系对策(只有才的变体题型)反面论证(如果等词汇错误做法不好的结果)对策特殊脉络总结 1.4 并列结构总结…

怎么找小红书美食探店博主合作?

在小红书上有许多活跃的美食探店博主,他们通过分享自己的餐厅体验、特色美食以及口味评价,吸引了大量用户的关注。对于想要在小红书上进行美食推广的企业来说,与这些博主合作是一种非常直接的方式,接下来伯乐网络传媒来给大家分享…

【已解决】标签死活不响应单击事件

大家好,我是执念斩长河。今天在公司写代码的时候突然遇到一个问题,这个问题困扰了我不久,就是html中li标签不能响应我的单击事件。最后在仔细分析下,解决了这个问题。 文章目录 1、问题来源2、问题解决方案3、问题解决效果4、总结…

C语言假期作业 DAY 10

一、选择题 1、求函数返回值,传入 -1 ,则在64位机器上函数返回( ) int func(int x) { int count 0; while (x) { count; x x&(x - 1);//与运算 } r eturn count; } A: 死循环 B: 64 C: 32 D: 16 答案解析 正确答案&#xff…

Elasticsearch:如何将整个 Elasticsearch 索引导出到文件 - Python 8.x

在实际的使用中,我们有时希望把 Elasticsearch 的索引保存到 JSON 文件中。在之前,我写了一篇管如何备份 Elasticsearch 索引的文章 “Elasticsearch:索引备份及恢复”。在今天,我们使用一种 Python 的方法来做进一步的探讨。你可…

SpringBoot复习:(12)SpringApplicationRunListener和 SpringApplicationRunListeners

SpringApplicationRunListener接口定义如下: public interface SpringApplicationRunListener {default void starting() {}default void environmentPrepared(ConfigurableEnvironment environment) {}default void contextPrepared(ConfigurableApplicationConte…

2023年【零声教育】13代C/C++Linux服务器开发高级架构师课程体系分析

对于零声教育的C/CLinux服务器高级架构师的课程到2022目前已经迭代到13代了,像之前小编也总结过,但是课程每期都有做一定的更新,也是为了更好的完善课程跟上目前互联网大厂的岗位技术需求,之前课程里面也包含了一些小的分支&#…

【连通块染色,双指针维护区间map,整除分块】CF616 CDE

Dashboard - Educational Codeforces Round 5 - Codeforces C 题意: 思路: 经典的给格子染色,直接dfs染色就行,不要用并查集,虽然也能做但是不好写 然后对于每一个*,把周围的格子的颜色扔到set里去重统…

什么叫做阻塞队列的有界和无界

问题描述 什么叫做阻塞队列的有界和无界: 解决方案: 1. 阻塞队列(如图),是一种特殊的队列,它在普通队列的基础上提供了两个附加功能 a. 当队列为空的时候,获取队列中元素的消费者线程会被阻塞…

ChinaJoy 2023微星雷鸟17游戏本震撼发布:搭载AMD锐龙9 7945HX首发8499元

ChinaJoy 2023展会中微星笔记本再次给大家带来惊喜,发布了搭载AMD移动端16大核的旗舰游戏本:雷鸟17,更重要的这样一款旗舰性能的游戏本,首发价8499元堪称当今游戏本市场中的“性价比爆款”! 本着和玩家一同制霸游戏战场…

leetcode 712. Minimum ASCII Delete Sum for Two Strings(字符串删除字母的ASCII码之和)

两个字符串s1, s2, 删除其中的字母使s1和s2相等。 问删除字母的最小ASCII码之和是多少。 思路: DP 先考虑极端的情况,s1为空,那么要想达到s2和s1相等,就要把s2中的字母删完, ASCII码之和就是s2中所有字母的ASCII码之…

大型集团企业一体化运维监控方案

当前,云计算、大数据、人工智能等IT技术迅猛发展,企业的信息化步入了一个崭新的时代,企业规模不断壮大,业务不断拓展,企业信息化依赖的网络结构和IT技术越来越复杂。企业运维部门采用的运维工具和技术实力直接决定企业…

算法训练营第五十七天||647.回文子串、516.最长回文子序列、动态规划总结

647.回文子串 出自代码随想录 如果大家做了很多这种子序列相关的题目,在定义dp数组的时候 很自然就会想题目求什么,我们就如何定义dp数组。 绝大多数题目确实是这样,不过本题如果我们定义,dp[i] 为 下标i结尾的字符串有 dp[i]个…

Cordova+Vue2.0打包apk,保姆教程来袭!

1.环境准备(全部都需要配置环境变量) java version "1.8.0_341" 安卓sdk android-29 Gradle 4.10.1 node v16.16.0 cordova 10.0.0 (cordova-lib10.1.0)2.安卓环境变量 1. 确认已安装 Android SDK Build-Tools 和 Android SDK Platform-Tool…

Sentaurus TCAD-Sdevice CV (电容特性)

File {grid "nnode|NMOS_msh.tdr" ## 输入包含掺杂信息的网格文件current "plot" ## 输出包含时间、电压和电流的_des.plt曲线文件,简称current plotplot "tdrdat" ## 输出包含掺杂浓度、电流密度、电势分布、电场分布…

使用redis-cli操作redis

redis-cli是原生redis自带的命令行工具,可以帮助我们通过简单的命令连接redis服务,并进行数据管理,即redis键(key)和redis数据结构的管理。 关于如何进入redis-cli命令行客户端,请查看文章:Redi…

android 如何分析应用的内存(十四)——jdb命令行

android 如何分析应用的内存(十四) 前面的系列文章介绍了android应用如何分析native内存。 接下来就是android应用如何分析java内存。同native一样,我们也希望能够看到 ART的堆和栈的情况,以及锁的情况,方法的本地变…

ChatFile实现相关流程

文本上传构建向量库后台库的内容 调用上传文件接口先上传文件 存在疑问:暂时是把文件保存在tmp文件夹,定时清理,是否使用云存储 根据不同的文件类型选取不同的文件加载器加载文件内容 switch (file.mimetype) {case application/pdf:loader new PDFLoader(file.path)breakc…

爬虫教程1_Xpath 入门教程

Xpath 入门教程 在编写爬虫程序的过程中提取信息是非常重要的环节,但是有时使用正则表达式无法匹配到想要的信息,或者书写起来非常麻烦,此时就需要用另外一种数据解析方法,也就是本节要介绍的 Xpath 表达式。 Xpath表达式 XPath…