专栏名称: dotNET跨平台
专注于.NET Core的技术传播。在这里你可以谈微软.NET,Mono的跨平台开发技术。在这里可以让你的.NET项目有新的思路,不局限于微软的技术栈,横跨Windows,Linux 主流平台
目录
相关文章推荐
今天看啥  ›  专栏  ›  dotNET跨平台

三张大图剖析HttpClient和IHttpClientFactory在DNS解析问题上的殊途同归

dotNET跨平台  · 公众号  ·  · 2024-11-20 08:00

文章预览

在开发者便利度角度,我们很轻松地使用HttpClient对象发出HTTP请求,只需要关注应用层协议的BaseAddr、Url、ReqHeader、timeout。 实际在HttpClient请求在源码级别是 HttpMessageHandler在躬身前行。 1. 早期.NET HttpClient遇到的Socket滥用/DNS解析问题 早期.NET的HttpClient使用HttpClientHandler [1] , 该handler具备完整的async、proxy、dns、Connection pool 请求一条龙能力。 底层Handler又会构建tcp连接池 ,开发者不注意使用场景和底层原理容易造成Socket滥用、主机端口耗尽(参考资料是:tcp4次挥手,主动端开方不会立即释放端口,存在2min的time_wait状态)。 一般实践会采用单例模式,重用HttpClient对象(也即重用HttpClientHandler), 但此时又会遇到DNS解析问题的尴尬(HttpClient仅在创建时为连接解析DNS,不跟踪DNS服务器指令的TTL)。 意识到重用httpClient带上的dns解析副作用之后, .NET团队和.AS ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览