Netty原理基本介紹
pipleline原理圖
基本介紹
圖一為ChannelPipleline的處理流程圖固逗“磐欤可以看出netty通過socket收發(fā)數(shù)據(jù)趾浅,用戶在創(chuàng)建netty Channel實例的時候初肉,需要將數(shù)據(jù)處理邏輯的Handler設(shè)置到channel的pipeline中厢钧。socket讀取數(shù)據(jù)后channel會按照pipeline中的handler如Handler1 -> Handler2 -> ...? HandlerM順序依次處理专酗。發(fā)送數(shù)據(jù)是channel會按照相反的順序HandlerM -> .. -> Handler2 -> Handler1處理數(shù)據(jù)睹逃。在處理的過程當中如果pipeline中的Handler與收發(fā)數(shù)據(jù)的處理的類型不符合,則跳過祷肯,如發(fā)送數(shù)據(jù)是發(fā)現(xiàn)為InboundHandler這跳過本次邏輯沉填,下面以讀取數(shù)據(jù)為例,對netty如何跳過的源碼進行分析:
DefaultChannelPipeline Construct方法圖
上圖為DefaultChannelPipeline的初始化方法佑笋,tail翼闹,head pipeline的頭指針、未指針蒋纬。
TailText數(shù)據(jù)讀取
上圖為TailText類的數(shù)據(jù)讀取方法猎荠,在數(shù)據(jù)讀取前會尋找下一個OutboundHandlerContext,OutbountHandlerContext為OutboundHandler的上下文
HeadText獲取下一個Handler