Mina学习笔记(4)IoService
来源:互联网 发布:途牛和携程哪个好 知乎 编辑:程序博客网 时间:2024/06/05 20:55
IoService 是一mina中非常重要的一个接口,他贯穿了整个mina 通信流程,建立远程连接、发送消息、连接等
IoService接口提供了一些连接常用接口,在server端IoAcceptor继承了IoService,在client端 IoConnector 继承了IoService 完成客户端功能,IoService是创建服务的顶层接口,无论客户端还是服务端,都是从它继承实现的。
下面将从几个方面介绍IoService
IoService 简介
IoSerivce 接口功能
IoAcceptor
IoConnector
1、IoService简介
IoService 提供了一个I/O服务和管理I/Osession的一个功能,是mina框架最重要的一个部分,为实现了IoService的类或接口提供了一个很强大的功能用于业务操作
接下来用一张思维图来说明 IoService 和 AbstractIoService 定义了哪些功能,以及在实际应用中有哪些可以扩展和实现的地方(画图工具XMind.)
可以答题总结IoService有几点功能
1、session 管理 : 创建、删除session、监测session 是否失效
2、过滤器链管理 :管理过滤器连,并且用户可以很方便的自定义创建过滤器
3、调用业务handler:在消息接收完成之后,调用业务handler进行处理
4、统计管理: 统计消息发送量(发送对象、字节....)
5、监听网络连接:一直监听绑定端口是否有新的链接
6、数据传输: 管理 server端和 client 数据传输
IoService 是 IoConnector's 和 IoAcceptor's 的父接口,他所定义的方法都是和I/O操作息息相关的,下面看下IoService定义了哪些方法,这些方法有些什么功能
2、IoService 定义方法
TransportMetadata
getTransportMetadata()
这个方法获取传输方式的元数据描述信息,也就是底层到底基于什么的实现,譬如:nio、apr 等。
void
addListener(IoServiceListener listener)
void
addListener(IoServiceListener listener)
这个方法可以为IoService 增加一个监听器,用于监听IoService 的创建、活动、失效、空闲、销毁,具体可以参考IoServiceListener 接口中的方法,这为你参与IoService 的生命周期提供了机会。
void
removeListener(IoServiceListener listener)
void
removeListener(IoServiceListener listener)
这个方法用于移除addListener的方法添加的监听器。
boolean
isDisposing()
boolean
isDisposing()
返回 isDisposed() 的状态,当且仅当 isDisposed() 方法被调用完毕才返回TRUE
boolean
isDisposed()
boolean
isDisposed()
返回service的状态,当且仅当service 的当前进程的所有资源已经释放完毕才返回 TRUE
void
dispose()
void
dispose()
这个方法用于释放service分配的资源,他可能要花费一些时间,用户应该调用 isDisposing() 和 isDisposed() 判断资源是否释放完成,当一个service被关闭的时候都应该调用该方法来进行资源释放
IoHandler
getHandler()
IoHandler
getHandler()
返回当前进程serbice关联的handler
void
setHandler(IoHandler handler)
void
setHandler(IoHandler handler)
这个方法用于向IoService 注册IoHandler,同时有getHandler()方法获取Handler
Map<Long,IoSession>
getManagedSessions()
Map<Long,IoSession>
getManagedSessions()
这个方法获取IoService 上管理的所有IoSession,Map 的key 是IoSession 的id。
int
getManagedSessionCount()
返回当前service 上绑定的session数量
IoSessionConfig
getSessionConfig()
IoSessionConfig
getSessionConfig()
这个方法用于获取IoSession 的配置对象,通过IoSessionConfig 对象可以设置Socket 连接的一些选项。
IoFilterChainBuilder
getFilterChainBuilder()
IoFilterChainBuilder
getFilterChainBuilder()
返回当前service的拦截器连,用户可以在改链上添加自己的过滤器,在service绑定之前
void
setFilterChainBuilder(IoFilterChainBuilder builder)
void
setFilterChainBuilder(IoFilterChainBuilder builder)
定义service的拦截器链
DefaultIoFilterChainBuilder
getFilterChain()
DefaultIoFilterChainBuilder
getFilterChain()
返回当前service默认的那个filterchain,是getFilterChainBuilder()
快捷方式
boolean
isActive()
boolean
isActive()
当前service是否在活动
long
getActivationTime()
long
getActivationTime()
返回这个service 被激活现在的时间,也就是service存活了多久. 如果这个service 不是活动状态咋返回它最好一次活动的时间
Set<WriteFuture>
broadcast(Object message)
Set<WriteFuture>
broadcast(Object message)
向所有注册了的session 广播消息
void
setSessionDataStructureFactory(IoSessionDataStructureFactory sessionDataStructureFactory)
void
setSessionDataStructureFactory(IoSessionDataStructureFactory sessionDataStructureFactory)
向新注册的service 放一些初始化的数据
int
getScheduledWriteMessages()
int
getScheduledWriteMessages()
返回信息数量 (这里的信息时在内存等待socket向外写的)
IoServiceStatistics
getStatistics()
IoServiceStatistics
getStatistics()
返回service的 IoServiceStatistics 对象.
3、IoService的实现
IoService 在mina中时一个很重要的接口,同时呢它又被两个接口所继承,分别是 IoAcceptor 和 IoConnector,分别代表了 服务端和客户端的连接,所有我们在建立server和client的时候必须要实现两个接口或者是继承他们的实现类或适配器类
IoAcceptor
主要负责在server和client之间建立一个新的连接或者是接收client发送的请求,据说在mina3.0 中会将这个接口命名为 Server。有时候我们可能不是基于某一种协议开发我们的应用,可能会用到多种协议开发(TCP/UDP...),那么这时候mina就为我们提供了很多其他的一些实现,用于不用的需求
IoAcceptor 有如下几个实现类
NioSocketAcceptor : 非阻塞的server端的Socket
NioDatagramAcceptor: 非阻塞的server端的Socket (基于UDP协议)
AprScoketAcceptor : 基于APR阻塞式的socket
VmPipeScoketAcceptor :基于管道的Socket
下面来具体看下他们的类关系图
IoConnector
IoConnector 是用于client端的一些方法定义,在写client端的时候必须实现改接口或者其实现类
同样mina也为我们提供了默认实现类(想见mina api文档):
NioScoketConnector : 非阻塞的client端的Socket
NioDatagramConnector: 基于UDP协议 非阻塞的client端的Socket
AprScoketConnector :基于Apr的scoket
ProxyConnector :提供代理的scoket
SerialScoket : 提供多个端口连接的scoket
VmPipeConnector:基于管道的socket
类关系图
4、IoAcceptor 创建服务端
首先在server端的时候要尽早的确立自己用哪种方式进行创建,基于那种协议进行开发,这样可以开始建立server了
(1) 建立server
public TcpServer() throws IOException { // 创建一个 TCP acceptor IoAcceptor acceptor = new NioSocketAcceptor(); // 为这个 accerptor 绑定一个用于业务处理的Hanlder实例
acceptor.setHandler(this); // 绑定一个端口用于监听client 请求
acceptor.bind(new InetSocketAddress(PORT));}
如果使用的是UDP协议你可以这样
IoAcceptor acceptor = new NioDatagramAcceptor();
(2)关闭连接
通过调用dispose() 方法来释放资源( 只为所有挂起的session处理完毕之后就释放资源)
acceptor.dispose(); // 已经标注为过期的
通过调用dispose(true)方法释放资源(等待每隔个线程上的session都完整的执行完毕之后才进行资源释放)
acceptor.dispose( true ) // 推荐使用这种方法
(3) IoService 状态
可通过 isActive()、isDisposed()、isDisposing() 来获取IoService的状态
(4)绑定业务操作的hanlder
在接收完client传送过来的数据之后,可以用sethandler() 这个方法绑定了的业务类进行操作
(5)过滤器
可以获取一些mina提供的默认的过滤器,并在过滤器链的末尾开端等加上一些自定义的过滤器
DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
chain.addLast("logger", new LoggingFilter());
以上方式为在进入service之后才加的过滤器的,有时候我们想在进入IoService之前就加上Filter,那么可以这样
// Add a logger filterDefaultIoFilterChainBuilder chain = new DefaultIoFilterChainBuilder();chain.addLast("logger", new LoggingFilter());
// 为service创建一个过滤器 acceptor.setFilterChainBuilder(chain);
- Mina学习笔记(4)IoService
- Mina 学习笔记 Ioservice学习
- Apache Mina 学习笔记(3) - IoService
- Apache Mina的IoService接口学习笔记
- MINA学习之IoService
- mina学习笔记三:一切的源头IoService
- mina学习笔记三:一切的源头IoService
- mina学习笔记三:一切的源头IoService
- MINA 框架之IoService学习
- apache mina 学习(五)-----IoService接口及实现
- mina 之IoService(翻译)
- Apache MINA 框架之IoService介绍
- Mina源码分析——IoService
- Mina源码分析——IoService
- (二)Mina源码解析之IoService
- Apache Mina 学习笔记(4)-Session
- Apache Mina 学习笔记(4) - Filters
- mina 学习笔记一
- ENVI下DOM数据生产专题之图像增强
- xcode 4.5.2 中使用 ios 6 skd iOS/Xcode异常:reason: ‘Could not instantiate class named NSLayoutConstraint’
- 使用CoreData的轻量级自动数据迁移
- 回顾我的2012
- 动态MBean
- Mina学习笔记(4)IoService
- Android-log
- 多线程的使用——中断线程详解(Interrupt)
- How to Report Bugs Effectively
- hdu 2037 今年暑假不AC
- CF 18A(近似直角三角形判断+向量直角公式+switch+istream&(..&P a))
- 使用Platform Builder配置Windows CE操作系统
- 搞笑的宝宝照片
- FTP方式实现从FTP服务器取文件到SAP 服务器目录