日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Netty】Netty 核心组件 ( ChannelHandlerContext )

發布時間:2025/6/17 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Netty】Netty 核心组件 ( ChannelHandlerContext ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、 ChannelHandlerContext 組件
  • 二、 ChannelHandlerContext 組件 debug 調試
  • 三、 ChannelHandlerContext 組件 debug 調試結果分析





一、 ChannelHandlerContext 組件



1 . ChannelHandlerContext 通道處理者上下文對象 :


① 保存信息 : ChannelHandlerContext 類中保存與 Channel 通道 , ChannelHandler 通道處理者 , 相關的信息 ;

② 關聯處理者 : ChannelHandlerContext 內部維護了一個 ChannelHandler 對象 ;



2 . 相關組件對應關系 :


① 整體脈絡 : ChnnelPipeline 本質是雙向鏈表 , 每個元素都是一個 ChannelHandlerContext 對象 , 每個 ChannelHandlerContext 都對應關聯了一個 ChannelHandler 對象 ;

② ChnnelPipeline 與 ChannelHandlerContext 對應關系 : 111 個 ChannelPipeline 對應多個 ChannelHandlerContext ;

③ ChannelHandlerContext 與 ChannelHandler 對應關系 : 1:11:11:1 ;



3 . ChannelHandlerContext 常用方法 :


① 獲取通道 : 在 ChannelHandlerContext 接口中定義的方法 ;

Channel channel();

② 獲取管道 : 在 ChannelHandlerContext 接口中定義的方法 ;

ChannelPipeline pipeline();

③ 獲取處理器 : 在 ChannelHandlerContext 接口中定義的方法 ;

ChannelHandler handler();

④ 刷新數據 : 在 ChannelHandlerContext 接口中定義的方法 ;

ChannelHandlerContext flush();

⑤ 關閉通道 : 在 ChannelOutboundInvoker 接口中定義的方法 ;

ChannelFuture close();

⑥ 寫出數據 : 在 ChannelOutboundInvoker 接口中定義的方法 , 作用是將數據寫出到 ChannelPipeline 管道中 ;

ChannelFuture writeAndFlush(Object msg);



二、 ChannelHandlerContext 組件 debug 調試



1 . 代碼及斷點 : 運行 【Netty】使用 Netty 開發 HTTP 服務器 | 三、 HTTP 服務器代碼實現 中的 HTTP 服務器代碼 , 在用戶自定義的 HTTPServerHandler 類的 channelRead0 方法中打斷點 , 查看該方法的 ChannelHandlerContext ctx 參數信息 ;

這里只列舉部分代碼 , 在獲取 channelRead0 方法的代碼處打上斷點 , 查看 ChannelHandlerContext 類型參數信息 ;

public class HTTPServerHandler extends SimpleChannelInboundHandler<HttpObject> {@Overrideprotected void channelRead0(ChannelHandlerContext ctx, HttpObject msg) throws Exception {if(msg instanceof HttpRequest){ //判斷該 HttpObject msg 參數是否是 Http 請求// 在此處打斷點, 查看 ChannelHandlerContext ctx 參數的信息System.out.println(ctx.channel().remoteAddress() + " 客戶端請求數據 ... ");// ...}}//... }



2 . 運行程序進入斷點 :


① debug 運行服務器程序 :


② 瀏覽器訪問 : 訪問 http://127.0.0.1:8888 地址 , 目前卡在斷點 , 無法成功獲取 HTTP 資源 ;


③ 服務器端進入斷點 : 可以查看 ChannelHandlerContext ctx 參數的具體信息 ;





三、 ChannelHandlerContext 組件 debug 調試結果分析



1 . ChannelHandlerContext 接口的具體實現類型 : 在 重寫的 SimpleChannelInboundHandlerprotected void channelRead0(ChannelHandlerContext ctx, HttpObject msg) throws Exception 方法中 , ctx 參數的實際類型是 DefaultChannelHandlerContext ;



2 . ChannelHandlerContext 雙向鏈表相關分析 :


① 雙向鏈表元素位置 : 該 ChannelHandlerContext ctx 是 ChannelPipeline 的 ChannelHandlerContext 類型雙向鏈表的一部分 , 由上一篇博客 【Netty】Netty 核心組件 ( ChannelPipeline 中的 ChannelHandlerContext 雙向鏈表分析 ) | 三、 Pipeline / ChannelPipeline 管道內雙向鏈表分析 , 分析可知 , 該 ctx 是整個雙向鏈表的第 333 個元素 ;

② 雙向鏈表前一個元素 : HttpServerCodec 服務器編解碼器 , 用于 HTTP 協議數據的編碼 , 解碼處理 ;

③ 雙向鏈表后一個元素 : 后面就是雙向鏈表尾部元素 , 是 DefaultChannelPipeline ;

④ 雙向鏈表 : DefaultChannelPipeline <-> ChannelInitializer <-> HttpServerCodec <-> SimpleChannelInboundHandler ( 自定義派生類 ) <-> DefaultChannelPipeline

貼一張沒有標注的圖 : 僅做參考 ;

總結

以上是生活随笔為你收集整理的【Netty】Netty 核心组件 ( ChannelHandlerContext )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。