網(wǎng)站首頁 編程語言 正文
一 出站與入站中handler加載與執(zhí)行順序
1.1 關系梳理
1.調(diào)用 new Context(group,filterName(name,handler),handler)方法,創(chuàng)建一個Context。從這里可以看出來,每次添加一個handler都會常見一個關聯(lián)的Context。調(diào)用 addLast方法,將Context追加到鏈表中。由下圖的中的黃色箭頭表示,可以看出123的順序就是在追加。
2.每當創(chuàng)建channelSocket的時候都會創(chuàng)建一個綁定的pipeiline,1:1的關系,創(chuàng)建peipeline的時候會創(chuàng)建tail節(jié)點和head節(jié)點,形成最初的鏈表。
3.在調(diào)用peipeline的addLast方法的時候,會根據(jù)給定的handler創(chuàng)建一個context,然后建這個context插入到鏈表的尾端(tail的前面)
3.context包裝了多個handeler,多個context在pipeline中形成雙向鏈表。
4.入站方向叫inbound,由head節(jié)點開始,出站方向叫outbound,由tail節(jié)點開始。
因為出站是從內(nèi)部向外面進行寫操作,從tail開始能夠讓前面的handler進行處理,防止handler被遺漏,如編碼。入站當然就是從head網(wǎng)內(nèi)部輸入,讓后面的handler能夠處理這些輸入的數(shù)據(jù)。比如解碼。
注意:雖然head也實現(xiàn)了outbound接口,但不是從head開始執(zhí)行出站任務的。
5.而節(jié)點中間的傳遞通過AbstaractChannelHandlerContext類內(nèi)部的fire系列方法,找到當前節(jié)點的下一個節(jié)點不斷的循環(huán)傳播,是一個過濾器形成 完成對handler的調(diào)度。
https://www.cnblogs.com/tianzhiliang/p/11739372.html
二 netty網(wǎng)絡通信中涉及的出棧和入棧流程
2.1 描述
channelhandler處理事件分為出站和入站,兩個方向的操作都是不同的,因此,netty定義了兩個子接口繼承channnelhandler。
netty提供的一系列使用的編碼解碼器,本質(zhì)上也是一種handler,它們都實現(xiàn)了ChannelInboundHandler或者ChannelOutboundHandler接口。
業(yè)務處理的handler一定要放到最后面
1.channelInboundhandler? 入站事件接口
channelActive:用于當channel處于活動狀態(tài)時被調(diào)用
channelRead: 當從channel讀取數(shù)據(jù)時被調(diào)用等方法
2.channelOutboundHndler ?出站事件接口
bind 方法:當請求將channel綁定到本地地址時調(diào)用
close 方法: 當請求關閉channel 時調(diào)用等等。
?3.整體流程圖
原文鏈接:https://blog.csdn.net/u011066470/article/details/125357244
相關推薦
- 2022-04-03 對已有的docker容器增加新的端口映射問題(兩種方式)_docker
- 2022-07-28 pytest使用parametrize將參數(shù)化變量傳遞到fixture_python
- 2022-01-31 torch.save實現(xiàn)對網(wǎng)絡結構和模型參數(shù)的保存 & pytorch模型文件.pt .pt
- 2022-03-31 python猜單詞游戲的實現(xiàn)_python
- 2022-02-23 利用?trap?在?docker?容器優(yōu)雅關閉前執(zhí)行環(huán)境清理的方案_docker
- 2022-10-26 Golang?Mutex?原理詳細解析_Golang
- 2022-10-19 react編寫可編輯標題示例詳解_React
- 2022-07-01 C++中strlen函數(shù)的三種實現(xiàn)方法_C 語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支