首页 > 其他分享 >IHttpClientFactory 解决端口耗尽问题及衍生底层原理

IHttpClientFactory 解决端口耗尽问题及衍生底层原理

时间:2024-08-17 16:04:25浏览次数:12  
标签:端口 ServicePointManager HttpClientHandler ServicePoint 耗尽 IHttpClientFactory 连接池

1. IHttpClientFactory 解决端口耗尽问题

  • 问题描述: 如果不使用 IHttpClientFactory,而是为每个请求创建新的 HttpClient 实例,可能会导致端口耗尽问题。
  • 原因: 每次创建新的 HttpClient 实例都会导致新的 HttpClientHandler 和底层 Socket 连接的创建,且这些连接在短时间内无法被回收,容易导致 TCP 连接数量激增,从而耗尽可用端口。
  • 解决方法: IHttpClientFactory 通过复用 HttpClientHandler 的连接池,减少了不必要的连接创建,进而避免了端口耗尽的问题。
  • 局限性: 虽然 IHttpClientFactory 可以极大地减少端口耗尽的可能性,但在极端高并发情况下,如果连接池达到其上限,端口耗尽仍然是可能发生的。

2. HttpClientHandler 与 ServicePointManager 的关系

  • ServicePointManager 的作用: ServicePointManager 管理与目标主机相关联的 ServicePoint 对象,并通过这些对象管理与该主机的连接池(如连接池大小、连接超时等)。
  • HttpClientHandler 获取 ServicePoint 的过程:
    • HttpClientHandler 在发送 HTTP 请求时,会通过 ServicePointManager.FindServicePoint 方法获取或创建与目标主机关联的 ServicePoint 对象。
    • ServicePointManager 会根据请求的 URI 查找是否已有对应的 ServicePoint,如果没有,则创建一个新的 ServicePoint
    • HttpClientHandler 使用获取到的 ServicePoint 来管理和复用与该主机的连接池。

3. ServicePoint 与连接池的管理

  • 连接池管理: ServicePoint 维护一个连接池,HttpClientHandler 通过 ServicePoint 来复用这些连接。连接池的大小可以通过 ServicePoint.ConnectionLimit 属性设置,并可在运行时动态调整。
  • 连接池与 HttpClientHandler 的关系: 连接池由 ServicePoint 直接管理,HttpClientHandler 仅是使用 ServicePoint 提供的连接池资源,而不直接管理连接池。

4. ServicePointManager 的配置管理

  • 配置动态调整: ServicePointManager 可以在运行时动态调整 ServicePoint 的配置,例如增加连接池的大小。然而,如果初始设置的连接池大小为 100,ServicePointManager 不会自动突破这个限制,除非手动调整 ConnectionLimit

5. 对象关系与调用过程

  • ServicePointManager 的引用管理: ServicePointManagerServicePoint 的管理者,当 HttpClientHandler 通过 ServicePointManager.FindServicePoint 获取 ServicePoint 后,这个 ServicePoint 会一直由 ServicePointManager 管理,直到连接池的资源被回收。
  • GC 回收机制: ServicePoint 的生命周期和连接池的资源释放由 .NET 的垃圾回收机制管理。如果 ServicePoint 不再被使用,且 ServicePointManager 也不再引用它,GC 将负责回收。

6. ServicePointManager 和 HttpClientHandler 的调用机制

  • HttpClientHandler 如何调用 ServicePointManager: HttpClientHandler 内部在处理请求时,会自动调用 ServicePointManager.FindServicePoint 来获取 ServicePoint。这个调用过程是由 .NET 框架内部实现的,开发者无需显式调用。
  • ServicePointManager 的动态调整: ServicePointManager 可以根据应用需求在运行时调整 ServicePoint 的连接池配置,例如增大连接池的大小。

7. 总结

  • IHttpClientFactory 通过复用 HttpClientHandler 实例和连接池,有效减少了端口耗尽的风险。
  • HttpClientHandler 依赖 ServicePointManager 来获取 ServicePoint,从而管理与目标主机的连接池。
  • 连接池由 ServicePoint 直接管理,HttpClientHandler 仅使用这些资源,而 ServicePointManager 负责管理 ServicePoint 的生命周期和配置。
  • ServicePointManager 在框架内部自动调用,并且可以在运行时调整连接池配置,以适应不同的应用需求。

标签:端口,ServicePointManager,HttpClientHandler,ServicePoint,耗尽,IHttpClientFactory,连接池
From: https://www.cnblogs.com/voyager-rz/p/18364544

相关文章

  • Windows操作系统远程桌面端口修改脚本
    change_rdsport_CN.bat:@echooffcolorf0echo修改远程桌面3389端口(支持Windows2003,2008,2008R2,2012,2012R2,7,8,10)echo自动添加防火墙规则set/pc=请输入新的端口:if"%c%"==""gotoend:editnetshadvfirewallfirewalladdrulename="RemotePortNum......
  • 同一台电脑127.0.0.1监听了80端口,我还可以用本机127.0.0.1的80端口做为源端口访问本机
    同一台电脑127.0.0.1监听了80端口,我还可以用本机127.0.0.1的80端口做为源端口访问本机127.0.0.1的监听的目的端口80端口吗 2024-08-1616:00:05在同一台电脑上,不能使用127.0.0.1的80端口作为源端口来访问127.0.0.1的80端口。原因如下:源端口和目标端口的不同:......
  • Verilog基础:模块端口(port)的定义语法(1995)
    相关阅读Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm=1001.2014.3001.5482    Verilog中的端口定义有两种风格,一种是VerilogStandard1995风格,一种是VerilogStandard2001风格,本文将对VerilogStandard1995风格进行详细阐述。......
  • 使用JMC和socket端口诊断工具找出问题点实例1
    故障上报时间​1月3号下午3点10分原因​应用程序socket使用量累计过多,导致141服务器socket请求数超过linux服务器限制,导致浏览器连接不上。分析过程​先对事故时间段的生产环境域日志、应用日志、应用监控日志进行检查,其中socket属于操作系统管理资源,不在应用监控范......
  • 宝塔如何添加端口的说明,即可放行该端口
    输入需要放行的端口,添加端口的说明,即可放行该端口。端口放行成功后,可以查看防火墙列表查看当前端口的运行情况。Centos6使用的是iptables防火墙。Centos7使用的是firewall防火墙。debian/ubuntu使用的是ufw防火墙。若是使用的firewall防火墙会直接读取防火墙配置文件,将所有规则......
  • DHCP服务(服务名dhcpd,端口UDP /67和UDP/68)
    目录前言配置文件DHCP服务器的配置下载安装DHCP服务编辑配置文件重启服务客户端测试配置客户端网卡重启网卡前言DHCP动态主机配置协议是一种网络协议,提供了动态配置IP地址的功能,允许服务器自动为网络上的设备分配IP地址和其他网络配置参数。当设备连接到网络时,它......
  • Openwrt 配置 PS5 端口转发
    前言前阵子申请了公网IP通过了想远程串流玩PS5通过Socat配置端口转发后仅桌面端Chiaki可以远程串流PS5改用Openwrt的防火墙转发使PSPlay+Chiaki都可串流环境Openwrt22.03.6状态>概览>固件版本步骤打开网络>防火墙>端口转发点击添加配置4个端口9295TC......
  • 阿里云Centos7搭建邮件服务器端口使用465
    1.申请一个域名指向这台服务器   2.下面是如果安装了postifx和dovecot有配置问题错误可以卸载重装                                  ......
  • firewalld: 端口转发
    一,操作允许ip伪装1,#允许防火墙伪装IP[root@blog~]#firewall-cmd--add-masquerade--permanentsuccess效果:[root@blog~]#more/etc/firewalld/zones/public.xml<?xmlversion="1.0"encoding="utf-8"?><zone><short>Public</shor......
  • HCL学习——交换机端口安全技术
    本篇记录学习HCL的笔记。【2023年】H3CNE认证网络工程师完整培训视频教程_上https://www.bilibili.com/video/BV1Dg411i7yM?p=22&spm_id_from=pageDriver&vd_source=ecbebcd4db8fad7f74c518d13e78b165 802.1x技术 如果随便拿台pc插到交换机上岂不是就能接入本公司网络呢,80......