Netty基本知識以及概念

什麼是Netty

Netty是一款開源的網絡通訊框架,它是異步的、基於事件的,且高性能的框架,它支持多種網絡協議,例如HTTP,websocket,TCP/IP、UDP、FTP等等,所有網絡通訊問題都能由Netty解決

Netty線程模型

在這裏插入圖片描述

Netty核心組件

EventLoopGroup

概述:這是一個事件循環組,這個組內可以有一個或多個EventLoop,一個BossGroup和WorkerGroup都是EventLoopGroup的實現,通常BossGroup處理客戶端連接,然後把連接後的客戶通道交給WorkerGroup進行IO處理

EventLoop

概述:這個是一個事件循環,在這個事件循環裏面有一個selector和一個taskQueue,而selector裏維護着多個管道

Pipeline

概述: 管道和Pipeline是一對一的關聯關係,而pipeline內部的多個Context形成了鏈表,Context只是對Handler的封裝,當有事件發生數據通過通道流入管道,經過一個又一個的處理器

Netty自帶的Handler

概述:Netty自帶了一些Handler(處理器),這些處理器通常用於正式處理業務前後的編碼、解碼

HTTP相關Handler

  • HttpRequestDecoder:該處理器是把HTTP請求解碼,然後將解碼後數據封裝到HttpObject(默認DefaultHttpRequest實現)內後傳給下一個Handler,這是一個InBound處理器

  • HttpResponseEncoder:該處理器是把HTTP響應編碼爲瀏覽器可讀的數據的處理器,這是一個OutBound處理器

  • HttpServerCodec:該處理器相當於HttpRequestDecoder+ HttpResponseEncoder,通常用於服務器上

  • HttpResponseDecoder:該處理器是把HTTP響應解碼爲一個HttpObject(默認DefaultHttpResponse實現)對象後傳給下一個Handler,這是一個InBound處理器

  • HttpRequestEncoder:該處理器是把HTTP請求編碼爲可發送的HTTP請求數據,這是一個OutBound處理器

  • HttpClientCodec:該處理器相當於HttpResponseDecoder+ HttpRequestEncoder,通常用於客戶端上

ChannelHandler的調用/註冊順序

概述:在管道中有一個管道處理器鏈,這個鏈是有序的,根據註冊的順序來調用管道內的處理器

註冊順序:

註冊順序從鏈頭到鏈尾爲:解碼器(入棧)->編碼器(出棧)->業務處理器(入/出棧)

注意:如果出棧處理器被註冊在處理器鏈的尾部,那麼這個出棧處理器可能達不到預期的效果,所以一般註冊在業務處理器的前面

調用順序:

處理器的調用順序爲:
鏈頭入棧處理器1入棧處理器2入棧處理器n鏈尾出棧處理器n出棧處理器n-1出棧處理器n-2…出棧處理器1鏈頭

注意:調用順序爲從鏈頭開始向鏈尾調用中間所有可調用的入棧處理器,然後再在鏈尾處逆向回來調用中間可用的所有出棧處理器,最到鏈頭結束

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