Mina文档Word格式.docx
《Mina文档Word格式.docx》由会员分享,可在线阅读,更多相关《Mina文档Word格式.docx(31页珍藏版)》请在冰点文库上搜索。
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<
SocketAddress>
getManagedServiceAddresses()
ReturnsallSocketAddressesthisserviceismanaging.
返回当前service所管理的所有的Socket地址
IoSession>
getManagedSessions(SocketAddressserviceAddress)
Returnsallsessionswiththespecifiedremoteorlocaladdress,whicharecurrentlymanagedbythisservice.
返回当前service管理的指定地址的所有session回话。
boolean
isManaged(SocketAddressserviceAddress)
ReturnstrueifthisserviceismanagingthespecifiedserviceAddress.
给定一个Socket地址,如果当前service正在管理这个地址,则返回真。
removeListener(IoServiceListenerlistener)
RemovedanexistingIoServiceListenerthatlistensanyeventsrelatedwiththisservice.
移除指定监听器。
setFilterChainBuilder(IoFilterChainBuilderbuilder)
SetstheglobalIoFilterChainBuilderwhichwillmodifytheIoFilterChainofallIoSessionswhichismanagedbythisservice.
设置一个全局的IoFilterChainBuilder(过滤器链构建器,暂时这么翻译),这个构建器可以修改与当前service相关的所有session的过滤器链。
3.2IoAcceptor相当于网络应用程序中的服务器端
bind(SocketAddressaddress,IoHandlerhandler)
绑定服务器到指定的地址(address),并指定处理器(handler)来处理接入的链接。
bind(SocketAddressaddress,IoHandlerhandler,IoServiceConfigconfig)
设置服务器的设置(config),绑定服务器到指定的地址(address),并指定处理器(handler)来处理接入的链接。
IoSession
newSession(SocketAddressremoteAddress,SocketAddresslocalAddress)
(可选)在本地(localAddress)与远程(remoteAddress)处于链接的情况下,获取一个建立在它们之间的新的会话。
unbind(SocketAddressaddress)
解除服务器与指定地址的绑定,并断开所有与此服务器链接的客户端。
unbindAll()
解除所有由当前acceptor绑定的所有地址。
程序见4.1附件。
3.3IoConnector相当于客户端
IoConnector中的方法
ConnectFuture
connect(SocketAddressaddress,IoHandlerhandler)
Connectstothespecifiedaddress.
连接到指定地址的服务器。
connect(SocketAddressaddress,IoHandlerhandler,IoServiceConfigconfig)
connect(SocketAddressaddress,SocketAddresslocalAddress,IoHandlerhandler)
connect(SocketAddressaddress,SocketAddresslocalAddress,IoHandlerhandler,IoServiceConfigconfig)
示例程序见附件:
3.4IoSession当前客户端到服务器端的一个连接实例
CloseFuture
close()
关闭当前会话。
IoFilterChain
获取当前会话的过滤器链。
IoHandler
getHandler()
获取当前会话的处理器。
SocketAddress
getLocalAddress()
获取与当前会话链接的本地地址。
getRemoteAddress()
获取链接到当前会话的远程计算机地址。
WriteFuture
write(Objectmessage)
发送指定的message到远程计算机。
3.5IoHandler业务处理逻辑
该接口有五个实现类ChainedIoHandler,DemuxingIoHandler,IoHandlerAdapter,SingleSessionIoHandlerDelegate,StreamIoHandler。
其中ChainedIoHandler,DemuxingIoHandler,StreamIoHandler实现了接口,并继承了IoHandlerAdapter,IoHandlerAdapter实现了接口的所有方法,但是在方法中并没有做什么,我们可以继承它,根据需要有选择的重写其中的方法。
一个IoHandler接口具有如下一些方法:
exceptionCaught(IoSessionsession,Throwablecause)
当接口中其他方法抛出异常未被捕获时触发此方法
messageReceived(IoSessionsession,Objectmessage)
当接收到客户端的请求信息后触发此方法.
messageSent(IoSessionsession,Objectmessage)
当信息已经传送给客户端后触发此方法.
sessionClosed(IoSessionsession)
当连接被关闭时触发,例如客户端程序意外退出等等.
sessionCreated(IoSessionsession)
当一个新客户端连接后触发此方法.
sessionIdle(IoSessionsession,IdleStatusstatus)
当连接空闲时触发此方法.
sessionOpened(IoSessionsession)
当连接后打开时触发此方法,一般此方法与sessionCreated会被同时触发
StreamIoHandler类提供了基于流的I/O支持,继承这个类并实现processStreamIo(IoSessionsession,InputStreamin,OutputStreamout)方法来执行I/O操作:
protectedabstractvoid
processStreamIo(IoSessionsession,InputStreamin,OutputStreamout)
实现这个方法来执行你的流I/O操作。
DemuxingIoHandler将接收事件分离到指定的MessageHandler中。
<
E>
MessageHandler<
?
superE>
addMessageHandler(Class<
type,MessageHandler<
handler)
注册一个MessageHandler用来接收指定类型的message
getMessageHandler(Class<
type)
获取一个已注册的用来处理指定类型的MessageHandler
Map<
Class,MessageHandler>
getMessageHandlerMap()
返回在此handler中注册的所有MessageHandler的Map,以键值对的形式(Type-MessageHandler)。
messageReceived(IoSessionsession,Objectmessage)
将接收事件引入到一个指定的MessageHandler中。
removeMessageHandler(Class<
type)
注销一个指定类型的MessageHandler。
ChainedIoHandler
构造方法
ChainedIoHandler()
CreatesanewinstancewhichcontainsanemptyIoHandlerChain.
创建一个含有空的IoHandlerChain的实例。
ChainedIoHandler(IoHandlerChainchain)
CreatesanewinstancewhichexecutesthespecifiedIoHandlerChainonamessageReceivedevent.
创建一个含有指定IoHandlerChain的实例。
MethodSummary
IoHandlerChain
getChain()
ReturnstheIoHandlerCommandthishandlerwillusetohandlemessageReceivedevents.
返回一个用来处理messageReceived事件的IoHandlerChain
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)发出的写请求。
方法
destroy()
销毁此过滤器。
由ReferenceCountingIoFilter调用
exceptionCaught(IoFilter.NextFilternextFilter,IoSessionsession,Throwablecause)
过滤IoHandler中的exceptionCaught事件。
filterClose(IoFilter.NextFilternextFilter,IoSessionsession)
过滤IoSession.close()方法。
filterWrite(IoFilter.NextFilternextFilter,IoSessionsession,IoFilter.WriteRequest
过滤IoSession.write(Object)方法。
init()
当过滤器被添加到过滤器链中后调用该方法,这样可以在第一时间为其分配资源。
messageReceived(IoFilter.NextFilternextFilter,IoSessionsession,Objectmessage)
过滤Iohandler中的messageReceived事件。
messageSent(IoFilter.NextFilternextFilter,IoSessionsession,Objectmessage)
过滤Iohandler中的messageSent事件。
onPostAdd(IoFilterChainparent,Stringname,IoFilter.NextFilternextFilter)
在这个过滤器被添加到过滤器链之后调用此方法。
onPostRemove(IoFilterChainparent,Stringname,IoFilter.NextFilternextFilter)
在这个过滤器从过滤器链中被删除之后调用此方法。
onPreAdd(IoFilterChainparent,Stringname,IoFilter.NextFilternextFilter)
在这个过滤器被添加到过滤器链之前调用此方法。
onPreRemove(IoFilterChainparent,Stringname,IoFilter.NextFilternextFilter)
在这个过滤器从过滤器链中被删除之前调用此方法。
sessionClosed(IoFilter.NextFilternextFilter,IoSessionsession)
过滤IoHandler中的sessionClosed事件。
sessionCreated(IoFilter.NextFilternextFilter,IoSessionsession)
过滤IoHandler中的sessionCreated事件。
sessionIdle(IoFilter.NextFilternextFilter,IoSessionsession,IdleStatusstatus)
过滤IoHandler中的sessionIdle事件。
sessionOpened(IoFilter.NextFilternextFilter,IoSessionsession)
过滤IoHandler中的sessionOpened事件。
MINA自身带有一些常用的过滤器,例如codec(字符编号)、LoggingFilter(日志记录)、BlackListFilter(黑名单过滤)、CompressionFilter(压缩)、SSLFilter(SSL加密)等
IoFilterAdapter(过滤器适配器),这个类只实现了IoFilter接口中的方法,但是方法中并没有做任何事。
BlackListFilter(黑名单过滤器)是IoFileter的一个实现类,作用是将远程客户端添加到黑名单中后,该客户端就会访问不到服务器。
block(InetAddressaddress)
将指定地址的计算机添加黑名单中。
block(InetAddressaddress,Stringerror_string)
setBlacklist(Collection<
InetAddress>
addresses)
将多个指定地址添加到黑名单中。
setBlacklist(InetAddressaddresses)
unblock(InetAddressaddress)
将指定地址的计算机添加黑名单中
程序见附件:
LoggingFilter(日志过滤器),将此过滤器加到过滤器链中后就可以实现MINA的日志功能。
ProtocolCodecFilter(协议编解码过滤器),通过ProtocolCodecFactory,ProtocolEncoder,或ProtocolDecoder该过滤器可以实现普通的二进制或特殊的协议数据与POJO之间的相互转换。
ProtocolCodecFilter(Class<
extendsProtocolEnc