在MINA中,IoService接口提供基础的I/O服务,并负责管理I/O的Sessoin。它是MINA架构中最核心的部分之一,实现IoService的子接口和类,负责了多数低级别I/O操作的处理。
IoService的思维导图:
我们将会来看IoService接口的职责,以及它的实现类AbstractIoService的情况。第一次使用思维导图的方式来阐释会略有不同,在这之后,我们将深入内部其运作的机制。这个思维导图是通过XMind绘制的。
职责:
如上图所示,IoService接口有很多职责:
- 会话管理:创建和删除session,并监测session的空闲
- 过滤器链管理:处理过滤器链,允许用户更改过滤器链
- 处理程序调用:当有新的消息被接收等情况发生时就调用处理程序
- 统计管理:更新消息发送,数据流发送或其他相关信息的数量
- 监听器管理:管理用户可以设置的监听器
- 通信管理:处理客户端和服务端的数据传输
所有这些方面的情况将在后续章节详细描述。
IoService接口的详细信息:
IoService是所有提供I/O服务和管理I/O会话的IoConnector和IoAcceptor的父接口,它提供了执行I/O相关操作所需的所有功能。
让我们来深入的看下该接口的不同方法:
getTransportMetadata()
addListener()
removeListener()
isDisposing()
isDisposed()
dispose()
getHandler()
setHandler()
getManagedSessions()
getManagedSessionCount()
getSessionConfig()
getFilterChainBuilder()
setFilterChainBuilder()
getFilterChain()
isActive()
getActivationTime()
broadcast()
setSessionDataStructureFactory()
getScheduledWriteBytes()
getScheduledWriteMessages()
getStatistics()
(补:下面“补”的部分,主要是参考了MINA-2.0.7的API)
该方法返回正在运行的IoAcceptor或IoConnector传输相关的元数据TransportMetadata,典型的信息如包括服务提供者的名字(nio,apr,rxtx)和连接类型(可靠连接和不可靠连接)等。
addListener
该方法允许通过添加一个IoServiceListener来监听IoService相关的特殊事件
removeListener
该方法可以移除一个IoService附属的特殊的IoServiceListener
isDisposing
该方法返回服务资源目前是否在释放,它可能需要一小段时间,该方法用于获取当前的服务状态。(补:只有当方法dispose()被调用时才会返回true)
isDisposed
该方法返回服务资源是否已经被释放,一个服务只有在它所申请的所有资源都被释放掉之后,才被认为是已释放状态。(补:只有当该服务相关所有的资源都已经被释放才会返回true)
dispose
该方法会释放掉所有该服务申请的资源,它可能会执行一小段时间,用户需要通过isDisposing()和isDisposed方法来确认该服务是否已经执行完成。当一个服务被关闭时总是会调用该方法。
getHandler
该方法返回该服务的处理者IoHandler
setHandler
该方法用于设置服务的处理者IoHandler,这个被设置的IoHandler包含应用的业务逻辑,并将负责处理该服务的所有的事件
getManagedSessions
该方法返回该服务当前所管理的所有session组成的一个Map(补:Map的Key是session的ID),被管理的session是被认为已经添加到服务的监听器中的session。该方法主要用于处理空闲session,而session其他方面的处理则由用户为该服务添加的其他相关监听器来处理。
getManagedSessionCount
该方法返回服务当前所管理的所有的session的总数量
getSessionConfig
该方法返回session的配置(补:当一个服务创建一个新session时会给session默认分配好配置)
getFilterChainBuilder
该方法返回该服务的过滤器链建造器
setFilterChainBuilder
该方法用于设置该服务的过滤器链建造器(补:过滤器链构造器
IoFilterChainBuilder
会在该服务创建任何一个session时为该session生成一个
IoFilterChain
个,如果这里设置为null,则会将其设置为默认的不包含任何过滤器的空的
DefaultIoFilterChainBuilder
)。
getFilterChain
该方法返回该服务的当前的过滤器链建造器【补:该方法是 (DefaultIoFilterChainBuilder
) getFilterChainBuilder()
的简写版本,要注意的是返回的对象不是一个IoFilterChain,而是
DefaultIoFilterChainBuilder
,修改这个返回的建造器不会影响所有已存在的session,因为
IoFilterChainBuilder
只会在新建session时产生作用】
isActive
该方法返回该服务是否处于激活状态
getActivationTime
该方法返回该服务被激活的时间;如果该服务当前处于非激活状态,则返回最后一次被激活的时间。
broadcast
该方法将给定消息广播给该服务所管理的所有客户端
setSessionDataStructureFactory
该方法用于设置接口IoSessionDataStructureFactory——该接口主要用于在该服务创建一个新Session时为其提供相关的数据结构
getScheduledWriteBytes
该方法返回该服务预定将要写的字节的总数量(即存在内存中的等待Socket去写的字节总数)
getScheduledWriteMessages
该方法返回该服务预定将要写的消息的总数量(即存在内存中的等待Socket去写的消息总数)
getStatistics
该方法返回该服务的IoServiceStatistics对象(补:该对象用于提供该服务的使用情况统计信息)