1. 程式人生 > >Mina文件 03-IoService

Mina文件 03-IoService

 第三章IoService

MINA IoService - 如應用程式體系結構一章所示,是支援所有IO服務的基類,可以是伺服器端,也可以是客戶端。

它將處理與您的應用程式以及遠端對等方的所有互動,傳送和接收訊息,管理會話,連線等。

它是一個介面,實現為伺服器端的IoAcceptor和客戶端的IoConnector。

我們將在這些章節中解釋這些介面:

  1. IoService簡介
  2. IoService詳細資訊
  3. IoAcceptor
  4. IoConnector

 

IoService簡介

IoService提供基本的I / O服務並管理MINA中的I / O會話。它是MINA Architecture最重要的部分之一。 IoService和子介面的實現類是處理大多數低階I / O操作的地方。

IoService思維導圖

讓我們試著看看IoService的職責是什麼,它實現了AbstractIoService類。讓我們採用略微不同的方法,首先使用思維導圖,然後跳入內部工作。思維導圖是使用XMind建立的。

 

 

 

職責

如上圖所示,IoService有許多責任:

  1. 會話管理:建立和刪除會話,檢測空閒。
  2. 過濾鏈管理:處理過濾鏈,允許使用者即時更改鏈
  3. 呼叫處理程式:在收到一些新訊息時呼叫處理程式等
  4. 統計管理:更新發送的訊息數,傳送的位元組數以及許多其他訊息
  5. 監聽管理:管理可以設定的監聽
  6. 通訊管理:處理雙方的資料傳輸

 

所有這些方面將在以下章節中描述。

 

介面細節

         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