# 一、Netty的工作原理
客服端
Bootstap
|-----------EventLoopGroup |-----連接成功
| |-------------NioSocketChannel-----------|--------------->|-----讀數據
|---------------------------------------pipeline------------------------->服務器 |-----處理異常
服務器
ServiceBootStrap
|---------------------NioServiceSocketChannel
| |---------------------------localhost
| |---------------------------------------讀,發,寫 收信息
# 二、Netty核心組件
1. Channel
作用:傳入(入站)或者(出站)數據的載體,因此,他可以被打開或者被關閉,連接或者斷開連接。
ChannelInboundHandler
channelRead() 對于每一個傳入的消息都要調用
channelReadComplete()讀取到當前批量讀取到最后一條信息
exceptionCaught()在讀操作期間,有異常會拋出
ChannelInitializer
當一個新的連接被接收時,一個新的子Channel將會創建,而ChannelInitializer將會把一個你的實現 ChannelInboundHandler接口加入Channel的ChannelPiepeline中。
SimpleChannelInboundHandler
channelActive()在服務器的連接已經建立之后將被調用
channelRead0( ) 當從服務器接受到一條消息是被調用。
exceptionCaught()在處理過程中引發異常時被調用。
2.Channel的組件和設計
Channel、EventLoop、ChannelFuture
Channel:主要作用是I/O操作bind()、connect()、read()、write()
EventChannel:
一個EventLoopGroup包含一個多個EventLoop。
一個EventLoop在他的生命周期內只和一個Thread綁定。
所有由EventLoop處理的I/O事件都將在它專有的Thread上被處理。
一個Channel在它的生命周期內注冊于一個EventLoop。
一個EventLoop可能被分配給一個或多個Channel 。
2.回調
Netty當一個新的連接已經被建立時,ChannelHandler的channelActive回調方法。
3.Future
監聽回調方法
ChannelFuture
實現類:channelFutureListener
ChannelFuture接口
ChannelHandler接口 :數據從一種格式轉換為另外一種數據格式,或者處理裝換過程中所拋出的異常。
實現類 ChannelInboundHandler 發送客服端響應和沖刷數據。
5.事件和ChannelHandler
記錄日志
數據裝換
流控制
應用程序控制
ChannelPipeline接口
這個接口是做什么的?
他提供了ChannelHandler鏈的容器,并定義了用于在該鏈上的傳播入站,和出站時間流的Api,當Channel被創 建 時,他會自動分配到ChannelPipeline
ChannelInitializer安裝到ChannelPipeline中的過程如下所示
1. 一個ChannelInitializer的實現注冊到了ServerBootStrap
2. 當ChannelInitializer.initChannel()方法被調用時,ChannelInitiazer將在ChannelPipeline中安裝一組自定義的ChannelHandler
3. ChannelInitalizer將自己從ChannelPipeline中移除
在內部ChannelHandle接口有兩個實現類
第一個:ChannelInboundHandler
第二個:ChannelOutboundHandler
如果你想特殊處理ChannelHandler事件需要處理
適配器出現Adapter
ChannelHandlerAdapter
ChannelInboundHandlerAdapter
ChannelOutboundHandlerAdapter
ChannelDuplexHandler
# 三 、netty的傳輸
1.傳輸Api
ChannelHandler的典型用途
1.將數據從一種格式轉換成 另外一種格式
2.提供異常通知
3.提供Channel變為活動的或者非活動的通知
4.提供當Channel注冊到EventLoop或則從EventLoop注銷是通知
5.提供有關用戶自定義事件的通知
在這里用到了一種設計模式那就是攔截器設計模式