您现在的位置:主页 > 高级应用 > >

mina2.0.9教程之IoService接口



时间: 2015-06-18 10:08     来源 : cnicys      点击:

关键词: mina    mina教程    mina实例   


目录页:《mina2.0.9教程


IoService是创建服务的顶层接口,无论服务端还是客户端,都是从它继承实现的。在进入该篇前,建议先看下mina的架构流程图
内容来自www.itxxz.com


IoService提供了最基础的I/O 服务及I/O session的管理,在整个mina架构中地位举足轻重。

下面我们通过一张思维导图来看下IoService的作用:




主要作用

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

内容来自www.itxxz.com

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

内容来自www.itxxz.com

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

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

IT学习者(www.itxxz.com)

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

内容来自www.itxxz.com

6、数据传输: 管理 server端和 client 数据传输 IT学习者(www.itxxz.com)

IoService 是 IoConnector's 和 IoAcceptor's  的父接口,他所定义的方法都是和I/O操作息息相关的,下面看下IoService定义了哪些方法,这些方法有些什么功能 官网:http://www.itxxz.com




IoService定义的方法


TransportMetadata 
官网:http://www.itxxz.com
getTransportMetadata() copyright www.itxxz.com 

这个方法获取传输方式的元数据描述信息,也就是底层到底基于什么的实现,譬如:nio、apr 等。
  IT学习者(www.itxxz.com)

void

内容来自www.itxxz.com

addListener(IoServiceListener listener) 官网:http://www.itxxz.com

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

IT学习者(www.itxxz.com)

void

内容来自www.itxxz.com

removeListener(IoServiceListener listener) itxxz.com

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

IT学习者(www.itxxz.com)

boolean copyright www.itxxz.com

isDisposing()

copyright www.itxxz.com

返回 isDisposed() 的状态,当且仅当 isDisposed() 方法被调用完毕才返回TRUE
 

IT学习者(www.itxxz.com)

boolean itxxz.com

isDisposed() IT学习者(www.itxxz.com)

返回service的状态,当且仅当service 的当前进程的所有资源已经释放完毕才返回 TRUE
  本文来自www.itxxz.com

void IT学习者(www.itxxz.com)

dispose()

itxxz.com

这个方法用于释放service分配的资源,他可能要花费一些时间,用户应该调用 isDisposing() 和 isDisposed() 判断资源是否释放完成,当一个service被关闭的时候都应该调用该方法来进行资源释放
 

copyright www.itxxz.com

IoHandler itxxz.com

getHandler()

内容来自www.itxxz.com

返回当前进程serbice关联的handler

itxxz.com

void

内容来自www.itxxz.com

setHandler(IoHandler handler)

IT学习者(www.itxxz.com)

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

itxxz.com

Map<Long,IoSession> 官网:http://www.itxxz.com

getManagedSessions() 官网:http://www.itxxz.com

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

int

官网:http://www.itxxz.com

getManagedSessionCount()

本文来自www.itxxz.com

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

copyright www.itxxz.com

IoSessionConfig 本文来自www.itxxz.com

getSessionConfig()

官网:http://www.itxxz.com

这个方法用于获取IoSession 的配置对象,通过IoSessionConfig 对象可以设置Socket 连接的一些选项。
  IT学习者(www.itxxz.com)

 

IoFilterChainBuilder copyright www.itxxz.com

getFilterChainBuilder()

itxxz.com

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

IT学习者(www.itxxz.com)

void

IT学习者(www.itxxz.com)

setFilterChainBuilder(IoFilterChainBuilder builder)

官网:http://www.itxxz.com

定义service的拦截器链

本文来自www.itxxz.com

DefaultIoFilterChainBuilder 本文来自www.itxxz.com

getFilterChain() itxxz.com

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

官网:http://www.itxxz.com

boolean 本文来自www.itxxz.com

isActive() 本文来自www.itxxz.com

当前service是否在活动
 

内容来自www.itxxz.com

long

copyright www.itxxz.com

getActivationTime() copyright www.itxxz.com

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

内容来自www.itxxz.com

Set<WriteFuture> 本文来自www.itxxz.com

broadcast(Object message) 本文来自www.itxxz.com

向所有注册了的session 广播消息
  官网:http://www.itxxz.com

 

void

itxxz.com

setSessionDataStructureFactory(IoSessionDataStructureFactory sessionDataStructureFactory) 内容来自www.itxxz.com

   

 向新注册的service 放一些初始化的数据
  本文来自www.itxxz.com

int 本文来自www.itxxz.com

getScheduledWriteMessages()

内容来自www.itxxz.com

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

IoServiceStatistics

本文来自www.itxxz.com

getStatistics() 内容来自www.itxxz.com

返回service的 IoServiceStatistics 对象.

官网:http://www.itxxz.com

  官网:http://www.itxxz.com

IoService的实现

IoService 在mina中时一个很重要的接口,同时呢它又被两个接口所继承,分别是 IoAcceptor 和 IoConnector,分别代表了 服务端和客户端的连接,所有我们在建立server和client的时候必须要实现两个接口或者是继承他们的实现类或适配器类 官网:http://www.itxxz.com

IoAcceptor
  copyright www.itxxz.com

  主要负责在server和client之间建立一个新的连接或者是接收client发送的请求,据说在mina3.0 中会将这个接口命名为 Server。有时候我们可能不是基于某一种协议开发我们的应用,可能会用到多种协议开发(TCP/UDP...),那么这时候mina就为我们提供了很多其他的一些实现,用于不用的需求 官网:http://www.itxxz.com

IoAcceptor 有如下几个实现类 IT学习者(www.itxxz.com)

  NioSocketAcceptor :     非阻塞的server端的Socket copyright www.itxxz.com

  NioDatagramAcceptor: 非阻塞的server端的Socket  (基于UDP协议) IT学习者(www.itxxz.com)

  AprScoketAcceptor  : 基于APR阻塞式的socket

copyright www.itxxz.com

  VmPipeScoketAcceptor  :基于管道的Socket

本文来自www.itxxz.com


下面来具体看下他们的类关系图


IoConnector 本文来自www.itxxz.com

  IoConnector 是用于client端的一些方法定义,在写client端的时候必须实现改接口或者其实现类 内容来自www.itxxz.com

同样mina也为我们提供了默认实现类(想见mina api文档):

官网:http://www.itxxz.com

  NioScoketConnector : 非阻塞的client端的Socket IT学习者(www.itxxz.com)

  NioDatagramConnector: 基于UDP协议 非阻塞的client端的Socket 官网:http://www.itxxz.com

  AprScoketConnector :基于Apr的scoket itxxz.com

  ProxyConnector :提供代理的scoket

IT学习者(www.itxxz.com)

  SerialScoket : 提供多个端口连接的scoket copyright www.itxxz.com

  VmPipeConnector:基于管道的socket
  IT学习者(www.itxxz.com)

类关系图



IT学习者(www.itxxz.com)


IoAcceptor 创建服务端
 

IT学习者(www.itxxz.com)

 首先在server端的时候要尽早的确立自己用哪种方式进行创建,基于那种协议进行开发,这样可以开始建立server了

本文来自www.itxxz.com

(1) 建立server
 

IT学习者(www.itxxz.com)

  1. public TcpServer() throws IOException {  
  2.     // 创建一个 TCP acceptor  
  3.     IoAcceptor acceptor = new NioSocketAcceptor();  
  4.   
  5.     // 为这个 accerptor 绑定一个用于业务处理的Hanlder实例

 

内容来自www.itxxz.com

  1. acceptor.setHandler(this);  
  2. // 绑定一个端口用于监听client 请求

IT学习者(www.itxxz.com)



  1. acceptor.bind(new InetSocketAddress(PORT));  

如果使用的是UDP协议你可以这样

copyright www.itxxz.com


 
内容来自www.itxxz.com

  1. IoAcceptor acceptor = new NioDatagramAcceptor();  

本文来自www.itxxz.com


(2)关闭连接
itxxz.com

通过调用dispose() 方法来释放资源( 只为所有挂起的session处理完毕之后就释放资源)
 

IT学习者(www.itxxz.com)

  1. acceptor.dispose();  // 已经标注为过期的  

copyright www.itxxz.com

通过调用dispose(true)方法释放资源(等待每隔个线程上的session都完整的执行完毕之后才进行资源释放)
  itxxz.com

  1. acceptor.dispose( true ) // 推荐使用这种方法  

(3) IoService 状态

itxxz.com

可通过 isActive()、isDisposed()、isDisposing() 来获取IoService的状态
  copyright www.itxxz.com

(4)绑定业务操作的hanlder 官网:http://www.itxxz.com

在接收完client传送过来的数据之后,可以用sethandler() 这个方法绑定了的业务类进行操作
 

itxxz.com

(5)过滤器

官网:http://www.itxxz.com

可以获取一些mina提供的默认的过滤器,并在过滤器链的末尾开端等加上一些自定义的过滤器
  itxxz.com

 
 
  1. DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();  
copyright www.itxxz.com

 
 
  1. chain.addLast("logger"new LoggingFilter());
copyright www.itxxz.com

以上方式为在进入service之后才加的过滤器的,有时候我们想在进入IoService之前就加上Filter,那么可以这样

  1. // Add a logger filter  
  2. DefaultIoFilterChainBuilder chain = new DefaultIoFilterChainBuilder();  
  3. chain.addLast("logger"new LoggingFilter());

内容来自www.itxxz.com


  1. // 为service创建一个过滤器   
  2. acceptor.setFilterChainBuilder(chain);






文章除注明转载外,均为IT学习者原创或编译
欢迎任何形式的转载,但务必请以超链接形式注明出处
本文出自:cnicys
链接地址:http://blog.csdn.net/cnicys/article/details/8529964



微信公众号:喝咖啡的螃蟹

喝咖啡的螃蟹
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
  • mrc185
    2017-03-21 17:32:35发表

    新春红包 时时博 澳门钻石 金沙合法网投 网络娱乐城 金沙中国 新澳门娱乐城 水晶宫 企鹅3447473623

  • 美腿丝
    2017-03-20 13:48:14发表

    美眉美足网ﯲ非主流丝袜ﯲ穿丝袜做ﯲ街拍丝袜脚ﯲ meinv95.com

  • 货源网
    2017-03-20 00:07:21发表

    货源网 Promitoon(普米顿) KENZO(凯卓) POLO(保罗) Noble Family(贵族世家) FS(梵仕) Montblanc(万宝龙) Korean version(韩版) Wei信:LoveMeJck