MINA2 核心源代碼分析筆記 - 1. 整體結構與代碼分析指引

 

2008年7月的一個週末,突發熱忱,對剛出了M3版本的MINA2起了興趣。下載了原碼以及一部分資料進行研學。當時,做了一部分筆記。但是由於工作等各種原因一年多沒有繼續。正直2010年新年新春之際,於家中整理當時的筆記。準備後續慢慢整理出來。

當時的nio網絡框架並不多,除了MINA2以外還有國內著名的Cindy。兩個框架都作了研學,但是Cindy由於代碼註釋少、以及資料缺乏,作者也消失良久等原因,所以並沒有作爲重點學習目標。

經過3天對MINA2代碼研讀,發現的核心部分從來沒有一篇doc能夠說明清除(至少當時沒有看到),而大部分都停留在使用IoHanlder以及IoFilter等外部擴展上。而我將以NIO的網絡部分爲切入點來介紹其真實的核心部分

整個筆記會分爲幾部分進行說明:

1. 整體結構及代碼分析指引

2. IoAcceptor與IoConnector類族 (IoService)

 

 

1 整體介紹

 

首先查看mina的整體結構,在mina的相關網上中就能找到。

針對整體結構的初步認識:

在這個結構中存在多個IoFilter以及IoHandlerIoProcessorIoService形成完整的IO通道。很多doc都特別強調了其類似於Chain of Responsibility模式的實現。但是這個責任鏈並不是整個I/O底層核心部分。

 

2 代碼分析指引

根據NIO網絡開發的基礎,其底層應該封裝了SocketChannelServerSocketChannelSelectorByteBuffer等類。經過初步代碼的查看以及說明文檔,包含以上基礎類的部分集中在IoServiceIoAcceptor IoConnector)、IoProcessor以及IoSession的類族之上(以下將它們稱爲IO核心類族)。

而其他的包括各種ListenerFilter提供偵聽以及責任鏈等行爲。IoSession類族的實例其實本質上是SocketChannel的封裝,此外它增加了write-buffer-queue等附加共功能。而IoAcceptorIoConnectorIoProcessor三個類族完成了selector的封裝以及IoSession對象的流轉。其他的IoFilter IoHandler等類族的行爲其實都是由該三個類的實例觸發的。IoAcceptorIoConnector類族都實現了IoService接口,所以概念上其實都是IoService

關鍵核心類族包括IoAcceptorIoConnectorIoProcessorIoSession等類族。之後將會分別進行介紹與分析。

 

 

發佈了39 篇原創文章 · 獲贊 1 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章