netty中的ChannelHandler和ChannelPipeline


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攔截

ChannelPipelines和ChannelHandlers

ChannelHandlerContext

ChannelHandlerContext代表了ChannelPipeline和ChannelHandler之間的關聯,是ChannelHandler之間信息傳遞的橋梁。

ChannelPipeline、Channel、ChannelHandler、ChannelHandlerContext之間的關系。

Channel_ChannelHandler

  • 1、Channel綁定到ChannelPipeline
  • 2、ChannelPipeline綁定到包含ChannelHandler的Channel
  • 3、ChannelHandler
  • 4、當添加ChannelHandler到ChannelPipeline時,ChannelHandlerContext被創建

Channel中信息的傳遞:

  • Channel或者ChannelPipeline上調用write()方法,會讓整個事件在管道中進行傳遞。
  • ChannelHandler之間的數據傳遞則通過ChannelHandlerContext調用方法來實現。

channel中事件的傳遞

  • 事件傳遞給 ChannelPipeline 的第一個 ChannelHandler
  • ChannelHandler 通過關聯的 ChannelHandlerContext 傳遞事件給 ChannelPipeline 中的 下一個
  • ChannelHandler 通過關聯的 ChannelHandlerContext 傳遞事件給 ChannelPipeline 中的 下一個


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM