netty中的ChannelHandler和ChannelPipeline
ChannelHandler 家族
https://www.w3cschool.cn/essential_netty_in_action/
Channel 生命周期
- channelRegistered: 注冊。
- channelActive: 活躍狀態,可接收和發送數據。
- channelInactive: 處於非活躍狀態,沒有連接到遠程主機。
- channelUnregistered: 已創建但未注冊到一個 EventLoop。
ChannelHandler 生命周期
- handlerAdded: 當 ChannelHandler 添加到 ChannelPipeline 調用
- handlerRemoved: 當 ChannelHandler 從 ChannelPipeline 移除時調用
- exceptionCaught: 當 ChannelPipeline 執行拋出異常時調用
ChannelHandler兩個重要的接口:
- ChannelInboundHandler : 處理進站數據和所有狀態更改事件。
- ChannelOutboundHandler : 處理出站數據,允許攔截各種操作。
ChannelPipeline
ChannelPipeline 是一系列ChannelHandler的實例,流經一個Channel的事件可以被ChannelPipeline攔截
ChannelHandlerContext
ChannelHandlerContext代表了ChannelPipeline和ChannelHandler之間的關聯,是ChannelHandler之間信息傳遞的橋梁。
ChannelPipeline、Channel、ChannelHandler、ChannelHandlerContext之間的關系。
- 1、Channel綁定到ChannelPipeline
- 2、ChannelPipeline綁定到包含ChannelHandler的Channel
- 3、ChannelHandler
- 4、當添加ChannelHandler到ChannelPipeline時,ChannelHandlerContext被創建
Channel中信息的傳遞:
- Channel或者ChannelPipeline上調用write()方法,會讓整個事件在管道中進行傳遞。
- ChannelHandler之間的數據傳遞則通過ChannelHandlerContext調用方法來實現。
- 事件傳遞給 ChannelPipeline 的第一個 ChannelHandler
- ChannelHandler 通過關聯的 ChannelHandlerContext 傳遞事件給 ChannelPipeline 中的 下一個
- ChannelHandler 通過關聯的 ChannelHandlerContext 傳遞事件給 ChannelPipeline 中的 下一個