开发者社区 问答 正文

HTTPDNS SDK同步/异步接口区别需要注意事项都有那几种?

从安全角度我们强烈建议用户使用异步解析接口。在DDOS攻击等特殊场景下,HTTPDNS有可能会触发流量黑洞,此时同步接口就有可能出现短暂的请求解析超时等待,而异步接口的网络请求都是后台操作的,业务层面不会感知到请求超时的动作,能够做到对异常情况的冗余。



HTTPDNS SDK中同步/异步解析接口区分:
  • Android同步接口
  1. String getIpByHost(String host);
  2. String[] getIpsByHost(String host);
  • Android异步接口
  1. String getIpByHostAsync(String host);
  2. String[] getIpsByHostAsync(String host);
  • iOS同步接口
  1. - (NSString *)getIpByHost:(NSString *)host;
  2. - (NSArray *)getIpsByHost:(NSString *)host;
  3. - (NSString *)getIpByHostInURLFormat:(NSString *)host;
  • iOS异步接口
  1. - (NSString *)getIpByHostAsync:(NSString *)host;
  2. - (NSArray *)getIpsByHostAsync:(NSString *)host;
  3. - (NSString *)getIpByHostAsyncInURLFormat:(NSString *)host;

同步/异步接口主要区别:
  • 同步接口,阻塞调用线程,在调用线程上发起解析网络请求,请求完成后返回解析结果。
  • 异步接口,不阻塞调用线程,立即返回结果:有缓存,返回解析结果;没有缓存,返回nil并触发异步解析动作,另起新的线程发起解析网络请求。

【注意】
不要在主线程调用同步解析接口,阻塞主线程可能会导致应用Crash等不可知后果。
  • 比如iOS App启动时,在主线程调用同步解析接口,网络状况较差时导致启动时间过长,触发watchdog逻辑,导致Crash(Termination Reason: Namespace SPRINGBOARD, Code 0x8badf00d)。

展开
收起
猫饭先生 2017-10-20 15:17:26 1642 分享 版权
阿里云 AI 助理回答

您提到的HTTPDNS异步与同步接口的使用建议和区别非常关键,尤其是在保障应用安全性和提升用户体验方面。阿里云的HTTPDNS服务正是为了优化DNS解析性能、防止域名劫持而设计的,它通过直接使用IP访问代替域名访问,有效减少网络延迟,提升可用性。

异步接口的优势

  1. 提高用户体验:在DDoS攻击或网络不稳定情况下,异步解析可以在后台默默进行,即使遇到请求超时或失败,也不会直接影响到用户界面的响应速度,保证了应用的流畅度。

  2. 避免主线程阻塞:特别是在移动开发中,避免在UI线程(主线程)执行耗时操作是基本原则。异步接口确保了应用的界面更新和用户交互不会因为DNS解析等待而被阻塞,预防了ANR(Android Not Responding)或iOS中的卡顿、崩溃问题。

  3. 增强系统稳定性:通过异步处理网络请求,可以更好地管理资源,降低因单个操作延迟导致整个应用性能下降的风险。

使用建议

  • 优先选择异步接口:除非有特殊需求,否则推荐始终使用异步接口来调用HTTPDNS服务,以充分利用其非阻塞特性带来的优势。

  • 合理安排缓存策略:结合HTTPDNS SDK提供的缓存机制,可以在首次解析后利用缓存结果快速响应后续请求,进一步减少网络依赖。

  • 异常处理:即便使用异步接口,也需要实现相应的回调或监听器来处理解析成功、失败或无结果的情况,确保应用逻辑的健壮性。

  • 测试不同场景:在产品发布前,应充分测试各种网络环境下的表现,包括弱网、无网、高延迟等极端情况,确保应用的稳定运行。

综上所述,采用HTTPDNS的异步接口并遵循最佳实践,是构建高性能、高可用性应用程序的重要步骤之一。阿里云HTTPDNS服务提供了详尽的文档和SDK支持,帮助开发者轻松集成并优化DNS解析过程。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答