HttpDns : 同步/异步接口区别及注意事项
从安全角度我们强烈建议用户使用异步解析接口。在DDoS攻击等特殊场景下,HTTPDNS有可能会触发流量黑洞,此时同步接口就有可能出现短暂的请求解析超时等待,而异步接口的网络请求都是后台操作的,业务层面不会感知到请求超时的动作,能够做到对异常情况的冗余。
HTTPDNS SDK中同步/异步解析接口区分:
Android 同步接口
String getIpByHost(String host);
String[] getIpsByHost(String host);
Android 异步接口
String getIpByHostAsync(String host);
String[] getIpsByHostAsync(String host);
iOS 同步接口 【备注:目前已下线同步接口】
- (NSString *)getIpByHost:(NSString *)host;
- (NSArray *)getIpsByHost:(NSString *)host;
- (NSString *)getIpByHostInURLFormat:(NSString *)host;
iOS 异步接口
- (NSString *)getIpByHostAsync:(NSString *)host;
- (NSArray *)getIpsByHostAsync:(NSString *)host;
- (NSString *)getIpByHostAsyncInURLFormat:(NSString *)host;
同步/异步接口主要区别:
同步接口,阻塞调用线程,在调用线程上发起解析网络请求,请求完成后返回解析结果。
异步接口,不阻塞调用线程,立即返回结果:有缓存,返回解析结果;没有缓存,返回nil并触发异步解析动作,另起新的线程发起解析网络请求。
【注意】
不要在主线程调用同步解析接口,阻塞主线程可能会导致应用Crash等不可知后果。
比如iOS App启动时,在主线程调用同步解析接口,网络状况较差时导致启动时间过长,触发
watchdog
逻辑,导致Crash(Termination Reason: Namespace SPRINGBOARD, Code 0x8badf00d
)。