Mina使用详细教程.docx

上传人:小飞机 文档编号:4886586 上传时间:2023-05-21 格式:DOCX 页数:20 大小:177.73KB
返回 下载 相关 举报
Mina使用详细教程.docx_第1页
第1页 / 共20页
Mina使用详细教程.docx_第2页
第2页 / 共20页
Mina使用详细教程.docx_第3页
第3页 / 共20页
Mina使用详细教程.docx_第4页
第4页 / 共20页
Mina使用详细教程.docx_第5页
第5页 / 共20页
亲,该文档总共20页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《Mina使用详细教程.docx》由会员分享,可在线阅读,更多相关《Mina使用详细教程.docx(20页珍藏版)》请在三一办公上搜索。

1、Mina使用详细教程IMina简介:Apache MINA(Multipurpose Infrastructure for Network Applications)是 Apache 组织一个 较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的MINA版 本支持基于Java NIO技术的TCP/UDP应用程序开发、串口通讯程序(只在最新的预览版中提供), MINA所支持的功能也在进一步的扩展中。本文将通过官方网站上的快速入门程序来介绍MINA的基础 架构的同时演示如何使用MINA开发网络应用程序。2环境准备:首先到官方网站下载最新的 MINA 版本,地址是:ht

2、tp:/mina.apache.org/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.7.jar。一下载MINA的依赖包slf4j。MINA使用此项目作为日志信息的输出,而MINA本身并不附带此项 目包,请到http:/www.slf4j.org/download.html地址下载 slf4j 包,slf4j 项目解压后有很多 的文件,本例中只需要其中

3、的slf4j-api-1.5.2.jar和slf4j-simple-1.5.2.jar这两个jar文件。如果没有这两个文件就会导致启动例子程序的时候报org/slf4j/LoggerFactory类没找到的错误。 当然要求机器上必须装有1.5或者更新版本的JDK。-最好你应该选择一个顺手的Java开发环境例如Eclipse或者NetBeans之类的,可以更方便的 编码和调试。3MINA基本类的描述:应用会话被激活建立或销毁或销毁loServiceListener 应用监听器3.1 loService应用程序入口loService负责底层通讯接入,loAcceptor (服务器端)和loConn

4、ector (客户端)是loService 的扩展接口。备注:loAcceptor()可以同时启动多个端口,每个端口可以指定不同的handler和filter, 但是一个服务端只有一个监听器。loService中的方法voidaddListener(IoServiceListener listener)Adds an IoServiceListener that listens any events related with this service.添加监听器用来监听与这个service相关的所有事件。loServiceConfiggetDefaultConfig ()Returns the

5、 default configuration which is used when you didnt specify any configuration.返回这个service的默认配置。DefaultloFilterChainBuildergetFilterChain ()A shortcut for ( ( DefaultloFilterChainBuilder ) getFilterChainBuilder().获取.DefaultloFilterChainBuilder 的间便方法。IoFilterChainBuildergetFilterChainBuilder ()Returns

6、 the global IoFilterChainBuilder which will modify the loFilterChain of all loSessions which is managed by this service.获取一个全局的IoFilterChainBuilder(过滤器链构建器,暂时这么 翻译),这个构建器可以修改与当前service相关的所有session 的过滤器链。SetgetManagedServiceAddresses ()Returns all SocketAddresses this service is managing.返回当前service所

7、管理的所有的Socket地址SetgetManagedSessions (SocketAddress serviceAddress)Returns all sessions with the specified remote or local address, which are currently managed by this service.返回当前service管理的指定地址的所有session回话。booleanisManaged(SocketAddress serviceAddress)Returns true if this service is managing the spe

8、cified serviceAddress .给定一个Socket地址,如果当前service正在管理这个地址,则 返回真。voidremoveListener (IoServiceListener listener)Removed an existing IoServiceListener that listens any events related with this service.移除指定监听器。voidsetFilterChainBuilder(IoFilterChainBuilder builder)Sets the global IoFilterChainBuilder whi

9、ch will modify the IoFilterChain of all IoSessions which is managed by this service.设置一个全局的IoFilterChainBuilder(过滤器链构建器,暂时这么 翻译),这个构建器可以修改与当前service相关的所有session 的过滤器链。3.2 loAcceptor相当于网络应用程序中的服务器端voidbind(SocketAddress address, IoHandler handler)绑定服务器到指定的地址(address),并指定处理器(handler)来处理接入的链接。voidbind(

10、SocketAddress address, IoHandler handler, IoServiceConfig config) 设置服务器的设置(config),绑定服务器到指定的地址(address),并指定处理器 (handle r)来处理接入的链接。loSessionnewSession (SocketAddress remoteAddress, SocketAddress localAddress) (可选)在本地(localAddress)与远程(remoteAddress)处于链接的情况下,获取一 个建立在它们之间的新的会话。voidunbind(SocketAddress a

11、ddress)解除服务器与指定地址的绑定,并断开所有与此服务器链接的客户端。voidunbindAll ()解除所有由当前acceptor绑定的所有地址。程序见4.1附件。33 loConnector相当于客户端示例程序见附件:D:我的文档桌面MinaClient. javaloConnector中的方法ConnectFutureconnect (SocketAddress address, IoHandler handler) Connects to the specified address.连接到指定地址的服务器。ConnectFutureconnect (SocketAddress a

12、ddress, IoHandler handler, IoServiceConfig config)Connects to the specified address.连接到指定地址的服务器。ConnectFutureconnect (SocketAddressaddress, SocketAddress localAddress,IoHandler handler)Connects to the specified address.连接到指定地址的服务器。ConnectFutureconnect (SocketAddress address, SocketAddress localAddre

13、ss,IoHandler handler, IoServiceConfig config)Connects to the specified address.连接到指定地址的服务器。3.4 loSession当前客户端到服务器端的一个连接实例CloseFutureclose ()关闭当前会话。IoFilterChaingetFilterChain ()获取当前会话的过滤器链。loHandlergetHandler ()获取当前会话的处理器。SocketAddressgetLocalAddress ()获取与当前会话链接的本地地址。SocketAddressgetRemoteAddress ()

14、获取链接到当前会话的远程计算机地址。WriteFuturewrite (Object message)发送指定的message到远程计算机。3.5 loHandler业务处理逻辑该接口 有五个 实现类 ChainedloHandler.DemuxingloHandler. loHandlerAdapter,SingleSessionloHandlerDelegate, StreamloHandler。其中 ChainedloHandler, DemuxingloHandler,StreamloHandler 实现了接 口, 并继承了 IoHandlerAdapter,IoHandlerAdap

15、ter 实现了接口的所有方法,但是在方法中并没有做什么,我们可以继承它,根据需要有选择的重写其中的方法。一个loHandler接口具有如下一些方法:voidexceptionCaught (loSession session, Throwable cause)当接口中其他方法抛出异常未被捕获时触发此方法voidmessageReceived(loSession session, Object message) 当接收到客户端的请求信息后触发此方法.voidmessageSent(loSession session, Object message) 当信息已经传送给客户端后触发此方法.voids

16、essionClosed(loSession session)当连接被关闭时触发,例如客户端程序意外退出等等.voidsessionCreated(loSession session) 当一个新客户端连接后触发此方法.voidsessionIdle (loSession session, IdleStatus status) 当连接空闲时触发此方法.voidsessionOpened(loSession session)当连接后打开时触发此方法,一般此方法与sessionCreated会被同时触发StreamloHandler类提供了基于流的 I/O支持,继承这个类并实现 processStr

17、eamIo(IoSessionsession, Inputstream in, Outputstream out)方法来执行 I/O 操作:protected abstract voidprocessStreamIo(IoSession session, InputStream in, OutputStream out) 实现这个方法来执行你的流I/O操作。DemuxingloHandler将接收事件分离到指定的MessageHandler中。 MessageHandleraddMessageHandler(Class type,MessageHandler handler)注册一个Messa

18、geHandler用来接收指定类型的message MessageHandlergetMessageHandler (Class type)获取一个已注册的用来处理指定类型的MessageHandlerMapClass, MessageHandlergetMessageHandlerMap ()返回在此handler中注册的所有MessageHandler的Map, 以键值对的形式(TypeMessageHandler)。voidmessageReceived(IoSessionsession, Object message)将接收事件引入到一个指定的MessageHandler 中。 Mes

19、sageHandlerremoveMessageHandler (Class type) 注销一个指定类型的MessageHandler。ChainedloHandler构造方法ChainedloHandler ()Creates a new instance which contains an empty loHandlerChain.创建一个含有空的loHandlerChain的实例。ChainedloHandler (IoHandlerChain chain)Creates a new instance which executes the specified loHandlerChai

20、n on a messageReceived event.创建一个含有指定IoHandlerChain的实例。Method SummaryIoHandlerChaingetChain ()Returns the loHandlerCommand this handler will use to handle messageReceived events.返回一个用来处理messageReceived事件的IoHandlerChainvoidmessageReceived(IoSession session, Object message)Handles the specified messag

21、eReceived event with the loHandlerCommand or loHandlerChain you specified in the constructor. 通过在构造方法中定义的IoHandlerChain或IoHandlerCommand来处理指定 的 messageReceived 事件。3.6 loFilter过滤器用于悬接通讯层接口与业务层接口。loFilter是MINA核心构造之一,扮演非常重要的角色。它过滤所有的I/O事件和请求,这 些事件和请求由loService最终到达loHandler。过滤器的生命周期:一个过滤器只有当它处于过滤器链中时才会起

22、过滤作用。当添加一个过滤器到过滤器链时:a. ReferenceCountingloFilter 在第一时间调用 init()方法。b. 调用onPreAdd方法来告知程序,一个过滤器将被添加到过滤器链中。c. 当过滤器被添加到过滤器链后,所有的事件和I/O请求都会通过过滤器到达 IoHandler。d. 调用onPostAdd方法来告知程序,一个过滤器已被添加到过滤器链中。e. 当onPostAdd方法 抛出异常时,过滤器将会从过滤器链中被删除,如果这个 过滤器是整个过滤器链中的最后一个,那么ReferenceCountingloFilter将会调 用destory()销毁该过滤器。当从过滤

23、器链中移除过滤器时:a. 调用onPreRemove方法来告知程序,一个过滤器将会从过滤器链中被移除。b, 过滤器从过滤器链中被移除后后,所有的事件和I/O请求都不会通过该过滤器 到达 IoHandler。c. 调用onPostRemove方法来告知程序,一个过滤器已经从过滤器链中被移除。d, 当这个过滤器是过滤器链中的最后一个过滤器时,那么 ReferenceCountingIoFilter 将会调用 destory()销毁该过滤器。嵌套类static interfaceIoFilter.NextFilterRepresents the next loFilter in loFilterCh

24、ain. 过滤器链中的下个过滤器。Static classIoFilter.WriteRequestRepresents write request fired by IoSession.write(Object). 由 IoSession.write(Object)发出的写请求。方法voiddestroy ()销毁此过滤器。由ReferenceCountingloFilter调用voidexceptionCaught(loFilter.NextFilter nextFilter, loSession session, Throwablecause)过滤 IoHandler 中的 except

25、ionCaught 事件。voidfilterClose (IoFilter.NextFilter nextFilter, IoSession session) 过滤 IoSession.close()方法。voidfilterWrite (IoFilter.NextFilter nextFilter, IoSession session, IoFilter.WriteRequest 过滤 loSession.write(Object)方法。voidinit ()当过滤器被添加到过滤器链中后调用该方法,这样可以在第一时间为其分配资源。由ReferenceCountingIoFilter 调用v

26、oidmessageReceived (IoFilter.NextFilter nextFilter, IoSession session, Object message)过滤 Iohandler 中的 messageReceived 事件。voidmessageSent(IoFilter.NextFilter nextFilter, IoSession session, Object message) 过滤 Iohandler 中的 messageSent 事件。voidonPostAdd(IoFilterChain parent, String name, IoFilter.NextFil

27、ter nextFilter) 在这个过滤器被添加到过滤器链之后调用此方法。voidonPostRemove (IoFilterChain parent, String name, IoFilter.NextFilter nextFilter) 在这个过滤器从过滤器链中被删除之后调用此方法。voidonPreAdd(IoFilterChain parent, String name, IoFilter.NextFilter nextFilter) 在这个过滤器被添加到过滤器链之前调用此方法。voidonPreRemove (IoFilterChain parent, String name,

28、IoFilter.NextFilter nextFilter) 在这个过滤器从过滤器链中被删除之前调用此方法。voidsessionClosed(IoFilter.NextFilter nextFilter, IoSession session) 过滤 IoHandler 中的 sessionClosed 事件。voidsessionCreated(IoFilter.NextFilter nextFilter, IoSession session) 过滤 IoHandler 中的 sessionCreated 事件。voidsessionIdle (IoFilter.NextFilter ne

29、xtFilter, IoSession session, IdleStatus status) 过滤 IoHandler 中的 sessionIdle 事件。voidsessionOpened(IoFilter.NextFilter nextFilter, IoSession session) 过滤 IoHandler 中的 sessionOpened 事件。MINA自身带有一些常用的过滤器,例如codec (字符编号)、LoggingFilter (日志记录)、BlackListFilter (黑名单过滤)、CompressionFilter (压缩)、SSLFilter (SSL 加密)等

30、J IoFilterAdapter(过滤器适配器),这个类只实现了 loFilter接口中的方法,但是方法中并没有做任何事。顶BlackListFilter(黑名单过滤器)是loFileter的一个实现类,作用是将远程客户端添加到黑名单中后,该客户端就会访问不到服务器。Method Summaryvoidblock (InetAddress address)将指定地址的计算机添加黑名单中。voidblock (InetAddress address, String error_string) 将指定地址的计算机添加黑名单中。voidsetBlacklist(Collection address

31、es) 将多个指定地址添加到黑名单中。voidsetBlacklist (InetAddress addresses) 将多个指定地址添加到黑名单中。voidunblock (InetAddress address)将指定地址的计算机添加黑名单中。:我的文档桌面程序见附件:CommonServer. java-LoggingFilter(日志过滤器),将此过滤器加到过滤器链中后就可以实现MINA的日志功D:我的文档、桌面 ,a e i- n rr/i z,i CommonServer. java 能。程序见附件:顶 ProtocolCodecFilter(协议编解码过滤器),通过 Protoc

32、olCodecFactory,ProtocolEncoder,或ProtocolDecoder该过滤器可以实现普通的二进制或特殊的协议数据与POJO之间的9D:我的文档桌面 相互转换。程序见附件: dec.r见构造方法ProtocolCodecFilter (Class encoderClass,Class decoderClass)ProtocolCodecFilter (ProtocolCodecFactory factory)ProtocolCodecFilter (ProtocolEncoder encoder, ProtocolDecoder decoder)4-协议编码器(Prot

33、ocolEncoder)将高级的信息对象编码成二进制或特殊的协议数据。MINA会对位于loSession写队列中的所有消息调用en code函数,然后编码器会将经过编码处理过的消息放到ByteBuffer中,通过ProtocolEncoderOutput函数送出,到达过滤器链中的下个过滤器。ProtocolEncoder 中的方法voiddispose (IoSession session)释放所有与这个编码器相关的资源。voidencode (IoSessionsession,Objectmessage,ProtocolEncoderOutput out)将高级的消息对象编码成一进制或特殊的

34、协议数据ProtocolEncoder 的实现类NettyEncoder该编码器可以将Netty2信息编码成子节buffersObjectSerializationEncoder该编码器通过ByteBuffer.putObject(Object)可以编码普通 的java类新增命方法intgetMaxObjectSize ()Returns the allowed maximum size of the encoded object.返回允许被编码的Object的最大限制voidsetMaxObjectSize (int axObjectSize)Sets the allowed maximum

35、 size of the encoded object.设置允许被编码的Object的最大限制ProtocolEncoderAdapterProtoclEncoder 适配器。SynchronizedProtocolEncoder,线程方面的。TextLineEncoder该编码器可以将子付串按分隔付编码成仃仃的文 本。构造方法TxtLineEncoder ()TxtLineEncoder (Charset charset)创建一个带有字符编码的实例TxtLineEncoder (Charsetcharset, LineDelimiterdelimiter)创建一个带有字符编码和分隔符的实例T

36、xtLineEncoder(LineDelimiter delimiter)创建一个带有分隔符的实例新增方法=iint getMaxLineLength ()Returns the allowed maximum size of the encoded line.返回每行的最大限制。void setMaxLineLength (int maxLineLength)Sets the allowed maximum size of the encoded line.设置每行的最大限制。协议解码器(ProtocolDecoder)将二进制或特殊协议数据解码成高级的信息对象。 MINA会对读出的数据调

37、用decode函数,然后解码器会将经过解码处理过的消息通过ProtocolDecoderOutput函数送出,到达过滤器链中的下个过滤器。ProtocolDecoder 中的方法voiddecode (IoSession session, ByteBuffer in, ProtocolDecoderOutput out) 将二进制或特殊的协议数据解码成高级的消息对象。voiddispose (IoSession session)释放与这个解码器相关的所有资源。voidfinishDecode (IoSession session, ProtocolDecoderOutput out) 当指定s

38、ession回话关闭时调用此方法ProtocolDecoder 的实现类NettyDecoder该解码器通过使用指定MessageRecognizer可以将子节缓存 解码成Netty2信息。构造方法NettyDecoder (ty2.MessageRecognizer recognizer)创建一个带有指定MessageRecognizer的实例。ObjectSerializationDecoder 该编码器通过 ByteBuffer.getObject(Object)可以解码普通的 java 类构造方法ObjectSerializationDecoder ()Creates a new in

39、stance with the ClassLoader of the current thread.创建一个新的实例,使用当前线程的ClassLoaderObjectSerializationDecoder (ClassLoader classLoader)Creates a new instance with the specified ClassLoader.创建一个带有指定ClassLoader的实例。新增方法int getMaxObjectSize ()Returns the allowed maximum size of the encoded object.返回允许被解码的Obje

40、ct的最大限制void setMaxObjectSize (int axObjectSize)Sets the allowed maximum size of the encoded object.设置允许被解码的Object的最大限制线程方面的。ProtocolDecoderAdapter ProtoclDecoder 适配器。TextLineDecoderSynchronizedProtocolDecoder,该解码器可以将一行一行的文本解码成字符串。构造方法TxtLineDecoder ()TxtLineDecoder (Charset charset)创建一个带有字符编码的实例TxtL

41、ineDecoder (Charset charset, LineDelimiter delimiter) 创建一个带有字符编码和分隔符的实例TxtLineDecoder (LineDelimiter delimiter)创建一个带有分隔符的实例协议编解码工厂(ProtocolCodecFactory)提供编码解码器,可以实现字节与高级 信息之间的相互转换。方法ProtocolDecodergetDecoder ()获取一个解码器ProtocolEncodergetEncoder ()获取一个编码器ProtocolCodecFactory 的实现类DemuxingProtocolCodecFa

42、ctoryNettyCodecFactory提供基于Netty2信息的编解码器ObiectSerializationCodecFactory用来处理Object的编解码器。TextLineCodecFactory用来处理字符串的编解码器。消息编码器(MessageEncoder)编码指定类型的消息。Method Summaryvoidencode (IoSession session, Object message, ProtocolEncoderOutput out) Encodes higher-level message objects into binary or protocol-s

43、pecific data. 将高级信息编码成字节活特殊协议数据。SetClassgetMessageTypes ()Returns the set of message classes this encoder can encode. 获取这个编码器能够编码的消息类型消息解码器(MessageDecoder)解码指定类型的消息Field SummaryStaticMessageDecoderResultNEED DATA描述 decodable(IoSession, ByteBuffer)和 decode(IoSession, ByteBuffer, ProtocolDecoderOutput

44、)的返回值StaticMessageDecoderResultNOT OK描述 decodable(IoSession, ByteBuffer)和 decode(IoSession, ByteBuffer, ProtocolDecoderOutput)的返回值StaticMessageDecoderResultOK描述 decodable(IoSession, ByteBuffer)和 decode(IoSession, ByteBuffer, ProtocolDecoderOutput)的返回值方法MessageDecoderResultdecodable (IoSession sessio

45、n, ByteBuffer in) 检查指定的buffer是否能被此解码器解码。MessageDecoderResultdecode (IoSession session, ByteBuffer in, ProtocolDecoderOutput out)将字节或特殊协议内容解码成高级消息对象。voidfinishDecode (IoSession session, ProtocolDecoderOutput out) Invoked when the specified session is closed while this decoder was parsing the data.当指定

46、Session回话关闭时调用此方法。顶CompressionFilter (数据压缩过滤器)-SSLFilter(SSL 过滤器)-ExecutorFilter(线程执行过滤器)-ReferenceCountingIoFilter()具体叫什么名字翻译不上来,该过滤器的作用就是管理所有的过滤器,在某个过滤器不处于过滤器链中时调用disdroy()方法来销毁该过滤器,以释放其占用的资源。在某个过滤器被添加到过滤器链时,调用 何)方法来初始化该 过滤器,为其分配资源。J StreamWriteFilter (输入流过滤器)使用此过滤器后可以通过IoSession.write(Object) 直接向远程写Inputstream。当一个输入流写入到session中后这个过滤器会从这个输入 流中读取字节,放到ByteBuffer中,然后将这个ByteBuffer写入到下个过滤器中。当

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号