一: 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 ); // 停止服务,并等待所有会话都处理完毕。