域名IP关系缓存10分钟
This commit is contained in:
parent
6d3668adc2
commit
795970c1b1
@ -13,26 +13,27 @@ using System.Threading.Tasks;
|
|||||||
namespace FastGithub.DomainResolve
|
namespace FastGithub.DomainResolve
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// IP状态服务
|
/// IP服务
|
||||||
/// 状态缓存5分钟
|
/// 域名IP关系缓存10分钟
|
||||||
/// 连接超时5秒
|
/// IPEndPoint时延缓存5分钟
|
||||||
|
/// IPEndPoint连接超时5秒
|
||||||
/// </summary>
|
/// </summary>
|
||||||
sealed class IPAddressService
|
sealed class IPAddressService
|
||||||
{
|
{
|
||||||
private record DomainAddress(string Domain, IPAddress Address);
|
private record DomainAddress(string Domain, IPAddress Address);
|
||||||
private readonly TimeSpan domainExpiration = TimeSpan.FromMinutes(5d);
|
private readonly TimeSpan domainAddressExpiration = TimeSpan.FromMinutes(10d);
|
||||||
private readonly IMemoryCache domainAddressCache = new MemoryCache(Options.Create(new MemoryCacheOptions()));
|
private readonly IMemoryCache domainAddressCache = new MemoryCache(Options.Create(new MemoryCacheOptions()));
|
||||||
|
|
||||||
private record AddressElapsed(IPAddress Address, TimeSpan Elapsed);
|
private record AddressElapsed(IPAddress Address, TimeSpan Elapsed);
|
||||||
private readonly TimeSpan brokeExpiration = TimeSpan.FromMinutes(1d);
|
private readonly TimeSpan brokeElapsedExpiration = TimeSpan.FromMinutes(1d);
|
||||||
private readonly TimeSpan normalExpiration = TimeSpan.FromMinutes(5d);
|
private readonly TimeSpan normaleElapsedExpiration = TimeSpan.FromMinutes(5d);
|
||||||
private readonly TimeSpan connectTimeout = TimeSpan.FromSeconds(5d);
|
private readonly TimeSpan connectTimeout = TimeSpan.FromSeconds(5d);
|
||||||
private readonly IMemoryCache addressElapsedCache = new MemoryCache(Options.Create(new MemoryCacheOptions()));
|
private readonly IMemoryCache addressElapsedCache = new MemoryCache(Options.Create(new MemoryCacheOptions()));
|
||||||
|
|
||||||
private readonly DnsClient dnsClient;
|
private readonly DnsClient dnsClient;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// IP状态服务
|
/// IP服务
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="dnsClient"></param>
|
/// <param name="dnsClient"></param>
|
||||||
public IPAddressService(DnsClient dnsClient)
|
public IPAddressService(DnsClient dnsClient)
|
||||||
@ -66,7 +67,7 @@ namespace FastGithub.DomainResolve
|
|||||||
{
|
{
|
||||||
ipEndPoints.Add(new IPEndPoint(address, dnsEndPoint.Port));
|
ipEndPoints.Add(new IPEndPoint(address, dnsEndPoint.Port));
|
||||||
var domainAddress = new DomainAddress(dnsEndPoint.Host, address);
|
var domainAddress = new DomainAddress(dnsEndPoint.Host, address);
|
||||||
this.domainAddressCache.Set(domainAddress, default(object), this.domainExpiration);
|
this.domainAddressCache.Set(domainAddress, default(object), this.domainAddressExpiration);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ipEndPoints.Count == 0)
|
if (ipEndPoints.Count == 0)
|
||||||
@ -107,14 +108,14 @@ namespace FastGithub.DomainResolve
|
|||||||
await socket.ConnectAsync(endPoint, linkedTokenSource.Token);
|
await socket.ConnectAsync(endPoint, linkedTokenSource.Token);
|
||||||
|
|
||||||
addressElapsed = new AddressElapsed(endPoint.Address, stopWatch.Elapsed);
|
addressElapsed = new AddressElapsed(endPoint.Address, stopWatch.Elapsed);
|
||||||
return this.addressElapsedCache.Set(endPoint, addressElapsed, this.normalExpiration);
|
return this.addressElapsedCache.Set(endPoint, addressElapsed, this.normaleElapsedExpiration);
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
cancellationToken.ThrowIfCancellationRequested();
|
cancellationToken.ThrowIfCancellationRequested();
|
||||||
|
|
||||||
addressElapsed = new AddressElapsed(endPoint.Address, TimeSpan.MaxValue);
|
addressElapsed = new AddressElapsed(endPoint.Address, TimeSpan.MaxValue);
|
||||||
var expiration = NetworkInterface.GetIsNetworkAvailable() ? this.normalExpiration : this.brokeExpiration;
|
var expiration = NetworkInterface.GetIsNetworkAvailable() ? this.normaleElapsedExpiration : this.brokeElapsedExpiration;
|
||||||
return this.addressElapsedCache.Set(endPoint, addressElapsed, expiration);
|
return this.addressElapsedCache.Set(endPoint, addressElapsed, expiration);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user