




免费预览已结束,剩余4页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Apache MINA入门教程作者:刘冬Abstract: 本文通过一个简单的问候程序HelloServer来介绍MINA的基础架构的同时演示如何使用MINA开发网络应用程序。Apache MINA(Multipurpose Infrastructure for Network Applications)是Apache组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的MINA版本支持基于Java NIO技术的TCP/UDP应用程序开发、串口通讯程序(只在最新的预览版中提供),MINA所支持的功能也在进一步的扩展中。目前正在使用MINA的软件包括有:Apache Directory Project、AsyncWeb、AMQP(Advanced Message Queuing Protocol)、RED5 Server(Macromedia Flash Media RTMP)、ObjectRADIUS、Openfire等等。本文将通过一个简单的问候程序HelloServer来介绍MINA的基础架构的同时演示如何使用MINA开发网络应用程序。环境准备1. 首先到官方网站下载最新的MINA版本,地址是:/downloads.html。下载之前先介绍一下MINA的两个版本:1.0.x适合运行环境为JDK1.4,1.1.x适合JDK1.5的版本,两者的编译环境都需要JDK1.5。JDK1.5已经是非常普遍了,本文中使用1.1.5版本的MINA,编译和运行所需的文件是mina-core-1.1.5.jar。2. 下载MINA的依赖包slf4j。MINA使用此项目作为日志信息的输出,而MINA本身并不附带此项目包,请到/download.html 地址下载slf4j包,slf4j项目解压后有很多的文件,本例中只需要其中的slf4j-api-1.4.3.jar和slf4j-simple-1.4.3.jar这两个jar文件。如果没有这两个文件就会导致启动例子程序的时候报org/slf4j/LoggerFactory类没找到的错误。3. 当然要求机器上必须装有1.5或者更新版本的JDK。4. 最好你应该选择一个顺手的Java开发环境例如Eclipse或者NetBeans之类的,可以更方便的编码和调试,虽然我们的最低要求只是一个简单的文本编辑器而已。编写代码并执行1. 编写代码HelloServer.java如下package demo.mina.echo;import java.io.IOException;import .InetSocketAddress;import mon.*;import org.apache.mina.transport.socket.nio.*;import org.apache.mina.filter.codec.ProtocolCodecFilter;import org.apache.mina.filter.codec.textline.TextLineCodecFactory;/* * HelloServer演示程序 * author liudong (/javayou) */public class HelloServer private static final int PORT = 8080;/* * param args * throws IOException */public static void main(String args) throws IOException IoAcceptor acceptor = new SocketAcceptor(); IoAcceptorConfig config = new SocketAcceptorConfig(); DefaultIoFilterChainBuilder chain = config.getFilterChain(); /使用字符串编码 chain.addLast(codec, new ProtocolCodecFilter(new TextLineCodecFactory(); /启动HelloServer acceptor.bind(new InetSocketAddress(PORT), new HelloHandler(), config); System.out.println(HelloServer started on port + PORT);/* * HelloServer的处理逻辑 * author liudong */class HelloHandler extends IoHandlerAdapter /* * 当有异常发生时触发 */Override public void exceptionCaught(IoSession ssn, Throwable cause) cause.printStackTrace(); ssn.close(); /* * 有新连接时触发 */Overridepublic void sessionOpened(IoSession ssn) throws Exception System.out.println(session open for + ssn.getRemoteAddress();/* * 连接被关闭时触发 */Overridepublic void sessionClosed(IoSession ssn) throws Exception System.out.println(session closed from + ssn.getRemoteAddress();/* * 收到来自客户端的消息 */public void messageReceived(IoSession ssn, Object msg) throws Exception String ip = ssn.getRemoteAddress().toString();System.out.println(= Message From + ip + : + msg); ssn.write(Hello + msg); 2. 编译执行先不用试着去读懂每一行代码的具体意思,用你顺手的编译器编译HelloServer.java,如果报错请确认是否已将前面提到的三个jar文件添加至类路径中。如果一切顺利接着就可以启动HelloServer程序,启动后提示:HelloServer started on port 8080 表示启动成功,如果启动失败,问题无外乎是类没找到或者端口占用。如果端口被占用的话,换一个罗,修改PORT常量值后再次编译并启动。3. 测试服务器打开命令行窗口,输入 telnet localhost 8080 后,输入您的英文名或者其他一些乱七八糟的字符后回车再去看看刚启动的服务程序有何反应。我的反应如下:HelloServer started on port 8080session open for /:3023= Message From /:3023 :hello= Message From /:3023 :hello= Message From /:3023 :liudong= Message From /:3023 :Winter Lau好了,一切正常,恭喜你的第一个使用MINA开发的网络程序已经成功运行了。MINA基本类的描述在介绍架构之前先认识几个接口:IoAccepter相当于网络应用程序中的服务器端IoConnector相当于客户端IoSession当前客户端到服务器端的一个连接实例IoHandler业务处理逻辑IoFilter过滤器用于悬接通讯层接口与业务层接口MINA的基础架构下图是MINA的架构图,在图中的模块链中,IoService便是应用程序的入口,相当于我们前面代码中的IoAccepter,IoAccepter便是IoService的一个扩展接口。IoService接口可以用来添加多个IoFilter,这些IoFilter符合责任链模式并由IoProcessor线程负责调用。而IoAccepter在IoService接口的基础上还提供绑定某个通讯端口以及取消绑定的接口。在上面的例子中,我们是这样使用IoAccepter的:IoAcceptor acceptor = new SocketAcceptor();相当于我们使用了Socket通讯方式作为服务的接入,当前版本的MINA还提供了除SocketAccepter外的基于数据报文通讯的DatagramAccepter以及基于管道通讯的VmPipeAccepter。另外还包括串口通讯接入方式,目前基于串口通讯的接入方式已经在最新测试版的MINA中提供。你也可以自行实现IoService接口来使用自己的通讯方式。而在上图中最右端也就是IoHandler,这便是业务处理模块。相当于前面例子中的HelloHandler类。在业务处理类中不需要去关心实际的通讯细节,只管处理客户端传输过来的信息即可。编写Handler类就是使用MINA开发网络应用程序的重心所在,相当于MINA已经帮你处理了所有的通讯方面的细节问题。为了简化Handler类,MINA提供了IoHandlerAdapter类,此类仅仅是实现了IoHandler接口,但并不做任何处理。一个IoHandler接口中具有如下一些方法(摘自MINA的API文档):voidexceptionCaught(IoSessionsession, Throwablecause) 当接口中其他方法抛出异常未被捕获时触发此方法voidmessageReceived(IoSessionsession, Objectmessage) 当接收到客户端的请求信息后触发此方法.voidmessageSent(IoSessionsession, Objectmessage) 当信息已经传送给客户端后触发此方法.voidsessionClosed(IoSessionsession) 当连接被关闭时触发,例如客户端程序意外退出等等.voidsessionCreated(IoSessionsession) 当一个新客户端连接后触发此方法.voidsessionIdle(IoSessionsession, IdleStatusstatus) 当连接空闲时触发此方法.voidsessionOpened(IoSessionsession) 当连接后打开时触发此方法,一般此方法与sessionCreated会被同时触发前面我们提到IoService是负责底层通讯接入,而IoHandler是负责业务处理的。那么MINA架构图中的IoFilter作何用途呢?答案是你想作何用途都可以。但是有一个用途却是必须的,那就是作为IoService和IoHandler之间的桥梁。IoHandler接口中最重要的一个方法是messageReceived,这个方法的第二个参数是一个Object型的消息,总所周知,Object是所有Java对象的基础,那到底谁来决定这个消息到底是什么类型呢?答案也就在这个IoFilter中。在前面使用的例子中,我们添加了一个IoFilter是new ProtocolCodecFilter(new TextLineCodecFactory(),这个过滤器的作用是将来自客户端输入的信息转换成一行行的文本后传递给IoHandler,因此我们可以在messageReceived中直接将msg对象强制转换成String对象。而如果我们不提供任何过滤器的话,那么在messageReceived方法中的第二个参数类型就是一个byte的缓冲区,对应的类是mon.ByteBuffer。虽然你也可以将解析客户端信息放在IoHandler中来做,但这并不是推荐的做法,使原来清晰的模型又模糊起来,变得IoHandler不只是业务处理,还得充当协议解析的任务。MINA自身带有一些常用的过滤器,例如LoggingFilter(日志记录)、BlackListFilter(黑名单过滤)、CompressionFilter(压缩)、SSLFilter(SSL加密)等。其他MINA不仅仅是用来开发网络服务器端应用程序,它一样可以使用IoConnector来连接到各种各样的网络服务程序。通过本文中HelloServer这个例子,我们在惊叹MINA可以带来多么大便利的同时,还不得不为其卓越的性能而骄傲,据称使用MINA开发服务器程序的性能已经逼近使用C
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中华传统文化知识竞赛题库
- 2025年人力资源行业招聘面试预测题及备考指南
- 2025年新型节能水泵、风机和压缩机项目建议书
- 2025年糖果、巧克力、蜜饯及类似食品项目发展计划
- 2025年非晶、微晶合金项目发展计划
- 2025年高绝缘高导热氮化铝陶瓷基片合作协议书
- 抢救仪器使用教学课件
- 抛丸机安全培训总结课件
- 抗逆性育种课件
- 河南省商丘市夏邑县多校2024-2025学年七年级下学期3月月考生物试题(含答案)
- 员工上下班交通安全培训
- PTN原理、PTN设备和工程维护
- 钢结构分包单位考察文件(项目考察表及生产厂考察内容提示要点)
- 《老年人多重用药安全管理专家共识》解读课件
- 船舶管理-船舶的发展与种类课件
- “条块结合”、创新学校管理的实践与思考
- 纯电动汽车整车控制器(VCU)策略
- QCC报告参考模板
- 西门子数控系统调试
- 高中数学必修一全部课件-高中数学必修1
- 经济法说课稿
评论
0/150
提交评论