本篇對MINA進行介紹:java
上圖說明的是MINA在咱們的項目中所處的層次。至關於對底層的通訊系統作了一個封裝。因爲MINA暴露給用戶的接口足夠友好,因此MINA使用起來至關方便!
MINA架構圖:
一個框架最重要的應該是它的數據流動和線程結構,數據流動可以很好的幫助理解框架,線程結構是理解工做方式的必要前提!
1. MINA數據流
在MINA鏈接程序中,每一個用戶在鏈接的時候會創建一個TCP鏈接, 也就是創建了一條通訊管道,客戶端(remote peer)在給服務器發送消息的時候所經歷的流程如上所示:
在服務端會通過一個IoFilterChain, 也就是java中的責任鏈模式, 也就是數據包會通過鏈路上的每一個filter進行處理, 好比(編碼,解碼,打印數據包內容)。你能夠自定義
各類須要的filter。
MINA暴露給用戶的接口是IoHandler, 在IoHandler中MINA爲咱們提供了幾個經常使用的事件接口, 好比鏈接創建, 收到消息, 捕獲到異常等等, 這些就是咱們能夠插入代碼
到MINA框架的地方, 數據包在MINA在框架中通過各類filter後到了咱們自定義的IoHandler中,控制權就轉移到了咱們的手中!
通常MINA框架給咱們提供插入點就是在filter鏈上插入filter和在IoHandler實現各類事件接口。
2. MINA線程結構
MINA採用的javaNIO程序, 做爲一個服務器框架, 那麼MINA必須有一個監聽的線程,監聽的線程負責響應客戶端的各類鏈接事件。
在接收到各類鏈接事件後,MINA會分派一個processer線程來處理這個客戶端鏈接上的各類讀寫事件,這裏MINA會啓動和CPU核數相關數量的線程,並且一個processer線程
會處理多個客戶端鏈接讀寫事件。processer線程在處理讀寫事件的時候就是按照上面的數據流來進行處理的、因而整個結構就清晰了。
上面說明了Mina的使用方式,省去了JAVA NIO細節, 由於要使用的話基本就只須要作到這個地步就能夠了。 如何感興趣能夠去閱讀MINA的源碼!
若是隻須要使用MINA的話,那麼上面的數據流細節和線程細節已經能很好的闡釋MINA框架了。