HttpCore和HttpClient
一、HttpCore
- httpcore實(shí)現(xiàn)了一套HTTP 協(xié)議的基礎(chǔ)組件,為構(gòu)建客戶端/代理/服務(wù)器端 HTTP 服務(wù)一致的 API。
- 支持兩種I/O模式:BIO和NIO
-
- BIO:阻塞型Blocking I/O,通信模型:1:1模型:通常由一個(gè)獨(dú)立的Acceptor線程(服務(wù)器)負(fù)責(zé)監(jiān)聽客戶端的連接,它接收到客戶端連接請(qǐng)求之后為每個(gè)客戶端創(chuàng)建一個(gè)新的線程進(jìn)行鏈路處理 處理完成后,通過輸出流返回應(yīng)答給客戶端,線程銷毀。流程: Client->server->新建線程處理請(qǐng)求并返回響應(yīng)->銷毀線程
- NIO:非阻塞型Non-Blocking I/O,通信模型:
-
-
- 偽異步I/O模型:通過線程池管理線程。Client->server->線程池->分配線程處理請(qǐng)求并返回響應(yīng)->線程池回收線程。
- NIO模型:這里的N是new縮寫,buffer緩沖區(qū)緩存數(shù)據(jù)減少等待時(shí)間,channel通道讀取緩存區(qū)數(shù)據(jù)或向緩沖區(qū)寫入數(shù)據(jù)配合buffer使用,selector多路復(fù)用器監(jiān)聽注冊(cè)在其上的channel,收到channel上讀或?qū)懯录畔?#xff0c;輪詢channel,然后通過selectkey調(diào)用channel執(zhí)行任務(wù)。
- AIO模型:通過監(jiān)聽和異步通道(異步文件通道和異步套接字通道)實(shí)現(xiàn)異步讀寫,減少了selector對(duì)通道的輪詢,是一個(gè)事件驅(qū)動(dòng)模型。
-
- 項(xiàng)目結(jié)構(gòu)
?
一、HttpRequst執(zhí)行流程圖
?
?
理解:
1、HttpProcessor是HTTP protocol processor的縮寫,它的作用就是給我們寫的request設(shè)置默認(rèn)參數(shù)(比如協(xié)議版本,是否保持連接等),一般我們寫的HttpRequest只有url和數(shù)據(jù),事實(shí)上,一個(gè)完整的請(qǐng)求不只有這兩個(gè)數(shù)據(jù),查看一下HTTP協(xié)議就知道一個(gè)請(qǐng)求需要很多數(shù)據(jù)了,而之所以我們不用寫這些數(shù)據(jù),是因?yàn)镠ttpCore或HttpClient幫我們完成了,而負(fù)責(zé)這部分功能的就是HttpProcessor。
2、HttpRequestExecutor 的作用就是調(diào)用HttpProcessor完善原始HttpRequest,根據(jù)請(qǐng)求參數(shù)使用HttpClientConnection執(zhí)行HttpRequest并接受HttpResponse,以及設(shè)置HttpCoreContext參數(shù)。
3、HttpClientConnection獲取方法有兩種:1、自己新建conn綁定根據(jù)host新建的socket;2、新建connpool,根據(jù)host從pool中獲取conn
4、HttpCoreContext:是為了完成會(huì)話功能,下邊是官方注釋:
?
* 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
- 實(shí)現(xiàn)了一系列的底層傳輸?shù)墓δ?/li>
- 這些底層功能,可以用來去建立自己的client和server
- 支持兩種I/O模式:
- 阻塞型Blocking:基于典型的Java的I/O模型
- 非阻塞型Non-Blocking:基于Java的NIO,事件驅(qū)動(dòng)型
- BIO:Blocking IONIO和AIO的區(qū)別
- NIO:buffer、channel和selector
- AIO:事件驅(qū)動(dòng)
- 在線文檔:
- HttpCore Tutorial
- 中文版:HttpCore-Simplified Chinese.pdf
- 示例代碼:HttpCore Examples
- HttpComponents Client == HttpClient
- 兼容HTTP 1.1
- 基于HttpCore
- 意味著:導(dǎo)入對(duì)應(yīng)的庫HttpClient庫時(shí),也要導(dǎo)入相關(guān)的HttpCore的庫
- 同時(shí)提供了其他功能:
- 客戶端認(rèn)證功能
- HTTP狀態(tài)管理
- HTTP連接管理
- HttpClient是之前常用的那個(gè):Commons HttpClient 3.x的繼承者
- 之前的HttpClient 3.x,現(xiàn)已廢棄
- 如果還要用之前的HttpClient 3.x,也強(qiáng)烈推薦你換用最新的HttpClient 4.1(或更新版本的)
- 在線文檔:
- HttpClient Tutorial
- 中文版:HttpClient Tutorial Simplified Chinese
- 示例代碼:HttpClient Examples
- HttpClient還有個(gè)異步的版本:
- Asynch HttpClient
四、參考文檔
https://blog.csdn.net/ty497122758/article/details/78979302
總結(jié)
以上是生活随笔為你收集整理的HttpCore和HttpClient的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 证券教父阚治东出手:UU跑腿获2亿元B轮
- 下一篇: 超简单集成华为HMS Core MLKi