MINA框架学习笔记

来源:互联网 发布:阿里云手机系统root 编辑:程序博客网 时间:2024/04/30 10:56

由于工作需要和个人兴趣,在使用RXTX编写完串口通信测试后,了解到MINA框架已经继承了RXTX串口通信,并可实现与Spring的框架无缝对接,工作中还需要MINA作为信息采集的中间件,故开始尝试学习MINA框架的编程使用。

1.MINA框架的简介了解。
MINA框架为Apache 下的一个网络通讯服务框架,提供了基于了java nio在TCP/IP和UDP/IP下的事件驱动的异步API,摘自MINA官网:http://mina.apache.org/

Apache MINA is a network application framework which helps users develop high performance and high scalability network applications easily. It provides an abstract event-driven asynchronous API over various transports such as TCP/IP and UDP/IP via Java NIO.

其他MINA说明网上随便搜就有很多,不在赘述。

2.MINA框架的关键类和方法
这里由于英文能力和时间有限,没有看太多官网的介绍,在其他博客中有详细介绍,摘自:http://blog.csdn.net/zhangyaoming2004/article/details/7349447
这里写图片描述
IoAccepter 相当于网络应用程序中的服务器端
IoConnector 相当于客户端
IoSession 当前客户端到服务器端的一个连接实例
IoHandler 业务处理逻辑
IoFilter 过滤器用于悬接通讯层接口与业务层接口
详细方法和介绍可查看官方API:http://mina.apache.org/mina-project/apidocs/index.html

3.框架测试笔记-建立的MINA服务
参考文档为官方文档-Quick Start Guide(快速入门指南):
http://mina.apache.org/mina-project/quick-start-guide.html
详细的代码及介绍该文档都有,不再记录,一下为测试中发现的注意点:
(1)创建服务端对象IoAccepetor:
new NioSocketAcceptor();为创建基于TCP/IP的socket连接服务。在网络其他的文档博客中可能出现过new SocketAcceptor();查看过官方API后可知,SocketAcceptor仅NioSocketAcceptor的父接口。还可创建基于其他数据通信的连接服务,尚未测试。
(2)关于数据过滤类IoFilter:
用于对请求和发送的事件或数据进行预处理和加工。
API中已提供的IoFilter:
new LoggingFilter();log通信过程,根据官方API解释记录在 LogLevel.INFO中
new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName(
“UTF-8”)));将来自客户端输入的信息转换成一行行的文本后传递给 IoHandler
其他IoFilter后续提供。
(3)事件业务处理接口IoHandler:
该接口定义了对MINA事件驱动中的7种事件的处理,分别为:
exceptionCaught:异常处理,在官网介绍中这个方法强烈建议重写,由于MINA本身框架中并没有对异常的处理,这里若不进行处理会造成异常信息的丢失。
sessionCreated:session创建
sessionOpened:session打开,这两个方法几乎是同时调用
messageReceived:消息接收,参数中的Object message为接收到的信息内容,这里为已经经过IoFilter预处理过的消息内容,即该信息内容既可为未处理的IoBuffer格式(byte[]),也可为自定义IoFilter处理后的自定义类格式。这里可以直接调用session.write(object)方法发送回复。(任何位置write后也都将经过定义过的IoFilter处理)
messageSent:消息发送,调用write后触发。
inputClosed:通道关闭,官方解释为处理half-duplex TCP通道的关闭。
sessionIdle:session空闲,在定义session配置中的空闲时间后,通道建立一段时间内未有读写动作,即为session空闲,触发该方法。
sessionClosed:session关闭。
在使用中,继承IoHandlerAdapter类,可有选择的重写部分方法。
(4)连接的抽象表示IoSession:
session可以理解为服务端与客户端的一个连接(可类比JAVA WEB中session的概念),包含了连接的信息和属性配置。
IoSession方法记录
session.write(object);使用session发送数据
session.close(boolean);这里使用close(boolean)而不是close(),原因为在MINA2.0中已经废弃第二种方法。参数true的含义为直接关闭session,丢弃未完成的写操作;参数false为异步关闭,等待完成未完成的写操作关闭后返回CloseFuture
Session配置类IoSessionConfig
通过IoAcceptor.getSessionConfig();获得。用于配置IoSession
setReadBufferSize(2048);设置读取缓存大小
setIdleTime(IdleStatus.BOTH_IDLE, 10);设置session空闲超时时间

0 0
原创粉丝点击