项目要做HttpDNS,查阅了网上一些资料基本都是用了第三方服务,阿里云,腾讯云等。
但是具体实现起来还是有些差异。对比之下,我们项目
1.IP后台配置,通过get请求获取。反观阿里云是提供了对应的接口,直接返给你最佳选择,当无返回的时候,可以走默认的DNS解析,逻辑十分清晰。
2.通过get请求获取的IP由运维手动配置,因此获取的IP地址不保证能否连接,同时多个IP地址的连接时间也需要前端自己去ping,然后采用速度最快的进行访问。
3.请求为Http请求,Https的坑还未踩到.
4.看了很多实现都是新建NSURLProtocol子类去处理请求。但实际我觉得意义不大,都是拦截请求,可以在项目封装的网络框架里直接实现就好了,如果项目里还要其他需要自定义的请求反而会混淆麻烦。同时在NSURLProtocol还要做请求IP的操作,我觉得反而是拆分出请求IP,选取最优的这一个操作为一个工具类来实现会更好.
最终的实现流程图.
最后实现的Demo
一些实现参考:
HttpDNS功能说明及实现
可能是最全的iOS端HttpDns集成方案
iOS - 阿里云 HTTPDNS iOS 植入
解决「 HTTPDNS + HTTPS 」的证书校验问题
iOS应用接入HTTPDNS服务的架构设计方案
ping的一些Demo
https://github.com/Lede-Inc/LDNetDiagnoService_IOS
iOS实现Ping命令