Mina文件 03-IoService
第三章IoService
MINA IoService - 如應用程式體系結構一章所示,是支援所有IO服務的基類,可以是伺服器端,也可以是客戶端。
它將處理與您的應用程式以及遠端對等方的所有互動,傳送和接收訊息,管理會話,連線等。
它是一個介面,實現為伺服器端的IoAcceptor和客戶端的IoConnector。
我們將在這些章節中解釋這些介面:
- IoService簡介
- IoService詳細資訊
- IoAcceptor
- IoConnector
IoService簡介
IoService提供基本的I / O服務並管理MINA中的I / O會話。它是MINA Architecture最重要的部分之一。 IoService和子介面的實現類是處理大多數低階I / O操作的地方。
IoService思維導圖
讓我們試著看看IoService的職責是什麼,它實現了AbstractIoService類。讓我們採用略微不同的方法,首先使用思維導圖,然後跳入內部工作。思維導圖是使用XMind建立的。
職責
如上圖所示,IoService有許多責任:
- 會話管理:建立和刪除會話,檢測空閒。
- 過濾鏈管理:處理過濾鏈,允許使用者即時更改鏈
- 呼叫處理程式:在收到一些新訊息時呼叫處理程式等
- 統計管理:更新發送的訊息數,傳送的位元組數以及許多其他訊息
- 監聽管理:管理可以設定的監聽
- 通訊管理:處理雙方的資料傳輸
所有這些方面將在以下章節中描述。
介面細節
IoService是所有IoConnector和IoAcceptor的基本介面,提供I / O服務和管理I / O會話。該介面具有執行I / O相關操作所需的所有功能。
讓我們深入瞭解介面中的各種方法:
- getTransportMetadata()
- addListener()
- removeListener()
- isDisposing()
- isDisposed()
- dispose()
- getHandler()
- setHandler()
- getManagedSessions()
- getManagedSessionCount()
- getSessionConfig()
- getFilterChainBuilder()
- setFilterChainBuilder()
- getFilterChain()
- isActive()
- getActivationTime()
- broadcast()
- setSessionDataStructureFactory()
- getScheduledWriteBytes()
- getScheduledWriteMessages()
- getStatistics()
getTransportMetadata()
此方法返回IoAcceptor或IoConnector正在執行的傳輸元資料。典型的細節包括提供者名稱(nio,apr,rxtx),連線型別(無連線/面向連線)等。
addListener
允許新增IoServiceListener以偵聽與IoService相關的特定事件。
removeListener
刪除附加到此IoService的指定IoServiceListener。
isDisposing
此方法告知當前是否正在處理該服務。由於可能需要一段時間,因此瞭解服務的當前狀態很有用。
isDisposed
此方法告知服務是否已被處置。只有在已分配的所有資源都已釋放時,才會將服務視為已處置
dispose
此方法釋放服務已分配的所有資源。由於可能需要一段時間,使用者應使用isDisposing()和isDisposed()檢查服務狀態,以瞭解服務現在是否已完全處理。
關閉服務時務必呼叫dispose()!
getHandler
返回與服務關聯的IoHandler。
setHandler
設定將負責處理服務的所有事件的IoHandler。處理程式包含您的應用程式邏輯
getManagedSessions
返回此服務當前管理的所有會話的對映。託管會話是新增到服務偵聽器的會話。它將用於處理空閒會話和其他會話方面,具體取決於使用者新增到服務的偵聽器的型別。
getManagedSessionCount
返回此服務當前管理的所有會話的數量。
getSessionConfig
返回會話配置。
getFilterChainBuilder
返回Filter鏈構建器。如果想要新增一些將在建立會話時注入的新過濾器,這將非常有用。
setFilterChainBuilder
定義要與服務一起使用的過濾器鏈構建器。
getFilterChain
返回服務的當前預設Filter鏈。
isActive
判斷服務是否處於活動狀態。
getActivationTime
返回啟用此服務的時間。如果服務不再處於活動狀態,它將返回上次啟用此服務的時間。
broadcast
將給定訊息寫入所有託管會話。
setSessionDataStructureFactory
設定IoSessionDataStructureFactory,為此服務建立的新會話提供相關的資料結構。
getScheduledWriteBytes
返回計劃寫入的位元組數(即儲存在記憶體中的位元組,等待套接字準備寫入)。
getScheduledWriteMessages
返回計劃寫入的訊息數(即儲存在記憶體中的訊息,等待套接字準備寫入)。
getStatistics
返回此服務的IoServiceStatistics物件。
IoService詳細資訊
IoService是一個由MINA中最重要的兩個類實現的介面:
- IoAcceptor
- IoConnector
為了構建伺服器,您需要選擇IoAcceptor介面的實現。對於客戶端應用程式,您需要實現IoConnector介面的實現。
IoAcceptor
基本上,此介面由於accept()方法而命名,負責在客戶端和伺服器之間建立新連線。伺服器接受傳入的連線請求。
在某些時候,我們可以將此介面命名為“Server”(這是即將推出的MINA 3.0中的新名稱)。
由於我們可能處理多種傳輸(TCP / UDP / ...),因此我們為此介面提供了多個實現。你不太可能需要實現一個新的。
我們有很多實現類:
1.NioSocketAcceptor:非阻塞的Socket傳輸IoAcceptor
2.NioDatagramAcceptor:非阻塞UDP傳輸IoAcceptor
3.AprSocketAcceptor:阻塞Socket傳輸IoAcceptor,基於APR
4.VmPipeSocketAcceptor:in-VM IoAcceptor
只需挑選一個適合您需求的產品。
這是IoAcceptor介面和類的類圖:
IoConnector
由於我們必須為伺服器使用IoAcceptor,因此必須為客戶端實現IoConnector。同樣,我們有許多實現類:
1. NioSocketConnector:非阻塞Socket傳輸IoConnector
2. NioDatagramConnector:非阻塞UDP傳輸IoConnector
3. AprSocketConnector:基於APR的阻塞Socket傳輸IoConnector
4. ProxyConnector:提供代理支援的IoConnector
5. SerialConnector:用於序列傳輸的IoConnector
6. VmPipeConnector:VM內IoConnector
只需挑選一個適合您需求的產品
以下是IoConnector介面和類的類圖:
參考 : http://mina.apache.org/mina-project/userguide/ch3-service/ch3-service.html