HttpCore和HttpClient
一、HttpCore
- httpcore實現了一套HTTP 協議的基礎組件,為構建客戶端/代理/服務器端 HTTP 服務一致的 API。
- 支持兩種I/O模式:BIO和NIO
-
- BIO:阻塞型Blocking I/O,通信模型:1:1模型:通常由一個獨立的Acceptor線程(服務器)負責監聽客戶端的連接,它接收到客戶端連接請求之后為每個客戶端創建一個新的線程進行鏈路處理 處理完成后,通過輸出流返回應答給客戶端,線程銷毀。流程: Client->server->新建線程處理請求并返回響應->銷毀線程
- NIO:非阻塞型Non-Blocking I/O,通信模型:
-
-
- 偽異步I/O模型:通過線程池管理線程。Client->server->線程池->分配線程處理請求并返回響應->線程池回收線程。
- NIO模型:這里的N是new縮寫,buffer緩沖區緩存數據減少等待時間,channel通道讀取緩存區數據或向緩沖區寫入數據配合buffer使用,selector多路復用器監聽注冊在其上的channel,收到channel上讀或寫事件信息,輪詢channel,然后通過selectkey調用channel執行任務。
- AIO模型:通過監聽和異步通道(異步文件通道和異步套接字通道)實現異步讀寫,減少了selector對通道的輪詢,是一個事件驅動模型。
-
- 項目結構
?
一、HttpRequst執行流程圖
?
?
理解:
1、HttpProcessor是HTTP protocol processor的縮寫,它的作用就是給我們寫的request設置默認參數(比如協議版本,是否保持連接等),一般我們寫的HttpRequest只有url和數據,事實上,一個完整的請求不只有這兩個數據,查看一下HTTP協議就知道一個請求需要很多數據了,而之所以我們不用寫這些數據,是因為HttpCore或HttpClient幫我們完成了,而負責這部分功能的就是HttpProcessor。
2、HttpRequestExecutor 的作用就是調用HttpProcessor完善原始HttpRequest,根據請求參數使用HttpClientConnection執行HttpRequest并接受HttpResponse,以及設置HttpCoreContext參數。
3、HttpClientConnection獲取方法有兩種:1、自己新建conn綁定根據host新建的socket;2、新建connpool,根據host從pool中獲取conn
4、HttpCoreContext:是為了完成會話功能,下邊是官方注釋:
?
* The primary purpose of the HTTP context is to facilitate information sharing * among various logically related components. HTTP context can be used * to store a processing state for one message or several consecutive messages. * Multiple logically related messages can participate in a logical session * if the same context is reused between consecutive messages.?
?
二、HttpResponse的獲取原理
三、HttpCore和HttpClient
- HttpComponents Core == HttpCore
- 實現了一系列的底層傳輸的功能
- 這些底層功能,可以用來去建立自己的client和server
- 支持兩種I/O模式:
- 阻塞型Blocking:基于典型的Java的I/O模型
- 非阻塞型Non-Blocking:基于Java的NIO,事件驅動型
- BIO:Blocking IONIO和AIO的區別
- NIO:buffer、channel和selector
- AIO:事件驅動
- 在線文檔:
- HttpCore Tutorial
- 中文版:HttpCore-Simplified Chinese.pdf
- 示例代碼:HttpCore Examples
- HttpComponents Client == HttpClient
- 兼容HTTP 1.1
- 基于HttpCore
- 意味著:導入對應的庫HttpClient庫時,也要導入相關的HttpCore的庫
- 同時提供了其他功能:
- 客戶端認證功能
- HTTP狀態管理
- HTTP連接管理
- HttpClient是之前常用的那個:Commons HttpClient 3.x的繼承者
- 之前的HttpClient 3.x,現已廢棄
- 如果還要用之前的HttpClient 3.x,也強烈推薦你換用最新的HttpClient 4.1(或更新版本的)
- 在線文檔:
- HttpClient Tutorial
- 中文版:HttpClient Tutorial Simplified Chinese
- 示例代碼:HttpClient Examples
- HttpClient還有個異步的版本:
- Asynch HttpClient
四、參考文檔
https://blog.csdn.net/ty497122758/article/details/78979302
總結
以上是生活随笔為你收集整理的HttpCore和HttpClient的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 证券教父阚治东出手:UU跑腿获2亿元B轮
- 下一篇: 超简单集成华为HMS Core MLKi