Browse Source

10秒之后加速

老九 3 years ago
parent
commit
4bdd0b2b93
2 changed files with 32 additions and 24 deletions
  1. 1 1
      FastGithub.DomainResolve/IPAddressElapsed.cs
  2. 31 23
      FastGithub.Http/HttpClientFactory.cs

+ 1 - 1
FastGithub.DomainResolve/IPAddressElapsed.cs

@@ -13,7 +13,7 @@ namespace FastGithub.DomainResolve
     [DebuggerDisplay("Adddress={Adddress} Elapsed={Elapsed}")]
     struct IPAddressElapsed
     {
-        private static readonly TimeSpan connectTimeout = TimeSpan.FromSeconds(10d);
+        private static readonly TimeSpan connectTimeout = TimeSpan.FromSeconds(5d);
 
         /// <summary>
         /// 获取IP地址

+ 31 - 23
FastGithub.Http/HttpClientFactory.cs

@@ -13,12 +13,17 @@ namespace FastGithub.Http
         private readonly IDomainResolver domainResolver;
 
         /// <summary>
-        /// httpHandler的生命周期
+        /// 首次生命周期
         /// </summary>
-        private readonly TimeSpan lifeTime = TimeSpan.FromMinutes(1d);
+        private readonly TimeSpan firstLiftTime = TimeSpan.FromSeconds(10d);
 
         /// <summary>
-        /// HttpHandler清理器
+        /// 非首次生命周期
+        /// </summary>
+        private readonly TimeSpan nextLifeTime = TimeSpan.FromMinutes(1d);
+
+        /// <summary>
+        /// LifetimeHttpHandler清理器
         /// </summary>
         private readonly LifetimeHttpHandlerCleaner httpHandlerCleaner = new();
 
@@ -27,6 +32,7 @@ namespace FastGithub.Http
         /// </summary>
         private readonly ConcurrentDictionary<DomainConfig, Lazy<LifetimeHttpHandler>> httpHandlerLazyCache = new();
 
+
         /// <summary>
         /// HttpClient工厂
         /// </summary>
@@ -43,41 +49,43 @@ namespace FastGithub.Http
         /// <returns></returns>
         public HttpClient CreateHttpClient(DomainConfig domainConfig)
         {
-            var lifetimeHttpHandlerLazy = this.httpHandlerLazyCache.GetOrAdd(domainConfig, this.CreateLifetimeHttpHandlerLazy);
+            var lifetimeHttpHandlerLazy = this.httpHandlerLazyCache.GetOrAdd(domainConfig, CreateLifetimeHttpHandlerLazy);
             var lifetimeHttpHandler = lifetimeHttpHandlerLazy.Value;
             return new HttpClient(lifetimeHttpHandler, disposeHandler: false);
+
+            Lazy<LifetimeHttpHandler> CreateLifetimeHttpHandlerLazy(DomainConfig domainConfig)
+            {
+                return new Lazy<LifetimeHttpHandler>(() => this.CreateLifetimeHttpHandler(domainConfig, this.firstLiftTime), true);
+            }
         }
 
+
         /// <summary>
-        /// 创建LazyOf(LifetimeHttpHandler)
+        /// 当有httpHandler失效时
         /// </summary>
-        /// <param name="domainConfig"></param>
-        /// <returns></returns>
-        private Lazy<LifetimeHttpHandler> CreateLifetimeHttpHandlerLazy(DomainConfig domainConfig)
+        /// <param name="lifetimeHttpHandler">httpHandler</param>
+        private void OnLifetimeHttpHandlerDeactivate(LifetimeHttpHandler lifetimeHttpHandler)
         {
-            return new Lazy<LifetimeHttpHandler>(() => this.CreateLifetimeHttpHandler(domainConfig), true);
+            var domainConfig = lifetimeHttpHandler.DomainConfig;
+            this.httpHandlerLazyCache[domainConfig] = CreateLifetimeHttpHandlerLazy(domainConfig);
+            this.httpHandlerCleaner.Add(lifetimeHttpHandler);
+
+            Lazy<LifetimeHttpHandler> CreateLifetimeHttpHandlerLazy(DomainConfig domainConfig)
+            {
+                return new Lazy<LifetimeHttpHandler>(() => this.CreateLifetimeHttpHandler(domainConfig, this.nextLifeTime), true);
+            }
         }
 
         /// <summary>
         /// 创建LifetimeHttpHandler
         /// </summary>
+        /// <param name="domainConfig"></param>
+        /// <param name="lifeTime"></param>
         /// <returns></returns>
-        private LifetimeHttpHandler CreateLifetimeHttpHandler(DomainConfig domainConfig)
+        private LifetimeHttpHandler CreateLifetimeHttpHandler(DomainConfig domainConfig, TimeSpan lifeTime)
         {
             var httpClientHandler = new HttpClientHandler(domainConfig, this.domainResolver);
-            return new LifetimeHttpHandler(httpClientHandler, this.lifeTime, this.OnLifetimeHttpHandlerDeactivate);
-        }
-
-        /// <summary>
-        /// 当有httpHandler失效时
-        /// </summary>
-        /// <param name="lifetimeHttpHandler">httpHandler</param>
-        private void OnLifetimeHttpHandlerDeactivate(LifetimeHttpHandler lifetimeHttpHandler)
-        {
-            // 切换激活状态的记录的实例
-            var domainConfig = lifetimeHttpHandler.DomainConfig;
-            this.httpHandlerLazyCache[domainConfig] = this.CreateLifetimeHttpHandlerLazy(domainConfig);
-            this.httpHandlerCleaner.Add(lifetimeHttpHandler);
+            return new LifetimeHttpHandler(httpClientHandler, lifeTime, this.OnLifetimeHttpHandlerDeactivate);
         }
     }
 }