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

作为一个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--消息发送的时候触发。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值