java開源網站(6個java)

背景想要瞭解http協議,先看http協議在tcp/ip協議中的位置以及對應java層面io層的數據流方式,如上圖所示,http協議位於應用層,在tcp協議之上;下圖即是java層面幾種通信模型簡介幾種nio模型使用BIO方式(同步阻塞IO)使用ServerSocket綁定IP地址,啟動端口,使用Socket進行握手連接,連接成功後,雙方通過輸入輸出流進行同步阻塞式通信,每當有客戶端的請求後,即啟動一個線程進行處理使用PAIO(同步阻塞IO)使用線程池進行處理客戶端的請求,因為在進行read或者write的時候,都是阻塞IO的,所以還是同步阻塞IO,隻是線程的資源交由線程池進行控制使用java.nio包的NIO方式(異步非阻塞IO)使用NIO方式 異步IO,使用多路復用器關聯通道,當通道中有事件時,即通知處理,不用阻塞IO,利用ByteBuffer進行數據緩沖,使用Channel進行數據傳輸,利用Selector進行通道的輪詢與管理,讀寫均是異步的使用AIO方式(異步非阻塞IO)使用AIO方式,異步非阻塞IO,NIO的升級版,通過一系列的回調策略(CompletionHandler)完成應用功能,無需借助於Selector,對應於unix的異步IO上面5種方式的code示例在—-https://github.com/undergrowthlinear/netty.githttp request line和response line瞭解http request line格式和response line對於後面看各個框架源碼,有很大用處,可以隨意打開chrome的調試器,看下訪問一個請求對應的數據格式是否如上圖所說nettynetty 主從多模型reactor 主從多線程模型 來源 https://www.cnblogs.com/luoxn28/p/11875340.html大致工作流程如下:當客戶端連接進來。在main線程池進行握手、鑒權等功能校驗;通過後,將channel通道註冊到io線程池,通過一系列的handler進行處理業務數據流。netty邏輯架構圖承接上面的主從多模型,當客戶端註冊到io線程池後,netty使用管道流pipeline的方式,允許開發者復用框架已有的處理器以及自定義處理器,很多開源框架的網絡層都是使用netty進行通信,例如rocketmq、dubbo等netty中對於http協議支持核心類HttpObjectHttpContent(大塊對象支持) 、DefaultHttpContent、LastHttpContent(EMPTY_LAST_CONTENT)、HttpMessage(HttpRequest/HttpResponse的通用屬性支持)、 HttpRequest、 DefaultHttpRequest HttpObjectDecoder(解析ByteBuf為HttpMessage和HttpContent或者LastHttpContent,取決於內容數據塊的長度;如果沒有內容,則是createMessage創建HttpMessage的子類;如果有固定長度內容,且小於maxChunkSize,則DefaultLastHttpContent;最後有很多內容的時候,就是DefaultHttpContent、DefaultLastHttpContent)—-所以這裡有HttpRequest和HttpContent內容需要業務端分開處理、HttpRequestDecoder()、HttpResponseDecoder(解析ByteBuf為HttpResponse/HttpContent)HttpObjectEncoder(將HttpMessage或者HttpContent轉換成ByteBuf),HttpRequestEncoder(HttpRequest/HttpContent轉為ByteBuf)、 HttpResponseEncoder(HttpResponse/HttpContent轉為ByteBuf)、 io.netty.handler.codec.ByteToMessageDecoder#fireChannelRead—-將解析出來的列表元素循環迭代對後續的處理器,對於理解http的HttpRequest與HttpContent/LastHttpContent至關重要鏈接—-https://github.com/netty/netty.gitokhttp流程圖 來源 https://www.jianshu.com/p/5b886f851c59以易用性和性能著稱,上圖的官方描述,支持http2.0、連接池復用、響應緩存、流式調用、支持同步和異步調用等一系列功能,在很多開源框架中,也經常看得到,鏈接—-https://github.com/square/okhttp.gitapache httpclientapache出品,也是支持阻塞的io模型和非阻塞的nio模型,不過你要是用過okhttp,我估計你不會再用httpclient瞭,使用上,差距還是很明顯。HttpURLConnectionjava原生http協議,apache httpclient就是在其基礎上封裝而來,對開發者而言,易用性遠不及httpclient和okhttpFeignfeign 支持特性 來源 https://github.com/OpenFeign/feign當你對http request line和response line瞭解後,看feign的註解就會很清楚是什麼意思瞭,註解式開發,簡化http調用,spring微服務核心組件之一,鏈接—-https://github.com/OpenFeign/feign.gitForest國人開源的類似feign的api框架,官方描述如下:輕量級HTTP客戶端API框架,讓Java發送HTTP/HTTPS請求不再難。它比OkHttp和HttpClient更高層,是封裝調用第三方restful api client接口的好幫手,是retrofit和feign之外另一個選擇,鏈接—-https://gitee.com/dromara/forest當然,這也是我所瞭解過的http開源框架,可能還有更好用的,如果你知道,不妨在評論區留言,讓我也學習下。程序員的學習之路,逆水行舟,不學你就落後瞭,落後瞭就沒高薪水,就沒法買上好的假發瞭,持續學習,加油吧,夥伴們。


本文出自快速备案,转载时请注明出处及相应链接。

本文永久链接: https://www.xiaosb.com/beian/52162/