性能优化之 http连接池化

基于C++20协程与epoll的高性能HTTP服务器实现指南 网络编程中的高性能服务器开发常涉及I/O多路复用与异步编程模型。epoll作为Linux系统的高效事件通知机制,能够处理大量并发连接,而异步编程则解决了传统回调模式下的逻辑碎片化问题。C++20引入的协程特性为异步编程提供了更优雅的解决方案,它允许开发者以同步方式编写代码,同时保持非阻塞I/O的高性能,极大提升了代码可读性与可维护性。这种技术组合在需要极致性能与资源控制的场景中价值显著,例如高频交易接口、游戏服务器和物联网网关。本文聚焦于利用C++20协程与epoll实现一个模块化、易于扩展的现代HTTP服 阅读详情

代码如下 优化原理就是原本的http连接是通过SimpleClientHttpRequestFactory创建(已注释)

每来一个请求就新创建一个,这里做到连接的复用

import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.HttpClientConnectionManager;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.web.client.RestTemplate;

/**
 * 小滴课堂,愿景:让技术不再难学
 *
 * @Description
 * @Author 二当家小D
 * @Remark 有问题直接联系我,源码-笔记-技术交流群
 * @Version 1.0
 **/

@Configuration
@EnableAsync
public class RestTemplateConfig {

    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory requestFactory){
        return new RestTemplate(requestFactory);
    }

//    @Bean
//    public ClientHttpRequestFactory clientHttpRequestFactory(){
//        SimpleClientHttpRequestFactory factory  = new SimpleClientHttpRequestFactory();
//        factory.setReadTimeout(10000);
//        factory.setConnectTimeout(10000);
//        return factory;
//    }

    @Bean
    public ClientHttpRequestFactory clientHttpRequestFactory(HttpClient httpClient){
        return  new HttpComponentsClientHttpRequestFactory(httpClient);
    }

    @Bean
    public HttpClient httpClient(){
        Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
                .register("http", PlainConnectionSocketFactory.getSocketFactory())
                .register("https", SSLConnectionSocketFactory.getSocketFactory())
                .build();

        //设置连接池最大是500个连接
        PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
        connectionManager.setMaxTotal(500);
        //MaxPerRoute是对maxtotal的细分,每个主机的并发最大是300,route是指域名
        connectionManager.setDefaultMaxPerRoute(300);
        /**
         * 只请求 xdclass.net,最大并发300
         *
         * 请求 xdclass.net,最大并发300
         * 请求 open1024.com,最大并发200
         *
         * //MaxtTotal=400 DefaultMaxPerRoute=200
         * //只连接到http://xdclass.net时,到这个主机的并发最多只有200;而不是400;
         * //而连接到http://xdclass.net 和 http://open1024.com时,到每个主机的并发最多只有200;
         * // 即加起来是400(但不能超过400);所以起作用的设置是DefaultMaxPerRoute。
         *
         */

        RequestConfig requestConfig = RequestConfig.custom()
                //返回数据的超时时间
                .setSocketTimeout(20000)
                //连接上服务器的超时时间
                .setConnectTimeout(10000)
                //从连接池中获取连接的超时时间
                .setConnectionRequestTimeout(1000)
                .build();

        CloseableHttpClient closeableHttpClient = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig)
                .setConnectionManager(connectionManager)
                .build();

        return closeableHttpClient;
    }
}
【异常】OpenClaw提示Message ordering conflict - please try again. If this persists, use /new to start a fr 摘要:OpenClaw助手出现"Message ordering conflict"异常时,表明会话消息排序冲突,主要由消息队列时序错乱、会话同步异常或上下文过载引起。解决方案包括:1)基础重试暂停后单发指令;2)最优方案是发送/new重置会话;3)极端情况下需重启客户端或检查指令格式。预防建议包括避免高频并发指令、定期重置会话及确保网络稳定。该报错属业务层异常,不影响账号安全。 阅读详情

相关推荐

DS250DF410寄存器配置实战:从原理到调试的高速SerDes信号优化指南

在高速串行通信领域,SerDes(串行器/解串器)技术是实现芯片间高速数据传输的核心。其工作原理是通过时钟数据恢复(CDR)从串行数据流中提取时钟,并利用均衡技术补偿信道损耗。这项技术的核心价值在于突破PCB走线或电缆的带宽限制,确保在25Gbps及以上速率下数据的可靠传输。其应用场景广泛覆盖数据中心、高性能计算和通信设备中的高速背板、光模块及芯片互连。本文以TI的DS250DF410多通道重定时器为例,深入剖析其寄存器配置,特别是如何通过精细调控其自适应均衡器和眼图监测模块,实现对高速链路的信号整形与质量

aodiyi6351的博客 384

httpclient添加连接池

httpclient连接池相关配置

Yuantao1998的博客 3130

rk3568 RGMII KSZ8795 MAC TO MAC

参考《Rockchip_Developer_Guide_Linux_MAC_TO_MAC_CN.pdf》

明天乌儿会歌唱 6490

httpclient使用PoolingHttpClientConnectionManager,线程阻塞,setSoTimeout

多线程进行http调用接口,使用PoolingHttpClientConnectionManager,连接池。线程一直Running,无法关闭。对比配置,发现未配置PoolingHttpClientConnectionManager的超时。PoolingHttpClientConnectionManager配置信息。增加PoolingHttpClientConnectionManager。httpclient的RequestConfig 配置。注意while死循环。

LiZhen314的博客 2133

从无人机到机械臂:深入聊聊LQR和LQG在实际项目里的那些‘坑’与最佳实践

本文深入探讨了LQR和LQG在无人机和机械臂等实际项目中的应用挑战与最佳实践。从系统建模的妥协艺术到调参的系统化方法,再到离散化的细节处理,文章分享了工程实践中的宝贵经验。特别强调了如何应对传感器噪声、未建模动态等现实问题,并提供了实用的调试工具和诊断流程,帮助工程师避免常见陷阱,提升控制系统的稳定性和性能。

weixin_28683391的博客 383

STM32+W5500实战:5分钟搞定FreeModbus TCP移植(附完整代码)

本文详细介绍了如何在STM32微控制器上,结合W5500以太网芯片,快速完成FreeModbus TCP协议栈的移植,构建稳定可靠的工业级Modbus TCP服务器。内容涵盖硬件连接、软件架构、驱动适配、核心移植代码实现及调试优化技巧,旨在提供可直接应用于实际项目的完整解决方案。

life6的博客 877

RestTemplate 添加请求池及相关设置

目前(4.2.6.RELEASE)的 RestTemplate 主要有四种 ClientHttpRequestFactory 的实现,它们分别是: 基于 JDK HttpURLConnection 的 SimpleClientHttpRequestFactory 基于 Apache HttpComponents Client 的 HttpComponentsClientHttpRequestFactory 基于 OkHttp 2(OkHttp 最新版本为 3,有较大改动,包名有变动,不和老版本兼容)的 Ok

GodSure0914的博客 1067

基于FME—三调篇—尖锐角及小缝隙处理

1 问题分析: 该功能实现在FME较为简单,相对ARCGIS模型构建器以及ARCGIS ENGINE,FME更适合无代码基础的人群。在三调内业数据处理要求中,尖锐角是不允许存在的。本文基于FME实现了对尖锐角的自动查询与消除以及自动处理在消除尖锐角过程中产生的缝隙,并进行了拓扑检查,实现自动化批量处理尖锐角的功能,提高工作效率。 2 总体思路: 2.1 实现功能分析: 1.找出小于指定角度的尖锐角...

qq_33315579的博客 9178

http连接池使用及源码剖析

Http连接的建立和关闭本质上就是TCP连接的建立和关闭,在建立和关闭时会有三次握手和四次挥手的过程,占用资源多、开销大。httpclient中使用连接池来管理网络连接,同一个tcp链路上请求连接是可以复用的,以减少连接次数,保证一定数量的长连接,且系统能拥有更高的并发性能。首次连接请求,先检查池中是否有可用连接,没有则新建连接请求结束后并关闭连接,而是归还池中下次相同目的的连接,可从池中获取一个可用的连接定期检查并清理过期及或失效的连接。

木子金丰的博客 2095

成本中心(CO)和利润中心(PCA)是管理会计模块的核心组件

SAP中成本中心(CO)和利润中心(PCA)凭证处理存在差异:①外部交易(如费用支付、销售)会生成FI借贷凭证;②内部成本分摊和转移仅产生CO/PCA管理凭证,通过次级成本要素或利润中心转移科目记录,不涉及FI模块。核心区别在于是否涉及企业实际收支:实际收支触发FI凭证,内部核算仅生成管理会计凭证。系统通过这种机制实现财务会计与管理会计的集成与分离。

金牌架构师 1127

SY6982C 7.4V锂电池1A充电模块原理图设计,已量产

在手持设备、便携工具与小型无人机等场景中,7.4V(2S)锂聚合物电池的应用愈发广泛。这类电池对充电系统的安全性、效率与兼容性提出了明确要求:需支持 USB 5V 输入、1A 安全充电,同时具备多重保护机制。本文将结合一款基于 SY6982C 的充电原理图,深入解析其电路设计与技术亮点。

不脱发的程序猿 359

【springboot】RestTemplate配置HttpClient连接池

在Java开发中,访问第三方HTTP协议的网络接口,通常使用的连接工具为JDK自带的HttpURLConnection、HttpClient(现在应该称之为HttpComponents)和OKHttp。这些Http连接工具,使用起来都比较复杂,如果项目中使用的是Spring框架,可以使用Spring自带的RestTemplate来进行Http连接请求。

morris 4541

通信模组性能调优

本文介绍了高通平台通信模组性能调优的方法,主要包括硬件加速技术和CPU负载优化。针对CPU负载优化,提出了内核RPS/RFS功能启用、网卡队列调整、中断均衡、CPU性能模式设置等措施。同时建议关闭热管理并加强散热,调整TCP接收/发送缓存大小以解决TCP异常报文问题。这些优化手段可显著提高整机吞吐率测试中的网络性能表现。

四儿家的小祖宗的博客 1356

TSRPC性能优化指南:如何构建支持亿级用户的服务

TypeScript RPC框架TSRPC为全栈TypeScript开发者提供了运行时类型检查和二进制序列化能力,支持HTTP和WebSocket协议。本文将分享如何通过TSRPC性能优化构建支持亿级用户的高性能服务。 ## 🔥 为什么TSRPC适合高性能场景? TSRPC的设计理念从一开始就考虑了大规模应用的需求。通过运行时类型检查和二进制序列化,它能够在保证类型安全的同时,大幅提升数据传

gitblog_00081的博客 663

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Hyperf Guzzle协程化:高性能HTTP客户端新体验

还在为传统HTTP客户端的性能瓶颈而烦恼?还在为高并发场景下的连接数限制而头疼?Hyperf Guzzle集成为你带来革命性的协程化HTTP客户端解决方案,让你的应用性能飞升! 读完本文你将获得: - ✅ 协程化HTTP客户端的核心优势 - ✅ 快速集成Guzzle的完整指南 - ✅ 连接池与性能优化实战技巧 - ✅ 常见问题排查与解决方案 ## 为什么选择Hyperf Guzzle?

gitblog_00034的博客 1116

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

dromara/disjob的HTTP任务分发:轻量级RPC通信机制

在现代分布式任务调度系统中,高效的任务分发机制是确保系统性能的关键。dromara/disjob框架提供了基于HTTP协议的轻量级RPC(Remote Procedure Call,远程过程调用)通信机制,实现了Manager(管理器)与Worker(执行器)之间的高效任务分发。本文将深入解析这一机制的设计原理、实现细节和最佳实践。 ## HTTP任务分发架构设计 ### 整体架构图 ```...

gitblog_00222的博客 739

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Go HTTP 服务连接池优化策略

设置`Keep-Alive`头部并调整`IdleConnTimeout`(建议30-60秒),既避免频繁重建连接,又防止僵尸连接堆积。为`http.Client`配置合理的`Timeout`、`DialTimeout`和`ResponseHeaderTimeout`,避免因网络问题导致协程阻塞。可在`Transport`中实现自定义的`DialTLSContext`或`DialContext`,加入心跳检测逻辑。可通过监控请求量动态调整`MaxIdleConns`和`MaxConnsPerHost`。

yexscp_629的博客 42

Golang后端性能优化手册(第五章:网络 I/O 优化])

过早优化是万恶之源,但过晚优化可能让你失去用户 Golang后端性能优化手册,帮助我们更好的做牛马,做更好的牛马

bojinyuan00的博客 899

Spring Cloud ALibaba声明式Http客户端Feign

前言 我们之前通过RestTemplate访问其它微服务时,虽然能够实现轻量级的微服务之间通讯,但写着写着发现很多的Url难以管理,代码可读性很差,开发维护也不是很友好。所以一种声明式的客户端Feign呼之欲出。 Feign 1.引入依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-st

h16407的博客 257

HTTP/HTTPS 协议从入门到精通:从原理到性能提升400%的完整路径(协议优化实战)

HTTP/HTTPS协议优化实战摘要 本文分享了从HTTP连接池配置不当导致系统雪崩到最终性能提升400%的完整优化路径。关键优化点包括: 连接池管理:对比了短连接与连接池复用方案,通过MaxIdleConnsPerHost等参数配置,减少90%的TCP握手开销。连接池状态机分析展示了空闲连接的生命周期管理。 协议升级:从HTTP/1.1迁移到HTTP/2,利用多路复用特性解决队头阻塞问题,并通过头部压缩减少传输数据量。 TLS优化:通过会话恢复、OCSP装订等技术减少TLS握手开销,将握手时间从2RTT降

haolove527的专栏 453

3倍提速!reqwest HTTP/1.1连接复用与管线化实战指南

reqwest 是一个简单而强大的 Rust HTTP 客户端,通过高效的连接管理和优化策略,能够显著提升网络请求性能。本文将深入探讨 reqwest 中 HTTP/1.1 连接复用与管线化技术,帮助开发者掌握如何通过这些高级特性实现请求速度的3倍提升。 ## 连接复用:从原理到实践 连接复用是 HTTP/1.1 协议的核心优化点,通过复用已建立的 TCP 连接,避免频繁的三次握手开销。在 r

gitblog_00424的博客 678

Istio性能优化:连接复用与池化

在现代微服务架构中,网络连接管理是影响系统性能的关键因素。Istio作为业界领先的服务网格解决方案,提供了强大的连接复用与池化机制,能够显著提升服务间通信的性能和可靠性。本文将深入探讨Istio中的连接池化技术,帮助您理解其工作原理并掌握优化配置的最佳实践。 ## 连接池化的核心价值 ### 性能瓶颈分析 在传统的微服务通信中,每次请求都建立新的TCP连接会导致: - **高延迟**:TC...

gitblog_01165的博客 699
上一篇: 项⽬引⼊Mybatis-plus-generator代码⾃动⽣成⼯具
下一篇: springboot整合redis
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我才是真的封不觉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值