網(wǎng)站首頁 編程語言 正文
一 出站與入站中handler加載與執(zhí)行順序
1.1 關(guān)系梳理
1.調(diào)用 new Context(group,filterName(name,handler),handler)方法,創(chuàng)建一個Context。從這里可以看出來,每次添加一個handler都會常見一個關(guān)聯(lián)的Context。調(diào)用 addLast方法,將Context追加到鏈表中。由下圖的中的黃色箭頭表示,可以看出123的順序就是在追加。
2.每當創(chuàng)建channelSocket的時候都會創(chuàng)建一個綁定的pipeiline,1:1的關(guān)系,創(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í)行出站任務(wù)的。
5.而節(jié)點中間的傳遞通過AbstaractChannelHandlerContext類內(nèi)部的fire系列方法,找到當前節(jié)點的下一個節(jié)點不斷的循環(huán)傳播,是一個過濾器形成 完成對handler的調(diào)度。
https://www.cnblogs.com/tianzhiliang/p/11739372.html
二 netty網(wǎng)絡(luò)通信中涉及的出棧和入棧流程
2.1 描述
channelhandler處理事件分為出站和入站,兩個方向的操作都是不同的,因此,netty定義了兩個子接口繼承channnelhandler。
netty提供的一系列使用的編碼解碼器,本質(zhì)上也是一種handler,它們都實現(xiàn)了ChannelInboundHandler或者ChannelOutboundHandler接口。
業(yè)務(wù)處理的handler一定要放到最后面
1.channelInboundhandler? 入站事件接口
channelActive:用于當channel處于活動狀態(tài)時被調(diào)用
channelRead: 當從channel讀取數(shù)據(jù)時被調(diào)用等方法
2.channelOutboundHndler ?出站事件接口
bind 方法:當請求將channel綁定到本地地址時調(diào)用
close 方法: 當請求關(guān)閉channel 時調(diào)用等等。
?3.整體流程圖
原文鏈接:https://blog.csdn.net/u011066470/article/details/125357244
相關(guān)推薦
- 2022-07-06 C語言舉例講解i++與++i之間的區(qū)別_C 語言
- 2022-09-22 MP(MyBaitsPlus)代碼生成器
- 2022-10-16 Python?re.split方法分割字符串的實現(xiàn)示例_python
- 2022-08-19 python中的函數(shù)和變量的用法
- 2023-01-17 pytorch?geometric的GNN、GCN的節(jié)點分類方式_python
- 2022-12-06 Python基礎(chǔ)之文件操作及光標移動詳解_python
- 2022-03-20 關(guān)于Rancher部署并導入K8S集群的問題_云其它
- 2024-04-05 mybatis(mybatis-plus)報invalid bound statement (not
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支