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

为什么要合并http请求

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

奇思妙解

解1

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

json 复制代码
 [
 	{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请求。

效果图

有需要的可以联系我

相关推荐
IT_陈寒36 分钟前
SpringBoot这个分页坑,我踩了三天才爬出来
前端·人工智能·后端
颜酱39 分钟前
05 | 召回前置准备:根据业务数据库生成各数据库(读取配置阶段)
前端·人工智能·后端
Wang's Blog1 小时前
Go-Zero项目开发24: 基于Bitmap实现群聊消息已读未读
开发语言·后端·golang
Conan在掘金1 小时前
鸿蒙报错速查:struct 里嵌 namespace 声明就炸,根因 + 真解法
后端
东方小月2 小时前
从零开发一个 Coding Agent(三):EventStream 事件流通道设计与实现
前端·人工智能·后端
卫子miao2 小时前
如何评价当前大语言模型的记忆机制?
后端·架构
神奇小汤圆2 小时前
为什么 AQS 成为 Java 并发的基石?
后端
会编程的土豆3 小时前
MySQL 入门:库、表、行、主键是什么
linux·数据库·网络协议·http
星栈3 小时前
MCP 从 stdio 迁到 SSE,踩了 5 个传输层坑
人工智能·后端·架构
Conan在掘金3 小时前
鸿蒙报错速查:struct 里嵌 enum 声明就炸,根因 + 真解法
后端