Netty是什麼?
異步事件驅動的網絡應用框架,可以快速開發一個可維護的高性能的服務端和客戶端。
都是誰在用Netty?
Dubbo、ZK、RocketMQ、ES、Spring5(對於Http協議的實現)、Spak等大型開源項目使用Netty作爲底層通訊的實現。
Netty中的核心概念是什麼?
1、Channel
管道,是對Socket的封裝。包含一組API,簡化了直接與Socket進行操作複雜性。
通道:Channel 【https://www.cnblogs.com/myitnews/p/12213637.html】
通道初始化器:ChannelInitializer 【https://www.cnblogs.com/myitnews/p/12213602.html】
通道配置項:ChannelOption 【https://www.cnblogs.com/myitnews/p/12213098.html】
2、EventLoopGroup
一個EventLoop池,包含很多EventLoop。
Netty爲每一個Channel分配了一個EventLoop,用於處理用戶連接請求、對用戶請求的處理等所有事件。EventLoop本身只是一個線程驅動,在其生命週期內只會綁定一個線程,讓該線程處理一個Channel的所有IO 事件。
一個Channel一單與一個EventLoop綁定,在整個生命週期內是不可以改變的。一個Channel只能綁定一個EventLoop,但一個EventLoop可以綁定多個Chanel,即EventLoop與Channel爲 1:N 關係。而一個EventLoop與線程是 1:1 關係。
線程組:NioEventLoopGroup 【 https://www.cnblogs.com/myitnews/p/12212796.html】
3、ServerBootStrap
用於配置整個Netty代碼,將各個組件關聯起來。服務端使用的是ServerBootStrap,而客戶端使用的是BootStrap。
啓動配置類:Bootstrap 和 ServerBootstrap 【https://www.cnblogs.com/myitnews/p/12212807.html】
4、ChannelHandler 和 ChannelPipeline
ChannelHandler 是對Channel中數據的處理器,這些處理器可以是系統本身定義好的編解碼器,也可以是用戶自定義的。這些處理器會被統一添加到ChannelPipeline對象中,然後按照添加順序對Channel中的數據進行依次處理。
通道處理器:ChannelHandler 【https://www.cnblogs.com/myitnews/p/12213568.html】
通道管道線:ChannelPipeline 【https://www.cnblogs.com/myitnews/p/12213046.html】
編碼器(Encoder)和 解碼器(Decoder) 【https://www.cnblogs.com/myitnews/p/12213691.html】
6、ChannelFuture
Channel中所有的I/O操作都是異步的,即操作不會立即得到返回消息。所以Netty中定義了一個ChannelFuture對象作爲這個異步操作的代言人,表示異步操作本身。如果想獲取改異步操作的返回值,可以通過該異步操作的對象的addListener()方法做爲該異步操作添加監聽器。爲其註冊回調:當結果出來後馬上調用執行。
Netty的異步編程模型都是建立在Future與回調概念之上的。
執行結果:Future 和 ChannelFuture 【https://www.cnblogs.com/myitnews/p/12213655.html】