前言
HTTPDNS SDK除了提供了豐富的網域名稱解析的介面之外,還提供了相關的能力。包括:
網域名稱黑名單。詳情請查看設定HTTPDNS的網域名稱黑名單。
自訂TTL。詳情請查看自訂解析結果TTL。
IP優選。詳情請查看啟用IP優選。
設定預解析網域名稱
在App啟動,完成SDK初始化後,可以立即調用此介面,設定您後續可能會使用到的熱點網域名稱,以便SDK提前解析,減少後續網域名稱解析時請求的時延。
如果是在運行過程中調用,SDK也會立即解析設定的網域名稱列表中的網域名稱,從而重新整理這些網域名稱的解析結果,記錄到緩衝中。相當於強製做一次更新。通常用於某些業務動作發生之後,希望重新整理當前的網域名稱解析,強制網域名稱重新調度。
基於解析效率和響應速度的平衡考量,SDK每次向服務端提交的批量解析任務限制為5個網域名稱。 因此當預解析列表的網域名稱個數超過5個時,SDK會自動分批提交解析。
setPreResolveHosts
介面定義
void setPreResolveHosts(ArrayList<String> hostList)
void setPreResolveHosts(ArrayList<String> hostList, RequestIpType requestIpType)
引入版本
2.4.0
所屬類
HttpDnsService
參數說明
參數 | 類型 | 是否必填 | 說明 |
hostList | ArrayList<String> | 是 | 預解析網域名稱列表。如果沒有requestIpType參數則預設為RequestIpType.v4。 重要
|
requestIpType | RequestIpType | 否 | 預解析的IP類型。推薦使用RequestIpType.both 枚舉類型,代表解析哪種類型的IP:
|
同步解析網域名稱
使用同步解析介面解析網域名稱,會阻塞當前線程,直到獲得有效解析結果並返回。
該介面首先查詢快取,若緩衝存在可用的解析結果則立即返回緩衝解析結果,若緩衝中沒有可用的解析結果,則會阻塞當前調用解析的線程並且在背景工作執行緒中進行網域名稱解析,等網域名稱解析完成返回解析結果,或達到逾時時間返回空值。
為了防止在主線程中誤用本介面導致APP卡頓,本介面會做檢測,若發現調用線程是主線程,則自動降級到getHttpDnsResultForHostSyncNonBlocking介面的實現邏輯。
同步解析介面,整體的耗時受逾時配置控制,如果在逾時配置內還沒有解析成功,會立即返回空解析結果。
getHttpDnsResultForHostSync
介面定義
HTTPDNSResult getHttpDnsResultForHostSync(String host, RequestIpType requestIpType)
引入版本
2.3.2
所屬類
HttpDnsService
參數定義
參數 | 類型 | 是否必填 | 說明 |
host | String | 是 | 待解析網域名稱。 |
requestIpType | RequestIpType | 是 | 待解析的IP類型。推薦使用RequestIpType.both 枚舉類型,代表解析哪種類型的IP:
|
返回說明
類型 | 說明 |
解析結果。 |
程式碼範例
val httpdns = HttpDns.getService(accountID)
val httpDnsResult = dnsService?.getHttpDnsResultForHostSync("www.aliyun.com", RequestIpType.auto)HttpDnsService httpdns = HttpDns.getService(accountID);
HTTPDNSResult httpDnsResult = httpdns.getHttpDnsResultForHostSync("www.aliyun.com", RequestIpType.auto);非同步解析網域名稱
使用非同步解析介面解析網域名稱,不會阻塞當前線程,解析結果會通過回調的形式返回。
該介面首先查詢快取,若緩衝存在可用的解析結果則立即通過回調返回緩衝解析結果,若緩衝中沒有可用的解析結果,則會在背景工作執行緒中進行網域名稱解析,等網域名稱解析結束或者達到逾時時間再通過回調返回解析結果。
非同步解析介面,整體的耗時受逾時配置控制,如果在逾時配置內還沒有解析成功,會立即通過回調返回空解析結果。
getHttpDnsResultForHostAsync
介面定義
void getHttpDnsResultForHostAsync(String host, RequestIpType type, HttpDnsCallback callback)
引入版本
2.4.0
所屬類
HttpDnsService
參數說明
參數 | 類型 | 是否必填 | 說明 |
host | String | 是 | 待解析網域名稱。 |
requestIpType | RequestIpType | 是 | 待解析的IP類型。推薦使用RequestIpType.both 枚舉類型,代表解析哪種類型的IP:
|
callback | 是 | 網域名稱解析結果回調介面。 |
程式碼範例
val httpdns = HttpDns.getService(accountID)
val httpDnsResult = dnsService?.getHttpDnsResultForHostAsync("www.aliyun.com", RequestIpType.auto, HttpDnsCallback {
httpDnsResult = it
})HttpDnsService httpdns = HttpDns.getService(accountID);
HTTPDNSResult httpDnsResult = httpdns.getHttpDnsResultForHostAsync("www.aliyun.com", RequestIpType.auto, new HttpDnsCallback() {
void onHttpDnsCompleted(HTTPDNSResult result) {
}
});同步非阻塞解析網域名稱
使用同步非阻塞介面解析網域名稱,不會阻塞當前線程,但可能會返回空結果。
該介面僅查詢快取,返回緩衝查詢的解析結果。若緩衝中沒有解析結果或者緩衝中的解析結果已經TTL到期,則會在背景工作執行緒中進行網域名稱解析,解析成功後更新緩衝,供下次調用網域名稱解析使用。
getHttpDnsResultForHostSyncNonBlocking
介面定義
HTTPDNSResult getHttpDnsResultForHostSyncNonBlocking(String host, RequestIpType type)
引入版本
2.4.0
所屬類
HttpDnsService
參數說明
參數 | 類型 | 是否必填 | 說明 |
host | String | 是 | 待解析網域名稱。 |
requestIpType | RequestIpType | 是 | 待解析的IP類型。推薦使用RequestIpType.both 枚舉類型,代表解析哪種類型的IP:
|
返回說明
類型 | 說明 |
解析結果。 |
程式碼範例
val httpdns = HttpDns.getService(accountID)
val httpDnsResult = dnsService?.getHttpDnsResultForHostSyncNonBlocking("www.aliyun.com", RequestIpType.auto)HttpDnsService httpdns = HttpDns.getService(accountID);
HTTPDNSResult httpDnsResult = httpdns.getHttpDnsResultForHostSyncNonBlocking("www.aliyun.com", RequestIpType.auto);清空指定網域名稱緩衝
使用阿里雲網域名稱解析服務的使用者,調用該介面主動清除本機快取,可實現秒級網域名稱配置生效。 例如:假設網域名稱xxx.com,解析IP地址為ip1, 當ip1遭受攻擊,需要將流量遷移至ip2,實現流程如下:
首先,使用者在雲解析控制台將網域名稱對應IP修改為ip2,此時在HTTPDNS服務端會立即擷取到此變更資訊,並清除服務端該網域名稱的ip1緩衝。
使用者手動調用此介面,清空xxx.com網域名稱的本機快取。
App端清空緩衝後的下一次請求,會使得服務端重新請求權威伺服器,擷取最新解析IP地址ip2,從而使前端解析結果立即生效為ip2。
cleanHostCache
介面定義
void cleanHostCache(ArrayList<String> hosts)
引入版本
2.2.2
清空操作會同步清空記憶體緩衝和本機快取。
所屬類
HttpDnsService
參數說明
參數 | 類型 | 是否必填 | 說明 |
hosts | ArrayList<String> | 是 | 需要清除的host網域名稱數組。如果需要清空全部資料,傳null或者空數組即可。 |