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