第三章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