網絡框架總結

HttpUrlConnetction

該協議是對網絡請求這個過程的包裝。

從協議的解析到TCP的連接,以及tcp連接的緩存,整個過程就是應用層到網絡層的一次網絡請求過程,

Okhttp
1.基本用法
異步/同步請求
2.原理
一個網絡請求最必要的兩部分是請求(Request)和返回結果(Response)
任何網絡請求框架都是對這兩個過程的包裝,是網絡請求變得更加簡單和智能

特性:
1.緩存策略
緩存的是什麼?Response
2.任務隊列
線程池/消費者生產者模型
內部維護任務隊列線程池,友好支持併發訪問

3.多路複用的優化(即:HTTP2)
痛點:使用socket創建網絡連接的缺點:時間久(三次握手),開銷大,同時網絡請求是頻繁的,碎片化的
優化點:內置連接池,支持連接複用,減少延遲
實現原理:HTTP2所有性能增強的核心在於新的二進制分幀層,它定義瞭如何封裝HTTP消息並在客戶端與服務器之間進行傳輸,類似與多進程下的時間分片機制
多路複用:多路複用場景下一個address只需要一個連接,基於這個連接可以有多個“請求和響應對”即:StreamAllocation,這些請求響應對可以並行發生,然後通過組裝幀來生成消息
連接池:OkHttp的連接池通過計數+標記清理的機制來管理連接池,使得無用連接可以被會回收,並保持多個健康的keep-alive連接。這也是OkHttp的連接池能保持高效的關鍵原因。多路複用的理論依據是:http2二進制分幀 具體實現是通過管理連接池來達到複用

4.攔截器
設計思想:將網絡請求和響應的整個過程,貫穿在一系列攔截器中,每個攔截器都有自己明確的職責。okhttp對網絡請求的優化也是體現在攔截器責任鏈中。
設計模式:責任鏈
一次網絡請求和響應是貫穿了整個系列的攔截器。每個攔截器都是對Request和Response的優化處理。重試/壓縮/緩存/連接池等都是一個個攔截器完成的。

靈感:基本所有優化的點都是從複用,壓縮等角度考慮,不管是線程池還是http2多路複用機制

5.retrofit

核心是動態代理

https://blog.csdn.net/u011784767/article/details/78281384

6.rxjava

1.rx java

觀察者模式本身的目的就是『後臺處理,前臺回調』的異步機制,

被動觀察者方式:可以節省資源,當被觀察者發生變化的時候主動通知觀察者

基本用法
1.創建觀察者:當事件發生時有怎麼樣的行爲
2.創建被觀察者:決定什麼時候觸發事件及觸發怎麼的事件
3.事件的傳遞方向:由被觀察者向觀察者傳遞


實現線程切換
subscribeOn:指定事件產生的線程
observeOn:指定事件消費的線程
Scheduler:RxJava用來控制線程切換的
默認情況:RxJava遵循哪個線程產生就在哪個線程消費的原則
IoScheduler:切換到io線程,該Scheduler維護這一個線程池,執行具體任務

 

一句話總結RxJava子線程和主線程的原理

切換到子線程的關鍵是將Runnable放到線程池去執行,切換到主線程是利用在主線程實例化的Handle發送Message,讓runnable回調到主線程去。

參考:

https://yq.aliyun.com/articles/78105?spm=a2c4e.11153940.blogcont78105.11.5ec25d133D4imk

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章