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