.net core 于 10月17日发布了 ASP.NET Core 2.2.0 -preview3,在这个版本中,我看到了一个很让我惊喜的新特性:HTTP Client Performance Improvements ,而且在Linux上性能提升了60% !

之前就一直苦于 HttpClient 的糟糕特性,大家耳熟能详的 You are using HttpClient wrong。
因为 HttpClient 实现了 IDisposable 如果用完就释放,Tcp 连接也会被断开,并且一个HttpClient 通常会建立很多个 Tcp 连接 。 Tcp 连接断开的过程是有一个 Time_Wait 状态的,因为要保证 Tcp 连接能够断开,以及防止断开过程中还有数据包在传送。这本身没有毛病,但是如果你在使用 HttpClient 后就将其注销,并且同时处于高并发的情况下,那么你的 Time_Wait 状态的 Tcp 连接就会爆炸的增长,
他们占用端口和资源而且还迟迟不消失,就像是在 嘲讽 你。所以临时解决方式是使用静态的 HttpClient 对象,No Dispose No Time_Wait

后来在 .net core2.1 中,引入了 HttpClientFactory 来解决这一问题。 HttpClientFactory 直接负责给 HttpClient 输入 全新的 HttpMessageHandle 对象,并且管理 HttpMessageHandle 的生杀大权,这样断开 Tcp 连接的操作都由 HttpClientFactory 来用一种良好的机制去解决。

上面说了一堆,其实和主题关系不大。 因为我在实际生产环境中,无论使用静态的 HttpClient 还是使用 HttpClientFactory ,在高并发下的情况下 Tcp 连接都陡然上升。直到我将 .net core 2.1 升级到 .net core 2.2 preview 问题似乎奇迹般的解决了。在介绍 .net core 2.2 如何提升 HttpClient 性能的时候,需要先简单介绍下 HttpClient :

上面说到了 HttpMessageHandle ( 顾名思义:Http消息处理器 ) 它是一个抽象类,用来干嘛的呢? 处理请求,又是顾名思义。 HttpClient 的发送请求函数 :SendAsync()

最新文章

  1. zmap在阿里云主机上的编译
  2. js递归方法创建节点
  3. achartengine 绘图表神器
  4. MySql对空间数据库的支持
  5. JavaScript 之 使用 XMLHttpRequest 上传文件
  6. 【noip2012提高组】国王游戏
  7. RelativeLayout的一些感想
  8. protobuf-net-data
  9. DataReader的用法程序简析
  10. apache2修改用户和组
  11. Eclipse为工具包关联源码(本例工具包为dom4j-1.6.1)
  12. Hive基本命令解析
  13. Confluence 6 配置白名单
  14. js的快速搜索
  15. Spring Boot Starters启动器
  16. 【git之】fetch和 pull的区别
  17. ceph 源码安装 configure: error: "Can't find boost spirit headers"
  18. 计算机科学基础知识(一)The Memory Hierarchy
  19. 获取Android运行apk的packagename 和activityname
  20. Linux内核中namespace之PID namespace

热门文章

  1. 03-树3 Tree Traversals Again (25 分)
  2. GoCN每日新闻(2019-11-02)
  3. Goldbach’s Conjecture(信息学奥赛一本通 1622)
  4. 前端微服务初试(singleSpa)
  5. Net core学习系列(七)——Net Core中间件
  6. Leetcode:2. 两数相加
  7. Spring Cloud Hystrix基本原理
  8. eclispe: 修改所有文件默认编码为UTF-8
  9. boot2docker
  10. 解决mysql的in条件中参数是带引号的字符串的时候查询失效