Mina框架IoService通用抽象服务详解

  • 时间:
  • 浏览:1
  • 来源:uu快3玩法_uu快3新平台_棋牌

实际上最终在调用构建的土土办法buildFilterChain的前一天,将可能性组织到DefaultIoFilterChainBuilder 实例中的多个IoFilter实例再加到可能性构造的IoFilterChain中(如默认的DefaultIoFilterChain),一 个IoFilterChain实例能能 在IoService实例运行时被使用,下面是buildFilterChain土土办法的逻辑:

就像上方IoServiceListener与IoServiceListenerSupport的关系一样,IoFilter是通过另一 个工具类IoFilterChainBuilder来聚合起来,形成一有有有还还有一个IoFilter链。通过实现IoFilterChainBuilder 接口的DefaultIoFilterChainBuilder能能 对一组IoFilter进行创建。暗含的数据内外部如下所示:

IoConnector的接口定义,如下所示:

IoAcceptor与IoConnector抽象

IoConnector定义的操作基本是与连接到服务端的。同样,AbstractIoConnector实现了Connector接口定义的基本操作。以基于TCP的NIO通信为例,客户端和服务端有部分操作非常例如,如轮询SocketChannel检查是算不算事件触发,读写请求等,很久 ,客户端在AbstractIoConnector的抽象实现类AbstractPollingIoConnector中补救于此相关的逻辑。与NioSocketAcceptor对应,客户端有一有有有还还有一个NioSocketConnector实现类。

实际上,支持I/O操作服务的内容,集中在一有有有还还有一个类中:IoService和AbstractIoService,看一下类图:

当大伙儿创建一有有有还还有一个IoService实例时,可能性是服务器端的IoAccectpr,也可能性是客户端的IoConnector,能能 分别通过调用如下一有有有还还有一个土土办法来增加可能性移除一有有有还还有一个IoServiceListener:

通过上方IoAcceptor和IoConnector的说明,大伙儿还我可是知道具体I/O操作是由谁来补救的。实际上,无论是服务端还是客户端,在补救轮询通道的抽象服务中,封装了一有有有还还有一个IoProcessor抽象,它才是实际补救I/O操作的抽象部分。为了将通信的宏观抽象过程与通信过程中的补救细节分开,将IoProcessor独立出来,与宏观通信过程的逻辑解耦合。以基于TCP的NIO通信为例,在AbstractPollingIoAcceptor和AbstractPollingIoConnector中都会一有有有还还有一个IoProcessor实例(这里是实现类NioProcessor的实例),通过调用它提供的补救操作来完成实际的I/O操作。

IoService抽象

上方类图中,AbstractIoService实现了IoService接口中定义的操作,并肩增加了很久 属性字段,能能 通过那些字段看出,Mina框架IoService抽象服务层设计了那些数据内外部,用来辅助有关I/O操作的服务。大伙儿通过如下几条方面来详述:

根据上图中IoService接口定义,大伙儿给出接口中定义的土土办法,如下所示:

其中Entry包装了一有有有还还有一个IoFilter以及为其定义的名称。从IoFilterChainBuilder的名称来看,它可是关注一有有有还还有一个 IoFilterChain如保创建,而不关心一组注册的IoFilter调用顺序,可是关心被指定事件被触发时调用哪个操作,那些逻辑是由 IoFilterChain来定义,并通过实现你是什么 接口的DefaultIoFilterChain类实现的。当大伙儿调用DefaultIoFilterChainBuilder 实例的有关操作IoFilter的土土办法,如下所示(在DefaultIoFilterChainBuilder中实现):

通过接口中定义的土土办法名,能能 了解到,一有有有还还有一个IoService监听器都负责监听那些事件。

管理服务于IoService的IoServiceListener,主可是通过IoServiceListenerSupport类,这 个类中定义了如下内外部:

每当有一有有有还还有一个新的会话被创建,及使用了IoService提供的服务,就对应创建了一有有有还还有一个IoSession实例,很久 ,与IoSession 相关的很久 实时数据前要在内存中保存,以便IoService实例才能随时访问并对该会话实例提供前要的I/O读写服务。Mina定义了 IoSessionDataStructureFactory,来保存会话相关数据,你是什么 内外部提供了如下一有有有还还有一个土土办法:

每个IoService都对应你是什么 有有有还还有一个Executor,用来补救被触发的I/O事件。

大伙儿能能 看完,IoService主要定义了两类服务,一类是提供I/O操作相关服务,另一类是会话 (IoSession)相关服务,这两类服务,无论是在服务端还是在客户端,都会提供,以此来保证双方通信。那么,具体地这两类服务中都包括那些内容,大伙儿总结如下:

一有有有还还有一个IoServiceListener定义如下操作:

IoAcceptor和IoConnector可能性区分I/O操作相关的不同服务了,作为通信的服务器端和客户端,必然处在很久 差异服务来维持该人在通信过程中的角色,比如,IoAcceptor前要监听指定服务端口,等待的图片 客户端的连接到服务器端,而IoConnector与服务器端进行通信,首先应该连接到服务器端Socket暴露的服务地址。下面,大伙儿分别根据通信双方的你是什么种不同角色,来深入讨论很久 细节。

与一有有有还还有一个IoSession有关的数据,都会上方的内外部中保存着。其中主要暗含两类:一类是用户在启动会话时定义的属性集合,另一类是会话期 间可能性前要进行读写操作。每个IoSession实例调用write土土办法的前一天,都会对应你是什么 有有有还还有一个WriteRequest对象,封装了写请求数据。而提供I/O服务的IoService实例在运行都会把对应的WriteRequest对象中放/移出IoSessionDataStructureFactory 内外部所持有的队列。

能能 看完上方定义的土土办法中,主可是与IP地址相关的操作,主要包括绑定和解绑定,那些操作的实现是在该接口的抽象实现类AbstractIoAcceptor中给予实现的,在AbstractIoAcceptor中并那么涉及到有关SocketChannel的I/O操作,有关如保基于轮询的策略去检查SocketChannel是算不算相应的事件被触发,那些I/O相关的操作被封塞进去AbstractPollingIoAcceptor类中。以基于TCP的NIO通信为例,具体接收客户端到来的连接请求,那些逻辑是在AbstractPollingIoAcceptor的实现类NioSocketAcceptor中实现的,这里创建了用来管理与客户端通信的NioSocketSession对象(它是IoSession的NIO实现)。

也可是说,IoFilterChainBuilder是供使用Mina框架的开发网络应用系统进程的人员组织IoFilter链的,它可是一有有有还还有一个运行前构建工具;而IoFilterChain是Mina框架运行服务所前要的,即是一有有有还还有一个运行时辅助管理IoFilter链调用的工具。

从IoAcceptor接口定义,能能 很好地看出它具有的很久 基本操作,如下所示:

最终使用的Acceptor和Connector是上方继承层次中最下层的实现类。

能能 看出,上方土土办法中的IoSessionAttributeMap和WriteRequestQueue都会与一有有有还还有一个IoSession相 关的数据对象,大伙儿能能 看一下,这几条类之间的关系,如图所示: