Mina IoService

 

 一: IOService的职责

 

1、session 管理 : 创建、删除session、监测session 是否失效

2、过滤器链管理 :管理过滤器连,并且用户可以很方便的自定义创建过滤器

3、调用业务handler:在消息接收完成之后,调用业务handler进行处理

4、统计管理: 统计消息发送量(发送对象、字节....)

5、监听网络连接:一直监听绑定端口是否有新的链接

6、数据传输: 管理 server端和 client 数据传输

TransportMetadata

getTransportMetadata()

这个方法返回运行中的IoAcceptor或IoConnector的传输元数据。这些元数据包括服务提供者名(nio, apr, rxtx),连接类型(面向连接的/面向非连接的)等。

void

addListener(IoServiceListener listener)

这个方法可以为IoService 增加一个监听器,用于监听IoService 的创建、活动、失效、空闲、销毁,具体可以参考IoServiceListener 接口中的方法,这为你参与IoService 的生命周期提供了机会。

void

removeListener(IoServiceListener listener)

这个方法用于移除addListener的方法添加的监听器。

boolean

isDisposing()

这个方法可以告诉我们IoService是不是正在被销毁。销毁过程可能要持续一段时间,所以在想要得到IoService的当前状态时这个方法很有用。

boolean

isDisposed()

这个方法可以告诉我们IoService是不是已经被销毁。只有当IoService释放掉所有资源后才算是被销毁完毕。

void

dispose()

这个方法释放掉IoService分配到的所有资源。因为释放过程可能会持续一段时间, 用户可以通过isDisposing()方法检查IO服务的状态, 通过isDisposed()方法判断IO服务是否销毁完毕。

请在关闭IO服务器时一定要调用dispose()。

IoHandler

getHandler()

返回当前进程serbice关联的handler

void

setHandler(IoHandler handler)

这个方法用于向IoService 注册IoHandler,同时有getHandler()方法获取Handler

Map<Long,IoSession>

getManagedSessions()

这个方法获取IoService 上管理的所有IoSession,Map 的key 是IoSession 的id。

int

getManagedSessionCount()

返回当前service 上绑定的session数量

IoSessionConfig

getSessionConfig()

这个方法用于获取IoSession 的配置对象,通过IoSessionConfig 对象可以设置Socket 连接的一些选项。

IoFilterChainBuilder

getFilterChainBuilder()

返回当前service的拦截器连,用户可以在改链上添加自己的过滤器,在service绑定之前

void

setFilterChainBuilder(IoFilterChainBuilder builder)

定义service的拦截器链

DefaultIoFilterChainBuilder

getFilterChain()

返回当前service默认的那个filterchain,是getFilterChainBuilder() 快捷方式

boolean

isActive()

当前service是否在活动

long

getActivationTime()

返回这个service 被激活现在的时间,也就是service存活了多久.  如果这个service 不是活动状态咋返回它最好一次活动的时间

Set<WriteFuture>

broadcast(Object message)

向所有注册了的session 广播消息

void

setSessionDataStructureFactory(IoSessionDataStructureFactory sessionDataStructureFactory)

 向新注册的service 放一些初始化的数据

int

getScheduledWriteMessages()

返回信息数量 (这里的信息时在内存等待socket向外写的)

IoServiceStatistics

getStatistics()

返回service的 IoServiceStatistics 对象.

 

 

二:先看下IOService的类图结构

 

   黄色的代表接口,蓝色的抽象类,绿色的代表实际的类

   NioSocketAcceptor :     非阻塞的server端的Socket

   NioDatagramAcceptor: 非阻塞的server端的Socket  (基于UDP协议)

   AprScoketAcceptor  : 基于APR阻塞式的socket

   VmPipeScoketAcceptor  :基于管道的Socket

 

   NioScoketConnector : 非阻塞的client端的Socket

   NioDatagramConnector: 基于UDP协议 非阻塞的client端的Socket

   AprScoketConnector :基于Apr的scoket

   ProxyConnector :提供代理的scoket

   VmPipeConnector:基于管道的socket

  

  三.状态

    你可以通过以下方法获得IoService的状态:

    isActive() : 如果服务可以接受进来的请求,这个方法返回true

    isDisposing() : dispose()被调用后这个方法返回true。它不能告诉你服务是否真正被销毁了(一些会话可能还会被处理)

    isDisposed() : 当dispose(boolean)方法被调用后, 这个方法返回true,表示所有的线程都停止了。

    销毁IOService

    acceptor.dispose();   // 停止服务,并等待所有会话进入非活动状态  

    acceptor.dispose( true );   // 停止服务,并等待所有会话都处理完毕。  

   

 

 

猜你喜欢

转载自labreeze.iteye.com/blog/2246421