付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Mina 框架技术知识介绍.MINA 框架简介1.1 Mina 是什么东西?ApacheMINA 是一个网络应用框架,有助于用户非常方便地开发高性能、高伸缩性的网络应用。它通过JavaNIO 提供了一个抽象的、事件驱动的、异步的位于各种传输协议(如 TCP/IP和 UDP/IP)之上的 API,ApacheMINA 通常可被称之为:lNIO 框架库;l 客户端/服务器框架库;l 或者一个网络 socket 库。MINA 框架的特点有:基于 javaNIO 类库开发;采用非阻塞方式的异步传输;事件驱动;支持批量数据传输;支持 TCPUDP 协议;控制反转的设计模式(支持 Spring);采用优雅
2、的松耦合架构;可灵活的加载过滤器机制;单元测试更容易实现;可自定义线程的数量,以提高运行于多处理器上的性能;采用回调的方式完成调用,线程的使用更容易。1.2 Mina 的框架当远程客户首次访问采用 MINA 编写的程序时,IoAcceptor 作为线程运行,负责接受来自客户的请求。当有客户请求连接时,创建一个 IoSession,该 IoSession 与 IoProcessor、SocketChannel以及 IOService 联系起来。IoProcessor 也作为另外一个线程运行,定时检查客户是否有数据到来,并对客户请求进行处理,依次调用在 IOService 注册的各个 IoFilt
3、er,最后调用 IoHandler 进行最终的逻辑处理,再将处理后的结果 Filter 后返回给客户端。1.3 Mina 的现有应用MINA 框架的应用比较广泛,应用的开源项目有 ApacheDirectory、AsyncWeb、ApacheQpid、QuickFIX/J、Openfire、SubEthaSTMRred5 等。MINA 框架当前稳定版本是 1.1.6,最新的 2.0 版本目前已经发布了 M1 版本。二.MINA 框架具体技术2.1MINA 框架的常用类.类 NioSocketAcceptor用于创建服务端监听.类 NioSocketConnector用于创建客户端连接;.类 l
4、oSession用来保存会话属性和发送消息;可以理解为服务器与客户端的特定连接,该连接由服务器地址、端口以及客户端地址、端口来决定。客户端发起请求时,指定服务器地址和端口,客户端也会指定或者根据网络路由信息自动指定一个地址、自动分配一个端口。这个地址、端口对构成一个 Session。Session 是服务器端对这种连接的抽象,MINA 对其进行了封装,定义了 loSession 接口,用来代表客户端与服务器的连接,在服务器端来指代客户端,实现对客户端的操作、绑定与客户端有关的信息与对象。通过利用 Session 的这个概念,编写程序时就可以在服务器端非常方便地区分出是当前处理的是哪个客户端的请
5、求、维持客户端的状态信息、可以实现客户端之间相互通讯。loSession 提供以下一些常用方法:椀洀匀甀渀setAttribute(Objectkey,Objectvalue)getAttribute(Objectkey)功能说明:设置/获取用户定义的属性。将该属性与 session 联系起来,方便以后处理用户请求时使用。比如如果要求用户登录后才能继续进行操作,那么在用户成功登陆后,可以通过setAttribute()设置一个属性,当用户以后继续请求时,可以通过 getAttribute()获取该属性来判断用户是否登录。椀洀匀甀渀getRemoteAddress()功能说明:获取远程客户端地址
6、。椀洀匀甀渀getId()功能说明:获取 Session 的 Id(4)getCreationTime()功能说明:获得创建时间(5)getLastIoTime()功能说明:获得上次 IO 时间6)getConfig()功能说明:获得配置信息。7)write(Objectmessage)功能说明:将数据发送给客户端。(5)close()功能说明:关闭 Session,(说明:可以在 Session 中发送数据,但是 Session 没有提供读取数据的方法,读取数据通过另一套机制在 IoHandler 的 messageReceived()中实现。)4.类 IoHandlerAdapter从以上
7、 MINA 框架简图可以看出,对来自客户端数据最终处理是在 IoHandler 中处理的。IoHandler 封装了来自客户端不同事件的处理,如果对某个事件感兴趣,可以实现相应的方法,当该事件发生时,IoHandler 中的方法就会被触发执行。用于定义业务逻辑,常用的方法有:voidexceptionCaught(IoSessionsession,Throwablecause)功能说明:有异常发生时被触发。voidmessageReceived(IoSessionsession,Objectmessage)功能说明:有消息到达时被触发,message 代表接收到的消息。voidmessageS
8、ent(IoSessionsession,Objectmessage)功能说明:发送消息时时被触发,即在调用 IoSession.write()时被触发,message 代表将要发送的消息。voidsessionClosed(IoSessionsession)功能说明:当连接关闭时被触发,即 Session 终止时被触发。voidsessionCreated(IoSessionsession)功能说明:当创建一个新连接时被触发,即当开始一个新的Session 时被触发。(6)voidsessionIdle(IoSessionsession,IdleStatusstatus)功能说明:当连接空闲
9、时被触发。使用 IoSessionConfig 中的 setIdleTime(IdleStatusstatus,intidleTime)方法可以设置 session 的空闲时间。如果该 Session 的空闲时间超过设置的值,该方法被触发,可以通过 session.getIdleCount(status)来获取 sessionIdle 被触发的次数。voidsessionOpened(IoSessionsession)功能说明:当打开一个连接时被触发。在目前的实现中,好像 sessionOpened 和 sessionCreated 没有太大区另1J,sessionCreated 在 sess
10、ionOpened 之前被触发。IoHandler 是一个接口,一般情况没有必要直接实现 t 接口的每一个方法。MINA 提供了一个IoHandlerAdapter 类,该类实现了 IoHandler 要求的方法,但是都没有做任何处理。当我们要编写自己的 Handler 时,可以扩展 IoHandlerAdapter,重写我们关心的事件方法即可。比如,一般情况,我们比较关心是否接收到数据这个时间,那么我们就可以覆盖 messageReceived方法,不用管其他方法。5.类 IoFilterIoFilter 用来对客户的请求或发送给客户的数据进行 filtero与 IoHandler 一样,F
11、ilter 也是基于事件的,通过实现 IoFilter 接口,就可以对通信过程中的 Session 的事件进行处理。6.EventMINA 可以看成是事件驱动的。通常在网络通讯中,可以将整个过程划分为几个基本的阶段,如建立连接、数据通信、关闭连接。数据通信一般包括数据的发送和接收,由于在通信过程中,可能要多次发送和接收数据,以进行不同的业务交互。不可能一直都接收和发送数据,因此就有 Idle 出现,在 MINA 中,如果在设定的时间内没有数据发送或接收,那么就会触发一个 Idle 事件。由于某种原因,可能会发生错误,导致系统异常发生,引发 exceptiono因此,如果从事件发生的角度看的话,
12、就可以在 MINA中将通信看成由一个建立链接(sessionCreated 和 sessionOpened)、多个数据接收和发送、一个关 I连接事件以及多个 Idle 事件等 7 种事件组成的过程。Session 是对双方相互通信的抽象,因此通信的过程就是一系列与 Session 相关的事件。在 MINA 现在对 TCP 的实现中,sessionCreated 和 sessionOpened 没有区别。因此严格来说,有 6 种类型的事件。三、代码事例功能描述:编写一个服务器监听客户机的程序,当客户机访问服务器的时候,户机的访问信息(http),然后将访问信息和第几位客户告诉客户机。处理器代码:
13、SamplMinaServerHandler.javapackagecom.javake.mina.sampleserver;mon.IoHandlerAdapter;mon.IoSession;publicclassSamplMinaServerHandlerextendsIoHandlerAdapter/当一个客端端连结进入时OverridepublicvoidsessionOpened(IoSessionsession)throwsExceptionSystem.out.println(incommingclient:+session.getRemoteAddress();/当一个客户端
14、关闭时OverridepublicvoidsessionClosed(IoSessionsession)System.out.println(oneClinetDisconnect!);/当客户端发送的消息到达时:OverridepublicvoidmessageReceived(IoSessionsession,Objectmessage)throwsException/我们己设定了服务器解析消息的规则是一行一行读取,这里就可转为Strings=(String)message;/WritethereceiveddatabacktoremotepeerSystem.out.println(收到
15、客户机发来的消息:+s);测试将消息回送给客户端session.write(s+count);count+;privateintcount=0;启动服务器的主类:MainServer.javapackagecom.javake.mina.sampleserver;.InetSocketAddress;mon.DefaultIoFilterChainBuilder;importorg.apache.mina.filter.codec.ProtocolCodecFilter;importorg.apache.mina.filter.codec.textline.TextLineCodecFacto
16、ry;importorg.apache.mina.transport.socket.SocketAcceptor;importorg.apache.mina.transport.socket.nio.NioSocketAcceptor;publicclassMainServerpublicstaticvoidmain(Stringargs)throwsException创建一个非阻塞的 Server 端 Socket,用 NIOSocketAcceptoracceptor=newNioSocketAcceptor();/创建接收数据的过滤器DefaultIoFilterChainBuilderchain=acceptor.getFilterChain();/设定这个过滤器将一行一行(/r/n)的读取数据ch
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年沈阳市大东区法检系统书记员招聘笔试参考题库及答案详解
- 2026年湖北省十堰市法检系统书记员招聘笔试参考题库及答案详解
- 2025年黄山市黄山区法检系统书记员招聘考试试题及答案详解
- 3.1 生态系统的结构教学设计-高二上学期生物人教版(2019)选择性必修2
- 2025-2026学年武术教学设计灵感素材
- 2025-2026学年人大计算机教学设计
- 2025年西藏自治区法检系统书记员招聘笔试试题及答案详解
- 成都市新都区部分单位2026年7月公开招聘编外(聘用)人员(一)考试参考题库及答案详解
- 2025-2026学年心理健康主题班会教案
- 2025-2026学年设计体育教学目标的原则
- 2026年安庆经开区老峰镇村(社区)专职工作人员公开招聘9名笔试备考题库及答案详解
- 2026年中国第三方算力中心服务商发展研究报告
- 2026年本溪市平山区事业编单位人员招聘笔试参考试题及答案详解
- 2026年小学二年级升三年级语文暑假衔接作业(完整版)
- 伪劣产品销售合同
- 2025年南充乡镇遴选副科真题(附答案)
- 2026年心血管内科主任上半年工作总结汇报
- 2026年学法减分考试题库【原创题】附答案详解
- 心血管影像临床试验规范专家共识
- 高低压开关柜技术标书撰写范本
- 2026年碳核查师资格考试试卷及答案解析
评论
0/150
提交评论