您的位置:首页 > 其它

Mina框架简单介绍<适合初学者了解>

2014-10-10 15:25 531 查看
作为一个mina学习新手,自己整理了一些mina框架介绍的资料,新手出品,请多多指教!

mina的官方网址: https://mina.apache.org/mina-project/userguide/user-guide-toc.html
1. 应用层次:

如下图:



可以看出mina位于应用程序和底层网络传输之间,它不关心底层网络数据如何传输,只负责接收底层数据,过滤并转换为Java对象提供给我们的应用程序,然后把应用程序响应值过滤并转换为底层识别的字节,提供给底层传输。

2. 通信流程:

mina 通信流程图



可以很清晰看出mina主要有三个主要的业务接口:IoService,IoFilter 和 IoHandler

IoService:这个接口在一个线程上负责套接字的建立,拥有自己的Selector,监听是否有连接被建立。

IoFilter:这个接口定义一组拦截器,这些拦截器可以包括日志输出、黑名单过滤、数据的编码(write 方向)与解码(read 方向)等功能,其中数据的encode 与decode是最为重要的、也是你在使用Mina 时最主要关注的地方。

IoHandler:这个接口负责编写业务逻辑,也就是接收、发送数据的接口。

总的来说创建一个基于mina框架的应用分为三个步骤: 创建连接(IoService))——>添加消息过滤器(IoFilter)——>添加业务处理(IoHandler)

3 Mina中的server和client

mina中server和client没有多大区别都是通过Ioservice 建立连接和通信的,来看下具体流程

(1).Server :

流程如下图:



一般地,服务端会有一个端口来监听client的请求/packet,并且为每个connect建立一个session(无论是基于TCP/IP协议还是UDP协议),Server端主要通过IoAccptor建立连接。

IOAcceptor 继承自IoService 主要用于监听网络进来的connecter和packet,对于一个新的连接首先会创建一个session,连接创建之后请求消息会从你的地址和监听的端口中进来并封装,所有的packet接收完成之后如上图所示,过滤器链会对其进行过滤,过滤完成之后会交给IoHandler进行业务处理,这就是一个请求到达server后mina的处理流程。

(2)client :

一般地,client端主要功能为何server建立连接发送消息和处理server传回的消息,client主要通过IoConnector建立连接,流程如下



<1>、client端首先通过IoConector与server建立连接,初始化并绑定改到server,连接建立后会和一个session绑定

<2>、建立连接之后,如果要发送数据到server那么所发送的数据也会经过filter进行过滤器链之后再发送到server

<3>、当有数据从server返回的时候,再数据全部接收完成之后,数据再经过IoFilter过滤器链最后交给IoHandler处理

4. IOService类图:

服务端IOService类图:



客户端IOService类图:



说明:
IOAcceptor:服务器端接口,用来建立,监听,等待连接。
IOConnector:客户端接口,用来发起连接。
根据不同的数据类型,IOAcceptor和IOConnector具有不同的实现。
IOService比较重要的方法:
void setHandler(IoHandler handler):设置业务处理器
DefaultIoFilterChainBuilder getFilterChain():获得处理器链

5. IOSession类图



IOSession表示一个网络会话,具有不同类型的实现。可以用来保存自定义的属性,也可以在各层次间交换数据。与HTTP的session比较相似。
IOSession比较重要的方法:
CloseFuture close(boolean immediately):参数为true的话立即关闭当前会话,false表示数据都发送完毕后再关闭。
Object getAttribute(Object key):获取键位key的值。
Object setAttribute(Object key, Object value):设置键为key,值为value的对象到会话中。
6. IOFilter
IOFilter在IOService和IOHandler之间,请求在到达IO处理器之前,要经过若干个过滤器处理,比如编码转换,日志记录,权限控制等。IOFilter设计的模式主要是责任链模式,它能很好的满足横切需求,也能组成过滤器链,如果过滤不通过则终止请求,不再发送到IO处理器。
7. IOHandler
IOHandler是具体的业务逻辑处理接口,请求经过过滤器后到达。IOHandler有若干的方法会在不同的阶段被调用。一般情况只需要将自己的类继承IoHandlerAdapter并重写相应的方法即可完成功能,IoHandlerAdapter具有IOHandler的空实现。
sessionCreated--新连接建立的时候触发
sessionOpened--新连接打开的时候触发,在sessionCreated之后被调用。
sessionClosed--连接被关闭的时候触发。
sessionIdle--连接被闲置的时候触发。
exceptionCaught--有异常抛出但是没有被catch的时候触发。
messageReceived--有消息接收的时候触发。
messageSent--消息发送的时候触发。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: