在 app 中網(wǎng)絡(luò)請(qǐng)求中使用了 DSN映射加速。
原理
其原理就是:用域名映射對(duì)應(yīng)的 ip 地址,直接是用 ip地址來做請(qǐng)求越過域名解析過程。(同時(shí) app 中去掉了 afnet 的域名驗(yàn)證)
實(shí)現(xiàn)過程:
第一步
在 app 初始化時(shí)通過一個(gè)全局類 ConfigManager 來通過指定的網(wǎng)絡(luò)請(qǐng)求來獲取 DNS 映射表(即 json 數(shù)據(jù))同時(shí)保存在全局類中。
第二步
在封裝的網(wǎng)絡(luò)請(qǐng)求中業(yè)務(wù)邏輯分開。底層一個(gè)NetKit 直接操作 AFNetworking來做 post,get,down,up請(qǐng)求(是通過 AFURLSessionManager 類中的請(qǐng)求方法)。同時(shí)通過 NSDictionary 將每一個(gè) url 生成的 AFHTTPSessionManager 對(duì)象映射保存起來。
上層業(yè)務(wù)類 Engine 類對(duì) NetKit 返回的 data 進(jìn)行一寫業(yè)務(wù)邏輯操作,如數(shù)據(jù)解析,DNS加速,請(qǐng)求出錯(cuò)重新請(qǐng)求,數(shù)據(jù)統(tǒng)計(jì)等。
通過 ConfigManager 類獲取 DSN 映射表根據(jù)請(qǐng)求的 url來獲取 ip 地址。 通過 NSURLComponents 來改變 url 的 host。 根據(jù)新的 url 生成 AFHTTPSessionManager 對(duì)象重新保存在 NSDictionary 中。
第三步
通過 url 來獲取字典中的 AFHTTPSessionManager 對(duì)象,根據(jù)該對(duì)象來做網(wǎng)絡(luò)請(qǐng)求。