当前位置: 首页 > news >正文

网站开发与管理的专业描述小程序网站开发怎么样

网站开发与管理的专业描述,小程序网站开发怎么样,网页设计素材包,手机端模板网站问题来源长期以来#xff0c;.NET开发者都通过下面的方式发送http请求#xff1a;using (var httpClient new HttpClient()){var response await httpClient.GetAsync(uri);//do something with response}这段代码理论上来说遵守了C#的最佳实践#xff0c;HttpClient是IDi… 问题来源长期以来.NET开发者都通过下面的方式发送http请求using (var httpClient new HttpClient()){    var response await httpClient.GetAsync(uri);         //do something with response}这段代码理论上来说遵守了C#的最佳实践HttpClient是IDisposable类型所以我们通过using语法糖来使用HttpClient。微软官方的文档也提到As a rule, when you use an IDisposable object, you should declare and instantiate it in a using statement可是当我们试图运行下面的测试public async Task SendRequest() {    Console.WriteLine(Starting reqeust);    for(int i 0; i10; i)    {        using(var client new HttpClient())        {            var result await client.GetAsync(http://www.baidu.com);            Console.WriteLine(result.StatusCode);        }    }    Console.WriteLine(Reqeust done);}此时在terminal下列出所有端口1netstat -ap tcp | grep -i time_wait会发现本地开启了10个端口这说明HttpClient的工作原理其实跟我们认为的IDisposable是有区别的如果你把HttpClient用作大规模的Http请求实际上会创建很多个Http连接而且这些资源并不能被立即释放。一个显而易见的改进方法是共享同一个HttpClient实例从而达到节约socket资源的目的。private static readonly HttpClient _client new HttpClient();public async Task SendRequest2() {    _testOutputHelper.WriteLine(Start request);    for(int i 0; i10; i)    {        var result await _client.GetAsync(http://www.baidu.com);        Console.WriteLine(result.StatusCode);    }    _testOutputHelper.WriteLine(Request done);}这个方案似乎解决了问题使用单例的HttpClient的确会减少Socket资源但是这个方案会引发新的问题由于这个Http连接始终保持连接状态所以当请求地址的DNS发生更新的时候并不会应用到这个Http连接上。这个问题在微服务高可用时代更加常见Singeton HttpClient doesnt respect DNS changes。最终一个叫做HttpClientFactory的开源实现用来彻底解决这个问题。微软也将HttpClientFactory集成在了.NET Core中。在.NET Core中创建HttpClient1.添加NugetMicrosoft.Extensions.Http2.在Dependency Injection容器中注册服务services.AddHttpClient();3. 使用构造器注入使用IhttpClientFactorypublic class BasicUsage{    private readonly IHttpClientFactory _clientFactory;    public BasicUsage(IHttpClientFactory clientFactory)    {        _clientFactory clientFactory;    }    public async Task SendRequest()    {        var request new HttpRequestMessage(HttpMethod.Get,             http://www.baidu.com);        var client _clientFactory.CreateClient();        var response await client.SendAsync(request);        //do something for response    }}4. 使用Named HttpClient由于我们在DI容器中注册了唯一的HttpClientFactory意味着通过HttpClientFactory创建出来的HttpClient可能是同一个配置和参数如果你需要不同配置的HttpClient你可以通过“起名字的”的方式注册不同的HttpClient。services.AddHttpClient(baidu, c {    c.BaseAddress new Uri(https://www.baidu.com);    c.DefaultRequestHeaders.Add(Accept, application/json);});一旦注册了一个名叫“baidu的HttpClient你就可以通过下面的方式来建创建HttpClientvar client _clientFactory.CreateClient(baidu);5.集成PollyPolly是一个用来故障处理库它允许开发者在Http请求中添加“重试、熔断器、超时等”策略。先添加Nuget:Microsoft.Extensions.Http.Polly添加策略var timeout Policy.TimeoutAsyncHttpResponseMessage(TimeSpan.FromSeconds(10));services.AddHttpClient(baidu)    .AddPolicyHandler(request timeout)    .AddTransientHttpErrorPolicy(pp.RetryAsync(3));当然还有一些高阶用法详见Initiate HTTP requests总之HttpClientFactory提供了一种高效实用HttpClient的方式如果你还在自己new HttpClient请赶快试试新的方案吧。原文地址:https://www.cnblogs.com/xiandnc/p/10215187.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com
http://wiki.neutronadmin.com/news/325352/

相关文章:

  • 最快做网站的语言怎么找到php网站的首页面html
  • 代码做网站常用单词重庆网站建设 菠拿拿
  • 王晴儿网站建设方案wordpress iis 中文
  • 怎么利用花生壳做自己的网站帮客户做网站的公司
  • 网站建设费的会计处理摄影作品可以在哪些网站投稿
  • 怎么看别人网站是什么语言做的无锡网站制作网站
  • 建站快车是什么wordpress博客增加音乐页面
  • 网站设计论文范文大全集有哪些做室内设计好用的网站
  • 湘潭电大网站下列关于网站开发中
  • 网站建设费用报价wordpress文章id
  • 做网站像美团一样多少钱揭阳做网站哪个好
  • 用vs2008做网站本科学院网站建设方案
  • 在哪里能建免费的网站做水果生意去那个网站
  • 建站宝盒的设置wordpress 如何删除所有评论
  • 盐城大丰网站建设找哪家好wordpress购物模板下载
  • 加强 廉政网站建设超级seo工具
  • 英文网站建设技术中国品牌vi设计公司
  • 网站上怎么做全景看图广元做网站站排名
  • 郑州做网站推广地址wordpress 网站logo
  • 企业做电商网站上海建设部网站
  • 技校网站建设与维护课程教学总结广州医院网站建设
  • 百度网站收录临沂最新消息
  • 站酷网海报素材图片快速增加网站权重
  • 门户网站建设情况说明大站网站建设
  • 扁平化网站登录界面海南网络
  • 锦州 做网站机械电子工程专业知识网
  • 怎么建设网站规划运用搜索引擎营销的案例
  • wordpress 导航站模板下载郑州网站zhi zuo
  • 网站建设门店牌子自己做网站卖
  • 视频网站怎么做统计表免费网站一级域名注册