出身名門的 Mina 通信框架,可靠且省時

出身名門的 Mina 通信框架,可靠且省時

隨著網絡通信技術的發展速度加快,互聯網應用對高併發、高可用的要求越來越高,分佈式、彈性伸縮的架構逐漸成為開發人員常用的技術了。


在Java NIO通信框架中,出身於開源界的大牛Apache組織的Mina通信框架為開發者們提供了很大的便利。


那Mina框架的執行流程是怎麼樣的呢?異步君帶大家來了解一下Mina設計架構吧!


Mina設計架構


Mina 框架是 Apache 開源的一款網絡通信應用框架。使用 Mina 框架可以幫助用戶開發高性能和高伸縮性的網絡應用框架。

Mina 提供了一個抽象的事件驅動,開發者既可以通過 Java NIO 實現 TCP/IP 和 UDP/IP 等協議的數據傳輸,也可以在 VM 內管道通信。Mina 對於傳輸不同類型數據,

提供了一整套的 API,極大地減少了開發者的開發時間。


在客戶端與服務器端連接成功之後,可以抽象地認為客戶端與服務器端建立了一個通信管道, IoSession 就是負責在管道中傳輸數據和接收數據的管理者,同時 Mina 提供了過濾器,能夠增強開發者對管道的管理。在 IoHandler 作為 Mina 執行流程的末端,需要開發者在 IoHandler 中實現業務邏輯的編碼。


對於在互聯網 TCP 協議傳輸數據包的時候,Mina 提供了編碼解碼過濾器,幫助開發者解決粘包和斷包問題處理,同時 Mina 也支持開發者自定義數據包的編碼和解碼操作。


Mina整體架構


在 Mina 運行架構中,開發者只需要關注應用程序開發即可。Mina 會自動把開發者的應用程序和底層網絡層之間黏合起來,開發者不需要考慮網絡通信中底層的實現。


也就是說,Mina 起到的是黏合劑的作用。這裡說的應用程序是指 Mina 建立的客戶端應用程序或者 Mina 建立的一個後端應用程序,如圖所示。

出身名門的 Mina 通信框架,可靠且省時

Mina存在於中間層,開發者只需要關注於Mina頂部的設計,即應用程序設計。也就是說,開發者根據業務需求開發出對應的應用程序即可。


至於 Mina 底層網絡數據的傳輸,不需要開發者去關心。對於Mina黏合底層網絡層,可以基於TCP 協議、UDP 協議或者 VM 通信。


Mina 負責接收底層網絡數據 之後,並且通過過濾器編碼或者解碼,把數據轉化成開發者需要的數據包,返回到開發者的應用程序中。


Mina執行流程


Mina 整體執行流程分為服務器端執行流程和客戶端執行流程。無論是服務器端執行流程,還是客戶端執行流程兩者都具有很大的共性:需要在應用程序中新建 IoService 服務。


IoService服務分為兩種,一種是包括開啟Mina服務器端接收器 IoAcceptor,另一種是Mina客戶端連接服務器端的IoConnector連接器。接著在IoFilterChain 中創建過濾鏈。

在創建過濾鏈的時候,開發者根據項目需求的選擇 Mina 自帶的過濾 器,增強對應用程序的控制。最後在 IoHandler 中實現開發者業務邏輯處理。


Mina服務器端執行流程

對於 Mina 服務器端執行流程主要分為3步:首先 IoAcceptor 接收器監聽端口號,或者監聽IP地址和端口號,實現接收客戶端新建連接或者接收客戶端發送來服務器端的數據包。


接著開始遍歷在開啟Mina接收器時,加入的過濾鏈中的過濾器,在加載完過濾器之後,數據就會傳輸到 IoHandler 中,在 IoHandler 中開發者需要根據需求實現業務邏輯代碼。接收器執行流程如圖所示。

出身名門的 Mina 通信框架,可靠且省時


當接收器IoAcceptor接收到有新客戶端連接的時候,就會為這位客戶端創建對應新的會話IoSession,服務器端通過操作這個會話IoSession實現對客戶端發送數據、接收數據或者接收客戶端的請求等操作。


IoFilter過濾器可以用來解析數據包的內容或者增強對應用程序流程的控制等操作,例如,當開發者使用自定義編碼和解碼器的時候,需要判斷此刻服務器端接收的數據包是否完整,是否出現粘包或者斷包現象;當發現非法IP地址連接的時候,直接拒絕非法客戶端的連接。


在IoFilter中,開發者根據需要實現項目中自定義的編碼解碼。執行完IoFilter 過濾鏈之後,後端通過 IoSession 發送數據包到客戶端。


Mina客戶端執行流程


Mina 客戶端執行流程也是分為 3 個部分,客戶端通過 IoHandler 從服務器端接收所有響應請求和消息之後,通過開發者在 IoConnector 連接服務器時,遍歷加入過濾鏈的過濾器,接著通過 IoConnector 發送數 據到服務器端。Mina 客戶端執行流程如圖 所示。

出身名門的 Mina 通信框架,可靠且省時


在客戶端中負責連接後端的 IoConnector 連接器,客戶端在新建連接的時候,指定服務器端的 IP 地址和端口號進行連接,在客戶端連接成功之後,就會創建與服務器端關聯的會話 IoSession,客戶端通過這個會話 IoSession,向服務器端發送消息,在發送消息之前,連接器會遍歷過濾鏈中開發者在客戶端加入的編碼模式,在對數據包進行編碼完成之後,向後端發送數據包。


Mina 執行流程無論是客戶端,還是服務器端都需要經過過濾鏈,遍歷開發者加入過濾鏈中的過濾器,過 濾器在其中的作用至關重要,在加入過濾器的時候,可以加入日誌過濾器、開發者自定義的編碼解碼過 濾工廠等。


在 IoService 中會把 NIO 煩瑣的部分進行封裝,提供簡潔的接口給開發者使用。IoService 分為 Mina 服務器端接收器 IoAcceptor 和 Mina 客戶端連接器 IoConnector。


在 Mina 客戶端連接器 IoConnector 連接成功之後,就生成一個與服務器端關聯是 IoSession,開發者根據獲得的 IoSession 向後端 發送數據包,同樣的,對服務器而言,接收器成功接收客戶端連接器連接之後,也會與成功連接的每一 個客戶端連接器生成一個關聯的 IoSession,服務器端通過操作 IoSession,可以向每一個連接成功客戶端 發送數據包。


分享到:


相關文章: