Apache Mina-1
一、mina基础知识:
Mina 官方网站:(http://mina.apache.org/)
1.1、Apache Mina是一个能够帮助用户开发高性能和高伸缩性网络应用程序的框架。它通过Java nio技术基于TCP/IP和UDP/IP协议提供了抽象的、事件驱动的、异步的API。
Apache MINA 也称为:
● NIO 框架库
● 客户端服务器框架库
● 一个网络套接字库
1.2、MINA框架的特点有:基于java NIO类库开发;采用非阻塞方式的异步传输;事件驱动;支持批量数据传输;支持TCP、UDP协议;控制反转的设计模式(支持Spring);采用优雅的松耦合架构;可灵活的加载过滤器机制;单元测试更容易实现;可自定义线程的数量,以提高运行于多处理器上的性能;采用回调的方式完成调用,线程的使用更容易。
1.3、Mina的框架
当远程客户首次访问采用MINA编写的程序时,IoAcceptor作为线程运行,负责接受来自客户的请求。当有客户请求连接时,创建一个IoSession,该IoSession与IoProcessor、SocketChannel以及IOService联系起来。IoProcessor也作为另外一个线程运行,定时检查客户是否有数据到来,并对客户请求进行处理,依次调用在IOService注册的各个IoFilter,最后调用IoHandler进行最终的逻辑处理,再将处理后的结果Filter后返回给客户端。
1.4、Mina 应用层示意图如下所示:
Mina处于中间层,它不关心底层网络数据如何传输,只负责接收底层数据,过滤并转换为Java对象提供给我们的应用程序,然后把应用程序响应值过滤并转换为底层识别的字节,提供给底层传输;Mina是底层数据传输和用户应用程序交互的接口。
1.5、Mina 内部流程
如下图所示:
1.6、Mina 工作流程
如下图所示:
Mina的核心接口:
1 IoService: 创建服务对象(客户端或服务端)
2 IOFilter: 数据过滤(编码解码等)
3 IoHandler: 业务处理
二.MINA框架具体技术
2.1 MINA框架的常用类
1.类NioSocketAcceptor
用于创建服务端监听
2.类NioSocketConnector
用于创建客户端连接;
3.类IoSession
用来保存会话属性和发送消息;可以理解为服务器与客户端的特定连接,该连接由服务器地址、端口以及客户端地址、端口来决定。客户端发起请求时,指定服务器地址和端口,客户端也会指定或者根据网络路由信息自动指定一个地址、自动分配一个端口。这个地址、端口对构成一个Session。
IoSession是服务器端对这种连接的抽象,MINA对其进行了封装,定义了IoSession接口,用来代表客户端与服务器的连接,在服务器端通过IoSession,实现对客户端的操作、绑定与客户端有关的信息与对象。通过利用Session的这个概念,编写程序时就可以在服务器端非常方便地区分出是当前处理的是哪个客户端的请求、维持客户端的状态信息、可以实现客户端之间相互通讯。
IoSession提供以下一些常用方法:
(1)setAttribute(Object key, Object value) getAttribute(Object key)
功能说明:设置/获取用户定义的属性,与web应用中的session类方法setAttribute,getAttribute方法类似
(2)getRemoteAddress()
功能说明:获取远程客户端地址。
(3)getId()
功能说明:获取Session的Id
(4)getCreationTime()
功能说明:获得创建时间
(5)getLastIoTime()
功能说明:获得上次IO时间
(6) getConfig()
功能说明:获得配置信息。
(7)write(Object message)
功能说明:将数据发送给客户端。
(8)close()
功能说明:关闭Session。
(说明:可以在Session中发送数据,但是Session没有提供读取数据的方法,读取数据通过解码器中的decode或者IoHandler中messageReceived方法)
4.类IoHandlerAdapter
从以上MINA框架简图可以看出,对来自客户端数据最终的业务处理是在IoHandler中处理的。IoHandler封装了来自客户端不同事件的处理,通过实现相应的方法,当该事件发生时,IoHandler中的方法就会被触发执行。
用于定义业务逻辑,常用的方法有:
(1)void exceptionCaught(IoSession session, Throwable cause)
功能说明:有异常发生时被触发。
(2)void messageReceived(IoSession session, Object message)
功能说明:有消息到达时被触发,message代表接收到的消息。
(3)void messageSent(IoSession session, Object message)
功能说明:发送消息时时被触发,即在调用IoSession.write()时被触发,message代表将要发送的消息。
(4)void sessionClosed(IoSession session)
功能说明:当连接关闭时被触发,即Session终止时被触发。
(5)void sessionCreated(IoSession session)
功能说明:当创建一个新连接时被触发,即当开始一个新的Session时被触发。
(6)void sessionIdle(IoSession session, IdleStatus status)
功能说明:当连接空闲时被触发。使用IoSessionConfig中的setIdleTime(IdleStatus status, int idleTime)方法可以设置session的空闲时间。如果该Session的空闲时间超过设置的值,该方法被触发,可以通过session.getIdleCount(status)来获取sessionIdle被触发的次数。
(7)void sessionOpened(IoSession session)
功能说明:当打开一个连接时被触发。在目前的实现中,好像 sessionOpened 和 sessionCreated 没有太大区别,sessionCreated 在 sessionOpened 之前被触发。
IoHandler是一个接口,一般情况没有必要直接实现该接口的每一个方法。MINA提供了一个IoHandlerAdapter类,该类实现了IoHandler要求的方法,但是都没有做任何处理。当我们要编写自己的Handler时,可以继承IoHandlerAdapter,重写需要事件方法即可。
5.类IoFilter
IoFilter用来对客户的请求或发送给客户的数据进行filter。与IoHandler一样,Filter也是基于事件的,通过实现IoFilter接口,就可以对通信过程中的Session的事件进行处理。
IoFilter的主要作用:
l 记录事件的日志(Mina默认提供了LoggingFilter)
l 测量系统性能
l 信息验证
l 过载控制
l 信息的转换(主要就是编码和解码)
---------------------
原文:https://blog.csdn.net/u012151597/article/details/78834442
Apache Mina-1的更多相关文章
- Apache MiNa 实现多人聊天室
Apache MiNa 实现多人聊天室 开发环境: System:Windows JavaSDK:1.6 IDE:eclipse.MyEclipse 6.6 开发依赖库: Jdk1.4+.mina-c ...
- Apache Mina(一)
原文链接:http://www.cnblogs.com/xuekyo/archive/2013/03/06/2945826.html Apache Mina是一个能够帮助用户开发高性能和高伸缩性网络应 ...
- Apache MINA(一)
Apache MINA is a network application framework which helps users develop high performance and high s ...
- Apache Mina 入门实例
这个教程是介绍使用Mina搭建基础示例.这个教程内容是以创建一个时间服务器. 以下是这个教程需要准备的东西: MINA 2.0.7 Core JDK 1.5 或更高 SLF4J 1.3.0 或更高 L ...
- Apache Mina原理及典型例子分析
Apache Mina ,一个高性能 Java 异步并发网络通讯框架.利用 Mina 可以高效地完成以下任务: TCP/IP 和 UDP/IP 通讯 串口通讯 VM 间的管道通讯 SSL/TLS JX ...
- Apache Mina 2.x 框架+源码分析
源码下载 http://www.apache.org/dyn/closer.cgi/mina/mina/2.0.9/apache-mina-2.0.9-src.tar.gz 整体架构 核心过程(IoA ...
- Apache Mina开发手冊之四
Apache Mina开发手冊之四 作者:chszs,转载需注明. 博客主页:http://blog.csdn.net/chszs 一.Mina开发的主要步骤 1.创建一个实现了IoService接口 ...
- 网络通信框架Apache MINA
Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络 ...
- Apache Mina(二)
在mina的源码,整个框架最核心的几个包是 : org.apache.mina.core.service :IoService.IoProcessor.IoHandler.IoAcceptor.IoC ...
- Apache Mina入门实例
一.mina是啥 ApacheMINA是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可扩展性的网络应用程序.它提供了一个通过Java NIO在不同的传输例如TCP/IP和UDP/IP上抽象的 ...
随机推荐
- Java容器:Set
Set和数学中的集合十分类似,在Java中,Set是一种绝不会包含两个相等元素的存储结构.在阅读此文前请阅读Java容器:Map. Set方法 增添方法: boolean add(E e); bool ...
- Java多线程:synchronized的可重入性
从Java多线程:线程间通信之volatile与sychronized这篇文章中我们了解了synchronized的基本特性,知道了一旦有一个线程访问某个对象的synchronized修饰的方法或代码 ...
- asp.net 六大对象之Request、Response
ASP.NET的六大对象,本质上只是 Context 里面的属性,严格上不是对象. 1.Request-->读取客户端在Web请求期间发送的值 2.Response-->封装了页面执行期后 ...
- 一分钟告诉你究竟DevOps是什么鬼?
历史回顾 为了能够更好的理解什么是DevOps,我们很有必要对当时还只有程序员(此前还没有派生出开发者,前台工程师,后台工程师之类)这个称号存在的历史进行一下回顾. 如编程之道中所言: 老一辈的程序员 ...
- 【转】mysql索引使用技巧及注意事项
一.索引的作用 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重. 在数据 ...
- @ExceptionHandler异常统一处理
之前处理工程异常,代码中最常见的就是try-catch-finally,有时一个try,多个catch,覆盖了核心业务逻辑 try{ .......... }catch(Exception1 e){ ...
- 【转】java中equal与==的区别 其中有个缓冲区,需要注意
转自http://www.cnblogs.com/dolphin0520/p/3592500.html 在学Java时,可能会经常碰到下面的代码: 1 String str1 = new String ...
- mfc动态演示排序算法
实现的排序算法 冒泡排序.选择排序.快速排序 具体实现 选用mfc中的单文档框架 ①SetTimer函数的用法. ②使用画笔画直线. ③使用FillSolidRect()函数覆盖某一矩形区域内的内容: ...
- tkinter中布局pack、place和grid(八)
tkinter中布局pack.place和grid pack布局 import tkinter wuya = tkinter.Tk() wuya.title("wuya") wuy ...
- 值得注意的CSS属性
文本TEXT letter-spacing 字符间距 word-spacing 字间距 line-height 行高 text-decoration 修饰(下划线) text-indent 首行缩进 ...