Mina使用手册.docx
- 文档编号:6048578
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:30
- 大小:151.58KB
Mina使用手册.docx
《Mina使用手册.docx》由会员分享,可在线阅读,更多相关《Mina使用手册.docx(30页珍藏版)》请在冰豆网上搜索。
Mina使用手册
Mina使用手册
1Mina简介:
ApacheMINA(MultipurposeInfrastructureforNetworkApplications)是Apache组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。
当前发行的MINA版本支持基于JavaNIO技术的TCP/UDP应用程序开发、串口通讯程序(只在最新的预览版中提供),MINA所支持的功能也在进一步的扩展中。
。
本文将通过官方网站上的快速入门程序来介绍MINA的基础架构的同时演示如何使用MINA开发网络应用程序。
2环境准备:
首先到官方网站下载最新的MINA版本,地址是:
http:
//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项目解压后有很多的文件,本例中只需要其中的slf4j-api-1.5.2.jar和slf4j-simple-1.5.2.jar这两个jar文件。
如果没有这两个文件就会导致启动例子程序的时候报org/slf4j/LoggerFactory类没找到的错误。
当然要求机器上必须装有1.5或者更新版本的JDK。
最好你应该选择一个顺手的Java开发环境例如Eclipse或者NetBeans之类的,可以更方便的编码和调试。
3MINA基本类的描述:
3.1IoService应用程序入口
IoService负责底层通讯接入,IoAcceptor(服务器端)和IoConnector(客户端)是IoService的扩展接口。
备注:
IoAcceptor()可以同时启动多个端口,每个端口可以指定不同的handler和filter,但是一个服务端只有一个监听器。
IoService中的方法
void
addListener(IoServiceListenerlistener)
AddsanIoServiceListenerthatlistensanyeventsrelatedwiththisservice.
添加监听器用来监听与这个service相关的所有事件。
IoServiceConfig
getDefaultConfig()
Returnsthedefaultconfigurationwhichisusedwhenyoudidn'tspecifyanyconfiguration.
返回这个service的默认配置。
DefaultIoFilterChainBuilder
getFilterChain()
Ashortcutfor((DefaultIoFilterChainBuilder)getFilterChainBuilder()).
获取DefaultIoFilterChainBuilder的简便方法。
IoFilterChainBuilder
getFilterChainBuilder()
ReturnstheglobalIoFilterChainBuilderwhichwillmodifytheIoFilterChainofallIoSessionswhichismanagedbythisservice.
获取一个全局的IoFilterChainBuilder(过滤器链构建器,暂时这么翻译),这个构建器可以修改与当前service相关的所有session的过滤器链。
Set
getManagedServiceAddresses()
ReturnsallSocketAddressesthisserviceismanaging.
返回当前service所管理的所有的Socket地址
Set
getManagedSessions(SocketAddressserviceAddress)
Returnsallsessionswiththespecifiedremoteorlocaladdress,whicharecurrentlymanagedbythisservice.
返回当前service管理的指定地址的所有session回话。
boolean
isManaged(SocketAddressserviceAddress)
ReturnstrueifthisserviceismanagingthespecifiedserviceAddress.
给定一个Socket地址,如果当前service正在管理这个地址,则返回真。
void
removeListener(IoServiceListenerlistener)
RemovedanexistingIoServiceListenerthatlistensanyeventsrelatedwiththisservice.
移除指定监听器。
void
setFilterChainBuilder(IoFilterChainBuilderbuilder)
SetstheglobalIoFilterChainBuilderwhichwillmodifytheIoFilterChainofallIoSessionswhichismanagedbythisservice.
设置一个全局的IoFilterChainBuilder(过滤器链构建器,暂时这么翻译),这个构建器可以修改与当前service相关的所有session的过滤器链。
3.2IoAcceptor相当于网络应用程序中的服务器端
void
bind(SocketAddressaddress,IoHandlerhandler)
绑定服务器到指定的地址(address),并指定处理器(handler)来处理接入的链接。
void
bind(SocketAddressaddress,IoHandlerhandler,IoServiceConfigconfig)
设置服务器的设置(config),绑定服务器到指定的地址(address),并指定处理器(handler)来处理接入的链接。
IoSession
newSession(SocketAddressremoteAddress,SocketAddresslocalAddress)
(可选)在本地(localAddress)与远程(remoteAddress)处于链接的情况下,获取一个建立在它们之间的新的会话。
void
unbind(SocketAddressaddress)
解除服务器与指定地址的绑定,并断开所有与此服务器链接的客户端。
void
unbindAll()
解除所有由当前acceptor绑定的所有地址。
程序见4.1附件。
3.3IoConnector相当于客户端
IoConnector中的方法
ConnectFuture
connect(SocketAddressaddress,IoHandlerhandler)
Connectstothespecifiedaddress.
连接到指定地址的服务器。
ConnectFuture
connect(SocketAddressaddress,IoHandlerhandler,IoServiceConfigconfig)
Connectstothespecifiedaddress.
连接到指定地址的服务器。
ConnectFuture
connect(SocketAddressaddress,SocketAddresslocalAddress,IoHandlerhandler)
Connectstothespecifiedaddress.
连接到指定地址的服务器。
ConnectFuture
connect(SocketAddressaddress,SocketAddresslocalAddress,IoHandlerhandler,IoServiceConfigconfig)
Connectstothespecifiedaddress.
连接到指定地址的服务器。
示例程序见附件:
3.4IoSession当前客户端到服务器端的一个连接实例
CloseFuture
close()
关闭当前会话。
IoFilterChain
getFilterChain()
获取当前会话的过滤器链。
IoHandler
getHandler()
获取当前会话的处理器。
SocketAddress
getLocalAddress()
获取与当前会话链接的本地地址。
SocketAddress
getRemoteAddress()
获取链接到当前会话的远程计算机地址。
WriteFuture
write(Objectmessage)
发送指定的message到远程计算机。
3.5IoHandler业务处理逻辑
该接口有五个实现类ChainedIoHandler,DemuxingIoHandler,IoHandlerAdapter,SingleSessionIoHandlerDelegate,StreamIoHandler。
其中ChainedIoHandler,DemuxingIoHandler,StreamIoHandler实现了接口,并继承了IoHandlerAdapter,IoHandlerAdapter实现了接口的所有方法,但是在方法中并没有做什么,我们可以继承它,根据需要有选择的重写其中的方法。
一个IoHandler接口具有如下一些方法:
void
exceptionCaught(IoSessionsession,Throwablecause)
当接口中其他方法抛出异常未被捕获时触发此方法
void
messageReceived(IoSessionsession,Objectmessage)
当接收到客户端的请求信息后触发此方法.
void
messageSent(IoSessionsession,Objectmessage)
当信息已经传送给客户端后触发此方法.
void
sessionClosed(IoSessionsession)
当连接被关闭时触发,例如客户端程序意外退出等等.
void
sessionCreated(IoSessionsession)
当一个新客户端连接后触发此方法.
void
sessionIdle(IoSessionsession,IdleStatusstatus)
当连接空闲时触发此方法.
void
sessionOpened(IoSessionsession)
当连接后打开时触发此方法,一般此方法与sessionCreated会被同时触发
StreamIoHandler类提供了基于流的I/O支持,继承这个类并实现processStreamIo(IoSessionsession,InputStreamin,OutputStreamout)方法来执行I/O操作:
protectedabstractvoid
processStreamIo(IoSessionsession,InputStreamin,OutputStreamout)
实现这个方法来执行你的流I/O操作。
DemuxingIoHandler将接收事件分离到指定的MessageHandler中。
superE>
addMessageHandler(Class
superE> handler)
注册一个MessageHandler用来接收指定类型的message
superE>
getMessageHandler(Class
获取一个已注册的用来处理指定类型的MessageHandler
Map
getMessageHandlerMap()
返回在此handler中注册的所有MessageHandler的Map,以键值对的形式(Type-MessageHandler)。
void
messageReceived(IoSessionsession,Objectmessage)
将接收事件引入到一个指定的MessageHandler中。
superE>
removeMessageHandler(Class
注销一个指定类型的MessageHandler。
ChainedIoHandler
构造方法
ChainedIoHandler()
CreatesanewinstancewhichcontainsanemptyIoHandlerChain.
创建一个含有空的IoHandlerChain的实例。
ChainedIoHandler(IoHandlerChainchain)
CreatesanewinstancewhichexecutesthespecifiedIoHandlerChainonamessageReceivedevent.
创建一个含有指定IoHandlerChain的实例。
MethodSummary
IoHandlerChain
getChain()
ReturnstheIoHandlerCommandthishandlerwillusetohandlemessageReceivedevents.
返回一个用来处理messageReceived事件的IoHandlerChain
void
messageReceived(IoSessionsession,Objectmessage)
HandlesthespecifiedmessageReceivedeventwiththeIoHandlerCommandorIoHandlerChainyouspecifiedintheconstructor.
通过在构造方法中定义的IoHandlerChain或IoHandlerCommand来处理指定的messageReceived事件。
3.6IoFilter过滤器用于悬接通讯层接口与业务层接口。
IoFilter是MINA核心构造之一,扮演非常重要的角色。
它过滤所有的I/O事件和请求,这些事件和请求由IoService最终到达IoHandler。
过滤器的生命周期:
一个过滤器只有当它处于过滤器链中时才会起过滤作用。
当添加一个过滤器到过滤器链时:
a.ReferenceCountingIoFilter在第一时间调用init()方法。
b.调用onPreAdd方法来告知程序,一个过滤器将被添加到过滤器链中。
c.当过滤器被添加到过滤器链后,所有的事件和I/O请求都会通过过滤器到达IoHandler。
d.调用onPostAdd方法来告知程序,一个过滤器已被添加到过滤器链中。
e.当onPostAdd方法抛出异常时,过滤器将会从过滤器链中被删除,如果这个过滤器是整个过滤器链中的最后一个,那么ReferenceCountingIoFilter将会调用destory()销毁该过滤器。
当从过滤器链中移除过滤器时:
a.调用onPreRemove方法来告知程序,一个过滤器将会从过滤器链中被移除。
b.过滤器从过滤器链中被移除后后,所有的事件和I/O请求都不会通过该过滤器到达IoHandler。
c.调用onPostRemove方法来告知程序,一个过滤器已经从过滤器链中被移除。
d.当这个过滤器是过滤器链中的最后一个过滤器时,那么ReferenceCountingIoFilter将会调用destory()销毁该过滤器。
嵌套类
staticinterface
IoFilter.NextFilter
RepresentsthenextIoFilterinIoFilterChain.
过滤器链中的下个过滤器。
Staticclass
IoFilter.WriteRequest
RepresentswriterequestfiredbyIoSession.write(Object).
由IoSession.write(Object)发出的写请求。
方法
void
destroy()
销毁此过滤器。
由ReferenceCountingIoFilter调用
void
exceptionCaught(IoFilter.NextFilternextFilter,IoSessionsession,Throwablecause)
过滤IoHandler中的exceptionCaught事件。
void
filterClose(IoFilter.NextFilternextFilter,IoSessionsession)
过滤IoSession.close()方法。
void
filterWrite(IoFilter.NextFilternextFilter,IoSessionsession,IoFilter.WriteRequest
过滤IoSession.write(Object)方法。
void
init()
当过滤器被添加到过滤器链中后调用该方法,这样可以在第一时间为其分配资源。
由ReferenceCountingIoFilter调用
void
messageReceived(IoFilter.NextFilternextFilter,IoSessionsession,Objectmessage)
过滤Iohandler中的messageReceived事件。
void
messageSent(IoFilter.NextFilternextFilter,IoSessionsession,Objectmessage)
过滤Iohandler中的messageSent事件。
void
onPostAdd(IoFilterChainparent,Stringname,IoFilter.NextFilternextFilter)
在这个过滤器被添加到过滤器链之后调用此方法。
void
onPostRemove(IoFilterChainparent,Stringname,IoFilter.NextFilternextFilter)
在这个过滤器从过滤器链中被删除之后调用此方法。
void
onPreAdd(IoFilterChainparent,Stringname,IoFilter.NextFilternextFilter)
在这个过滤器被添加到过滤器链之前调用此方法。
void
onPreRemove(IoFilterChainparent,Stringname,IoFilter.NextFilternextFilter)
在这个过滤器从过滤器链中被删除之前调用此方法。
void
sessionClosed(IoFilter.NextFilternextFilter,IoSessionsession)
过滤IoHandler中的sessionClosed事件。
void
sessionCreated(IoFilter.NextFilternextFilter,IoSessionsession)
过滤IoHandler中的sessionCreated事件。
void
sessionIdle(IoFilter.NextFilternextFilter,IoSessionsession,IdleStatusstatus)
过滤IoHandler中的sessionIdle事件。
void
sessionOpened(IoFilter.NextFilternextFilter,IoSessionsession)
过滤IoHandler中的sessionOpened事件。
MINA自身带有一些常用的过滤器,例如codec(字符编号)、LoggingFilter(日志记录)、BlackListFilter(黑名单过滤)、CompressionFilter(压缩)、SSLFilter(SSL加密)等
IoFilterAdapter(过滤器适配器),这个类只实现了IoFilter接口中的方法,但是方法中并没有做任何事。
BlackListFilter(黑名单过滤器)是IoFileter的一个实现类,作用是将远程客户端添加到黑名单中后,该客户端就会访问不到服务器。
MethodSummary
void
block(InetAddressaddress)
将指定地址的计算机添加黑名单中。
void
block(InetAddressaddress,Stringerror_string)
将指定地址的计算机添加黑名单中。
void
setBlacklist(Collection
将多个指定地址添加到黑名单中。
void
setBlacklist(InetAddressaddresses)
将多个指定地址添加到黑名单中。
void
unblock(InetAddressaddress)
将指定地址的计算机添加黑名单中
程序见附件:
LoggingFilter(日志过滤器),将此过滤器加到过滤器链中后就可以实现MINA的日志功能。
程序见附件:
ProtocolCodecFilter(协议编解码过滤器),通过ProtocolCodecFactory,ProtocolEncoder,或ProtocolDecoder该过滤器可以实现普通的二进制或特殊的协议数据与POJO之间的相互转换。
程序见附件:
构造方法
ProtocolCodecFilter(Class
extendsProtoco
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Mina 使用手册
![提示](https://static.bdocx.com/images/bang_tan.gif)