傳統socket
首先還是先了解下傳統socket下的通信流程
流程很清晰,細節不講太多。
Netty抽象
在netty中步驟1監聽端口對應就是NioEventLoop,即事件循環,這裏的循環包括兩個部分,一個是新連接的接入,而另一個則是當前存在連接的數據流的讀寫。
接着接到一個新用戶的連接,而其在java底層是作爲Socket來處理,即在IO下是socket,NIO下是SocketChannel,而Netty將其自定義封裝爲Channel,基於此Channel,一系列的讀寫都可以在其連接上工作。(對Socket的抽象)
服務端接收數據流的載體都是基於ByteBuf,ByteBuf封裝了許多高可用的API,我們可以基於這些API與底層數據流做通信。
當數據流到達服務端後,服務端需要處理一些業務邏輯,這時就是ChannelHandler。我們也可以自定義Java對象,在ChannelHandler中做處理,數據包的分包、不同類型數據包的Java轉換。
數據流的寫出也是基於ByteBuf。
ChannelHandler是一個列的形式。Netty將這些邏輯串了起來,讓用戶方便的對業務做處理。
相關項目
關於Netty的產品導向項目 UncleCatMySelf/SBToNettyChat
如果本文對你有所幫助,歡迎關注本人技術公衆號,謝謝。