同步非阻塞解析域名接口
使用同步非阻塞接口解析域名,不會阻塞當前線程,但可能會返回空結果。
該接口僅查詢緩存,返回緩存查詢的解析結果。若緩存中沒有解析結果或者緩存中的解析結果已經TTL過期,則會在工作線程中進行域名解析,解析成功后更新緩存,供下次調用域名解析使用。
本接口提供了常規版本、使用軟件自定義解析的版本。
接口定義
- (nullable HttpdnsResult *)resolveHostSyncNonBlocking:(NSString *)host byIpType:(HttpdnsQueryIPType)queryIpType;
- (nullable HttpdnsResult *)resolveHostSyncNonBlocking:(NSString *)host byIpType:(HttpdnsQueryIPType)queryIpType withSdnsParams:(NSDictionary<NSString *, NSString *> *)sdnsParams sdnsCacheKey:(NSString *)cacheKey;
- (nullable HttpdnsResult *)resolveHostSyncNonBlocking:(HttpdnsRequest *)request;
本接口于v3.0.0版本中新增。
所屬類
HttpDnsService
參數定義
參數 | 類型 | 是否必填 | 說明 |
host | NSString * | 是 | 待解析域名 |
queryIpType | HttpdnsQueryIPType | 是 | 待解析的IP類型。使用 枚舉類型,代表解析哪種類型的IP:
|
sdnsParams | NSDictionary<NSString *, NSString *> * | 否 | 軟件自定義解析參數 |
cacheKey | NSString * | 否 | 軟件自定義解析自定義緩存key |
request | HttpdnsRequest * | 是 | 參考 解析相關數據結構 |
返回說明
類型 | 說明 |
HttpdnsResult * | 解析結果,參考 解析相關數據結構 |
同步解析域名接口
使用同步解析接口解析域名,會阻塞當前線程,直到獲得有效解析結果并返回。
該接口首先查詢緩存,若緩存存在可用的解析結果則立即返回緩存解析結果,若緩存中沒有可用的解析結果,則會阻塞當前調用解析的線程并且在工作線程中進行域名解析,等域名解析完成返回解析結果,或達到超時時間返回空值。
本接口提供了常規版本、使用軟件自定義解析的版本。
本接口于v3.0.0版本中新增。
為了防止在主線程中誤用本接口導致APP卡頓,本接口會做檢測,若發現調用線程是主線程,則自動降級到
resolveHostSyncNonBlocking
接口的實現邏輯。本接口默認超時時間為2秒,若超時時間內未能請求到有效結果,會返回nil。超時時間可以通過request對象定制。
接口定義
- (nullable HttpdnsResult *)resolveHostSync:(NSString *)host byIpType:(HttpdnsQueryIPType)queryIpType;
- (nullable HttpdnsResult *)resolveHostSync:(NSString *)host byIpType:(HttpdnsQueryIPType)queryIpType withSdnsParams:(NSDictionary<NSString *, NSString *> *)sdnsParams sdnsCacheKey:(NSString *)cacheKey;
- (nullable HttpdnsResult *)resolveHostSync:(HttpdnsRequest *)request;
所屬類
HttpDnsService
參數定義
參數 | 類型 | 是否必填 | 說明 |
host | NSString * | 是 | 待解析域名 |
queryIpType | HttpdnsQueryIPType | 是 | 待解析的IP類型。使用 枚舉類型,代表解析哪種類型的IP:
|
sdnsParams | NSDictionary<NSString *, NSString *> * | 否 | 軟件自定義解析參數 |
cacheKey | NSString * | 否 | 軟件自定義解析自定義緩存key |
request | HttpdnsRequest * | 是 | 參考 解析相關數據結構 |
返回說明
類型 | 說明 |
HttpdnsResult * | 解析結果,參考 解析相關數據結構 |
異步解析域名接口
使用異步解析接口解析域名,不會阻塞當前線程,解析結果會通過回調的形式返回。
該接口首先查詢緩存,若緩存存在可用的解析結果則立即通過回調返回緩存解析結果,若緩存中沒有可用的解析結果,則會在工作線程中進行域名解析,等域名解析結束或者達到超時時間再通過回調返回解析結果。
本接口提供了常規版本、使用軟件自定義解析的版本。
接口定義
- (void)resolveHostAsync:(NSString *)host byIpType:(HttpdnsQueryIPType)queryIpType completionHandler:(void (^)(HttpdnsResult * nullable))handler;
- (void)resolveHostAsync:(NSString *)host byIpType:(HttpdnsQueryIPType)queryIpType withSdnsParams:(NSDictionary<NSString *, NSString *> *)sdnsParams sdnsCacheKey:(NSString *)cacheKey completionHandler:(void (^)(HttpdnsResult * nullable))handler;
- (void)resolveHostAsync:(HttpdnsRequest *)request completionHandler:(void (^)(HttpdnsResult * nullable))handler;
本接口于v3.0.0版本中新增。
本接口默認超時時間為2秒,若超時時間內未能請求到有效結果,會回調nil。超時時間可以通過request對象定制。
所屬類
HttpDnsService
參數定義
參數 | 類型 | 是否必填 | 說明 |
host | NSString * | 是 | 待解析域名 |
queryIpType | HttpdnsQueryIPType | 是 | 待解析的IP類型。使用 枚舉類型,代表解析哪種類型的IP:
|
handler | (void (^)(HttpdnsResult * nullable)) | 是 | 解析結果回調 |
sdnsParams | NSDictionary<NSString *, NSString *> * | 否 | 軟件自定義解析參數 |
cacheKey | NSString * | 否 | 軟件自定義解析自定義緩存key |
request | HttpdnsRequest * | 是 | 參考 解析相關數據結構 |
回調結果說明
類型 | 說明 |
HttpdnsResult * | 解析結果,參考 解析相關數據結構 |
清空域名緩存
使用阿里云域名解析服務的用戶,調用該接口主動清除本地緩存,可實現秒級域名配置生效。 例如:假設域名xxx.com,解析IP地址為ip1,當ip1遭受攻擊,需要將流量遷移至ip2,實現流程如下:
首先,用戶在云解析控制臺將域名對應IP修改為ip2,此時在HTTPDNS服務端會立即獲取到此變更信息,并清除服務端該域名的ip1緩存。
用戶手動調用此接口,清空xxx.com域名的本地緩存。
App端清空緩存后的下一次請求,會使得服務端重新請求權威服務器,獲取最新解析IP地址ip2,從而使前端解析結果立即生效為ip2。
本接口提供指定域名列表清理緩存,和清理全部域名緩存兩種調用形式。
該功能僅適用于SDK v2.0.4及以上版本。其中新增的
cleanAllHostCache
接口適用于v3.1.0及以上版本。清除操作同時清除內存緩存和本地持久化沙箱緩存。
接口定義
- (void)cleanHostCache:(NSArray <NSString *>*)hostArray;
- (void)cleanAllHostCache;
參數說明
參數 | 類型 | 是否必填 | 說明 |
hostArray | NSArray <NSString *>* | 是 | 需要清除的host域名數組。如果需要清空全部數據,傳nil或者空數組即可 |
解析相關數據結構
HTTPDNS iOS SDK提供的域名解析接口主要涉及兩個自定義結構:HttpdnsRequest
和HttpdnsResult
。
HttpdnsRequest
解析請求類,包裝域名解析相關的請求參數。
參數 | 類型 | 是否必填 | 說明 |
host | NSString * | 是 | 待解析域名。 |
queryIpType | HttpdnsQueryIPType | 是 | 待解析的IP類型。使用 枚舉類型,代表解析哪種類型的IP:
|
resolveTimeoutInSecond | double | 否 | 解析超時時間,對于同步接口,即為最大等待時間,對于異步接口,即為最大等待回調時間。默認2秒,可配置范圍為0.5秒到5秒。 單位為秒 |
sdnsParams | NSDictionary<NSString *, NSString *> * | 否 | 軟件自定義解析參數 |
cacheKey | NSString * | 否 | 軟件自定義解析自定義緩存key |
HttpdnsResult
解析結果類,包裝域名解析成功后的返回結果。注意,以下幾種情況,會導致解析接口獲得空值:
域名解析不到地址,如遞歸解析不到ip記錄
未在HTTPDNS控制臺添加該域名,導致服務端無法解析
解析失敗,如發生網絡異常問題
使用同步非阻塞接口時,若在本地緩存沒有立即找到緩存記錄,也會先返回空值
參數 | 類型 | 說明 |
host | NSString * | 解析的域名 |
ips | NSArray<NSString *> * | 解析到的ipv4的地址列表 |
ipv6s | ipv6s | 解析到的ipv6的地址列表 |
lastUpdatedTimeInterval | NSTimeInterval | 最后一次更新該域名ipv4解析結果的時間。Unix時間戳,單位秒 |
ttl | NSTimeInterval | 該域名ipv4結果的ttl,單位秒 |