您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > Mina2.0完全剖析,完全自学手册【完整版】
1远程通信Mina2学习笔记作者:李少华邮箱:xiaosanshaoli@126.com2QQ:3054099132010-12-23初稿引言........................................................................3一.Mina入门............................................................3第一步.下载使用的Jar包..................................................3第二步.工程创建配置......................................................3第三步.服务端程序........................................................4第四步.客户端程序........................................................7第五步.长连接VS短连接...................................................9二.Mina基础...........................................................111.IoService接口........................................................122.1.1类结构........................................................122.1.2应用..........................................................132.IoFilter接口.........................................................152.2.1类结构........................................................152.2.2应用..........................................................17添加过滤器......................................................17自定义编解码器..................................................18制定协议的方法:................................................20IoBuffer常用方法:.............................................20Demo1:模拟根据文本换行符编解码.................................21Demo2:改进Demo1的代码.........................................23Demo3:自定义协议编解码.........................................323.IoHandler接口........................................................51三.Mina实例...........................................................51四.其他.................................................错误!未定义书签。3引言最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。首先,Mina是个什么东西?看下官方网站()对它的解释:Apache的Mina(MultipurposeInfrastructureNetworkedApplications)是一个网络应用框架,可以帮助用户开发高性能和高扩展性的网络应用程序;它提供了一个抽象的、事件驱动的异步API,使JavaNIO在各种传输协议(如TCP/IP,UDP/IP协议等)下快速高效开发。ApacheMina也称为:NIO框架客户端/服务端框架(典型的C/S架构)网络套接字(networkingsocket)类库总之:我们简单理解它是一个封装底层IO操作,提供高级操作API的通讯框架!(本文所有内容仅针对Mina2.0在TCP/IP协议下的应用开发)一.Mina入门先用Mina做一个简单的应用程序。第一步.下载使用的Jar包a.登录下载mina2.0.1.zip,解压获得mina-core-2.0.0-M1.jarb.登录下载slf4j1.5.2.zip,解压获得slf4j-api-1.5.2.jar与slf4j-log4j12-1.5.2.jarc.添加Log4j的jar包,注意如果使用slf4j-log4j12-XXX.jar,就需要添加log4j1.2.X。我这里使用的是log4j-1.2.14.jar(Logger配置详情参见)OK,4个jar都完备了。第二步.工程创建配置创建一个JavaProject(默认使用UTF-8编码格式),添加log4j.propertieslog4j.rootLogger=DEBUG,MINA,filelog4j.appender.MINA=org.apache.log4j.ConsoleAppender4log4j.appender.MINA.layout=org.apache.log4j.PatternLayoutlog4j.appender.MINA.layout.ConversionPattern=%d{yyyy-MM-ddHH\:mm\:ss,SSS}%-5p%c{1}%x-%m%nlog4j.appender.file=org.apache.log4j.RollingFileAppenderlog4j.appender.file.File=./log/minademos.loglog4j.appender.file.MaxFileSize=5120KBlog4j.appender.file.MaxBackupIndex=10log4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender.file.layout.ConversionPattern=[VAMS][%d]%p|%m|[%t]%C.%M(%L)%n第三步.服务端程序创建一个简单的服务端程序:(服务端绑定3005端口)publicclassDemo1Server{privatestaticLoggerlogger=Logger.getLogger(Demo1Server.class);privatestaticintPORT=3005;publicstaticvoidmain(String[]args){IoAcceptoracceptor=null;try{//创建一个非阻塞的server端的Socketacceptor=newNioSocketAcceptor();//设置过滤器(使用Mina提供的文本换行符编解码器)acceptor.getFilterChain().addLast(codec,newProtocolCodecFilter(newTextLineCodecFactory(Charset.forName(UTF-8),LineDelimiter.WINDOWS.getValue(),LineDelimiter.WINDOWS.getValue())));//设置读取数据的缓冲区大小acceptor.getSessionConfig().setReadBufferSize(2048);//读写通道10秒内无操作进入空闲状态acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,10);//绑定逻辑处理器acceptor.setHandler(newDemo1ServerHandler());//绑定端口acceptor.bind(newInetSocketAddress(PORT));logger.info(服务端启动成功...端口号为:+PORT);}catch(Exceptione){logger.error(服务端启动异常....,e);e.printStackTrace();}5}}无需解释,大家看上面的注释也许就了解一二了;注意:创建服务端最主要的就是绑定服务端的消息编码解码过滤器和业务逻辑处理器;什么是编码与解码哪?大家知道,网络传输的数据都是二进制数据,而我们的程序不可能直接去操作二进制数据;这时候我们就需要来把接收到的字节数组转换为字符串,当然完全可以转换为任何一个java基本数据类型或对象,这就是解码!而编码恰好相反,就是把要传输的字符串转换为字节!比如上面使用的Mina自带的根据文本换行符编解码的TextLineCodec过滤器------指定参数为根据windows的换行符编解码,遇到客户端发送来的消息,看到windows换行符(\r\n)就认为是一个消息了,而发送给客户端的消息,都会在消息末尾添加上\r\n文本换行符;业务逻辑处理器是Demo1ServerHandler---看它的具体实现:publicclassDemo1ServerHandlerextendsIoHandlerAdapter{publicstaticLoggerlogger=Logger.getLogger(Demo1ServerHandler.class);@OverridepublicvoidsessionCreated(IoSessionsession)throwsException{logger.info(服务端与客户端创建连接...);}@OverridepublicvoidsessionOpened(IoSessionsession)throwsException{logger.info(服务端与客户端连接打开...);}@OverridepublicvoidmessageReceived(IoSessionsession,Objectmessage)throwsException{Stringmsg=message.toString();logger.info(服务端接收到的数据为:+msg);if(bye.equals(msg)){//服务端断开连接的条件session.close();}Datedate=newDate();session.write(date);}@OverridepublicvoidmessageSent(IoSessionsession,Objectmessage)throwsException{logger.info(服务端发送信息成功...);}6@OverridepublicvoidsessionClosed(IoSessionsession)throwsException{}@OverridepublicvoidsessionIdle(IoSessionsession,IdleStatusstatus)throwsException{logger.info(服务端进入空
本文标题:Mina2.0完全剖析,完全自学手册【完整版】
链接地址:https://www.777doc.com/doc-6139452 .html