2008年7月的一個週末,突發熱忱,對剛出了M3版本的MINA2起了興趣。下載了原碼以及一部分資料進行研學。當時,做了一部分筆記。但是由於工作等各種原因一年多沒有繼續。正直2010年新年新春之際,於家中整理當時的筆記。準備後續慢慢整理出來。
當時的nio網絡框架並不多,除了MINA2以外還有國內著名的Cindy。兩個框架都作了研學,但是Cindy由於代碼註釋少、以及資料缺乏,作者也消失良久等原因,所以並沒有作爲重點學習目標。
經過3天對MINA2代碼研讀,發現的核心部分從來沒有一篇doc能夠說明清除(至少當時沒有看到),而大部分都停留在使用IoHanlder以及IoFilter等外部擴展上。而我將以NIO的網絡部分爲切入點來介紹其真實的核心部分。
整個筆記會分爲幾部分進行說明:
2. IoAcceptor與IoConnector類族 (IoService)
1 整體介紹
首先查看mina的整體結構,在mina的相關網上中就能找到。
針對整體結構的初步認識:
在這個結構中存在多個IoFilter以及IoHandler、IoProcessor、IoService形成完整的IO通道。很多doc都特別強調了其類似於Chain of Responsibility模式的實現。但是這個責任鏈並不是整個I/O底層核心部分。
2 代碼分析指引
根據NIO網絡開發的基礎,其底層應該封裝了SocketChannel、ServerSocketChannel、Selector、ByteBuffer等類。經過初步代碼的查看以及說明文檔,包含以上基礎類的部分集中在IoService(IoAcceptor IoConnector)、IoProcessor以及IoSession的類族之上(以下將它們稱爲IO核心類族)。
而其他的包括各種Listener、Filter提供偵聽以及責任鏈等行爲。IoSession類族的實例其實本質上是SocketChannel的封裝,此外它增加了write-buffer-queue等附加共功能。而IoAcceptor、IoConnector、IoProcessor三個類族完成了selector的封裝以及IoSession對象的流轉。其他的IoFilter IoHandler等類族的行爲其實都是由該三個類的實例觸發的。IoAcceptor、IoConnector類族都實現了IoService接口,所以概念上其實都是IoService。
關鍵核心類族包括IoAcceptor、IoConnector、IoProcessor、IoSession等類族。之後將會分別進行介紹與分析。