Mina Basics 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

posted @ 2018-11-10 23:35  天蓝隐湘  阅读(180)  评论(0编辑  收藏  举报