前言
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或者空数组即可。 |