Okhttp3是如何解決網絡開發(fā)的問題的

Okhttp3是一個網絡請求庫箫柳。在介紹他的大多數文章中啥供,都有一句 很好很強大悯恍。那么這樣一個網絡請求庫怎么個強大呢伙狐?

那么要想知道他怎么個強大涮毫,就得知道他在各個問題上的處理方式

1、網絡連接的穩(wěn)定性贷屎,對于移動端來說,如果用戶處在一個網絡環(huán)境比較差的位置陶舞,那么數據的上傳和下載都會很慢。一旦網絡連接出錯舅巷,HttpUrlConnection 就會報錯钠右,但是Okhttp3可以配置椅文,是否重連,還可以更換訪問地址锨亏,尋找最終可以到達的網絡地址

2萌丈、傳輸的數據包大小英岭,在傳輸網絡數據時诅妹,一般的網絡請求都是直接將數據直接發(fā)送給服務器。但是Okhttp3 他默認使用的是GZIP,因為Okhttp3使用的是Okio(更加高效易用的IO庫)的IO流操作吭狡,自帶GZIP操作尖殃。先把數據壓縮一遍,然后再發(fā)送出去划煮,這樣就節(jié)省了我們的流量送丰,那么他能給我們節(jié)省多少流量呢?請看下圖

那么為啥使用GZIP也就清楚了弛秋,因為 壓縮速度快? 壓縮率高啊

有的時候器躏,有些用戶會反復刷新數據,其實對于后臺來說不停的重復請求數據蟹略,其實對后臺壓力蠻大的登失,這個時候,OkHttp3可以對網絡請求進行緩存挖炬,通過和后臺的最近修改時間做對比揽浙,看是否重新拉取數據,還是使用緩存數據意敛。這樣也節(jié)約了時間馅巷,也減少了額外流量的請求。

如果斷網了草姻,我們還可以使用緩存钓猬,正常的把數據給暫時出來

3、大量的網絡通道的處理碴倾,連接通道的復用逗噩,網絡請求都是比較耗時的,尤其是對于移動端跌榔,要http連接都是需要3次握手4次揮手的。如果每次請求過來都進行7次連接捶障,可想而知是有多耗性能僧须。而且一般移動端的請求網絡次數還是很多的。一般每秒也有2到3次網絡請求吧项炼。那么okhttp3會存在一個連接池担平,如果用完了的連接通道,會回到連接池锭部,便于下一次網絡請求使用暂论,這樣復用連接通道,就避免了反復的握手和揮手了拌禾。

但是同樣會有一個問題取胎,如果一瞬間有上百個網絡請求,那我是不是得不斷的去連接池請求網絡連接?這樣會不會增大內存的開銷闻蛀? 是的匪傍,當然會增加了。怎么辦呢觉痛? 當然是加一個連接池數量的限制嘛役衡?一般我們自己不會加,但是Okhttp3會自動幫我們加上

但是如果長時間不用網絡薪棒,我們還占用著與后臺的連接通道手蝎,那是不是也不太好呢?是的俐芯。所以如果一段時間不使用網絡棵介,連接通道也就會自動關閉了。這樣也就節(jié)省了性能開銷泼各。

想想如果上百次的網絡請求鞍时,那得和后臺進行多少次握手呀

4、開發(fā)人員如何管理網絡模塊扣蜻, 靈活性逆巍,Okhttp3 真的太靈活了,首先從他的配置方面來說莽使,1锐极、超時就分好幾種 比如 讀超時,寫超時芳肌,連接超時灵再,回調超時。

攔截器:Interceptors 亿笤,networdInterceptors翎迁,打個比方,網絡連接有的會出現(xiàn)重定向净薛,那么第一個只會攔截一次汪榔,但是第二個會在每一個重定向的時候攔截一次。

監(jiān)聽器:雖然監(jiān)聽器就那么一個接口肃拜,但是接口中會監(jiān)聽的網絡請求過程真的很多


每一個過程她都會回調一個監(jiān)聽方法

那么開始的方法和結束的方法永遠不變痴腌,都是callStart 和callEnd,那么這樣的話燃领,我們就能計算一個網絡請求的耗時情況了士聪。

但是有的時候,我又不想監(jiān)控所有網絡請求猛蔽,不要緊剥悟,我們還有EventFactory 可以進行選擇性攔截監(jiān)聽,不管是按百分比監(jiān)聽,還是按接口名來監(jiān)聽懦胞,通通滿足

請求體數據類型多樣:字符串請求體(最大1mb)替久,使用okio的IO流數據(數據大小不限),請求體為文件類型躏尉,表單數據請求體蚯根,multipart多種表單數據類型的上傳(可包含k/v數據,以及圖片等)適應各種類型的數據

網絡請求的控制能力胀糜,啥時候想取消就啥時候調用 call.cancel()方法 即可颅拦,這個一般用于頁面銷毀時,頁面級別的請求就得同步銷毀掉

靈活性相關的內容教藻,大家可以參考:Recipes - OkHttp

http距帅、https、http/2 都已支持括堤。

5碌秸、安全性? https的網絡連接方式,各種證書的配置,一般情況下使用Okhttp3默認的配置即可悄窃,如果對安全要求比較高的話讥电,可以自定義配置證書,但是這個得聯(lián)系服務器的證書管理員轧抗。

基本上這就是Okhttp3的強大的幾個點了恩敌。大致已經包括了網絡請求的各個關鍵點的問題。比如:網絡不穩(wěn)定的問題横媚、節(jié)省數據流量纠炮、網絡性能的開銷、開發(fā)人員對網絡的控制力灯蝴,網絡安全等恢口。基本上所列舉的這幾個點也是所有網絡請求都會遇到的問題穷躁。不管是volley還是HttpUrlConnection 都會遇到弧蝇,只是他們沒有如Okhttp3這樣考慮的這么細致。

目前Okhttp3已經更新到4.x了折砸,對于新版本的網絡請求,仍然沿用 Okhttp3的名字沙峻,畢竟大家已經熟悉了Okhttp3了睦授。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市摔寨,隨后出現(xiàn)的幾起案子去枷,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件删顶,死亡現(xiàn)場離奇詭異竖螃,居然都是意外死亡,警方通過查閱死者的電腦和手機逗余,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門特咆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人录粱,你說我怎么就攤上這事腻格。” “怎么了啥繁?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵菜职,是天一觀的道長。 經常有香客問我旗闽,道長酬核,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任适室,我火速辦了婚禮嫡意,結果婚禮上,老公的妹妹穿的比我還像新娘亭病。我一直安慰自己鹅很,他們只是感情好,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布罪帖。 她就那樣靜靜地躺著促煮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪整袁。 梳的紋絲不亂的頭發(fā)上菠齿,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機與錄音坐昙,去河邊找鬼绳匀。 笑死,一個胖子當著我的面吹牛炸客,可吹牛的內容都是我干的疾棵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼痹仙,長吁一口氣:“原來是場噩夢啊……” “哼是尔!你這毒婦竟也來了?” 一聲冷哼從身側響起开仰,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤拟枚,失蹤者是張志新(化名)和其女友劉穎薪铜,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體恩溅,經...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡隔箍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了脚乡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜒滩。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖每窖,靈堂內的尸體忽然破棺而出帮掉,到底是詐尸還是另有隱情,我是刑警寧澤窒典,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布蟆炊,位于F島的核電站,受9級特大地震影響瀑志,放射性物質發(fā)生泄漏涩搓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一劈猪、第九天 我趴在偏房一處隱蔽的房頂上張望昧甘。 院中可真熱鬧,春花似錦战得、人聲如沸充边。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽浇冰。三九已至,卻和暖如春聋亡,著一層夾襖步出監(jiān)牢的瞬間肘习,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工坡倔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留漂佩,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓罪塔,卻偏偏與公主長得像投蝉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子征堪,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內容