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

  • 时间:
  • 浏览:4
  • 来源:大发快3官方网址—大发快3APP下载

就像顶端IoServiceListener与IoServiceListenerSupport的关系一样,IoFilter是通过另一 个工具类IoFilterChainBuilder来聚合起来,形成另另有一个 IoFilter链。通过实现IoFilterChainBuilder 接口的DefaultIoFilterChainBuilder还时要对一组IoFilter进行创建。中有 的数据社会形态如下所示:

实际上最终在调用构建的最好的方式buildFilterChain的也不,将因为组织到DefaultIoFilterChainBuilder 实例中的多个IoFilter实例添加到因为构造的IoFilterChain中(如默认的DefaultIoFilterChain),一 个IoFilterChain实例还时要在IoService实例运行时被使用,下面是buildFilterChain最好的方式的逻辑:

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

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

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

管理服务于IoService的IoServiceListener,主什么都我通过IoServiceListenerSupport类,这 个类中定义了如下社会形态:

还时要看出,顶端最好的方式中的IoSessionAttributeMap和WriteRequestQueue与非 与另另有一个 IoSession相 关的数据对象,朋友还时要看一下,这十哪几个 类之间的关系,如图所示:

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

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

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

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

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

根据上图中IoService接口定义,朋友给出接口中定义的最好的方式,如下所示:

IoAcceptor与IoConnector抽象

当朋友创建另另有一个 IoService实例时,因为是服务器端的IoAccectpr,也因为是客户端的IoConnector,还时要分别通过调用如下另另有一个 最好的方式来增加因为移除另另有一个 IoServiceListener:

与另另有一个 IoSession有关的数据,与非 顶端的社会形态中保存着。其中主要中有 两类:一类是用户在启动会话时定义的属性集合,另一类是会话期 间因为时要进行读写操作。每个IoSession实例调用write最好的方式的也不,都会对应这另另有一个 WriteRequest对象,封装了写请求数据。而提供I/O服务的IoService实例在运行都会把对应的WriteRequest对象中放/移出IoSessionDataStructureFactory 社会形态所持有的队列。

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

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

每个IoService都对应这另另有一个 Executor,用来除理被触发的I/O事件。

每当有另另有一个 新的会话被创建,及使用了IoService提供的服务,就对应创建了另另有一个 IoSession实例,因此,与IoSession 相关的有些实时数据时要在内存中保存,以便IoService实例要能随时访问并对该会话实例提供时要的I/O读写服务。Mina定义了 IoSessionDataStructureFactory,来保存会话相关数据,你你什儿 社会形态提供了如下另另有一个 最好的方式:

IoAcceptor和IoConnector因为区分I/O操作相关的不同服务了,作为通信的服务器端和客户端,必然占据 有些差异服务来维持其他人 在通信过程中的角色,比如,IoAcceptor时要监听指定服务端口,听候客户端的连接到服务器端,而IoConnector与服务器端进行通信,首先应该连接到服务器端Socket暴露的服务地址。下面,朋友分别根据通信双方的你什儿 种生活不同角色,来深入讨论有些细节。

IoService抽象

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

通过接口中定义的最好的方式名,还时要了解到,另另有一个 IoService监听器都负责监听什么事件。

顶端类图中,AbstractIoService实现了IoService接口中定义的操作,一并增加了有些属性字段,还时要通过什么字段看出,Mina框架IoService抽象服务层设计了什么数据社会形态,用来辅助有关I/O操作的服务。朋友通过如下十哪几个 方面来详述: