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

  • 时间:
  • 浏览:3
  • 来源:彩神欢乐生肖_神彩欢乐生肖官方

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

管理服务于IoService的IoServiceListener,主若果通过IoServiceListenerSupport类,这 个类中定义了如下底部形态:

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

回会 看出,里面土办法中的IoSessionAttributeMap和WriteRequestQueue全部都是与有一三个小 IoSession相 关的数据对象,.我 回会 看一下,这几次类之间的关系,如图所示:

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

通过接口中定义的土办法名,回会 了解到,有一三个小 IoService监听器都负责监听哪几种事件。

IoService抽象

就像里面IoServiceListener与IoServiceListenerSupport的关系一样,IoFilter是通过另一 个工具类IoFilterChainBuilder来聚合起来,形成有一三个小 IoFilter链。通过实现IoFilterChainBuilder 接口的DefaultIoFilterChainBuilder回会 对一组IoFilter进行创建。包含的数据底部形态如下所示:

与有一三个小 IoSession有关的数据,全部都是里面的底部形态中保存着。其中主要包含两类:一类是用户在启动会话时定义的属性集合,另一类是会话期 间机会时需进行读写操作。每个IoSession实例调用write土办法的以前,全部都是对应这有一三个小 WriteRequest对象,封装了写请求数据。而提供I/O服务的IoService实例在运行全部都是把对应的WriteRequest对象倒进/移出IoSessionDataStructureFactory 底部形态所持有的队列。

IoAcceptor与IoConnector抽象

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

IoAcceptor和IoConnector机会区分I/O操作相关的不同服务了,作为通信的服务器端和客户端,必然存在某些差异服务来维持每每各自 在通信过程中的角色,比如,IoAcceptor时需监听指定服务端口,等待客户端的连接到服务器端,而IoConnector与服务器端进行通信,首先应该连接到服务器端Socket暴露的服务地址。下面,.我 分别根据通信双方的这并全部都是不同角色,来深入讨论某些细节。

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

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

.我 回会 看过,IoService主要定义了两类服务,一类是提供I/O操作相关服务,另一类是会话 (IoSession)相关服务,这两类服务,无论是在服务端还是在客户端,全部都是提供,以此来保证双方通信。没法,具体地这两类服务中都包括哪几种内容,.我 总结如下:

其中Entry包装了有一三个小 IoFilter以及为其定义的名称。从IoFilterChainBuilder的名称来看,它若果关注有一三个小 IoFilterChain如何创建,而不关心一组注册的IoFilter调用顺序,若果关心被指定事件被触发时调用哪个操作,哪几种逻辑是由 IoFilterChain来定义,并通过实现并全部都是接口的DefaultIoFilterChain类实现的。当.我 调用DefaultIoFilterChainBuilder 实例的有关操作IoFilter的土办法,如下所示(在DefaultIoFilterChainBuilder中实现):

当.我 创建有一三个小 IoService实例时,机会是服务器端的IoAccectpr,也机会是客户端的IoConnector,回会 分别通过调用如下有一三个小 土办法来增加机会移除有一三个小 IoServiceListener:

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

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

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

有一三个小 IoServiceListener定义如下操作:

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

里面类图中,AbstractIoService实现了IoService接口中定义的操作,一齐增加了某些属性字段,回会 通过哪几种字段看出,Mina框架IoService抽象服务层设计了哪几种数据底部形态,用来辅助有关I/O操作的服务。.我 通过如下几次方面来详述:

每当有有一三个小 新的会话被创建,及使用了IoService提供的服务,就对应创建了有一三个小 IoSession实例,若果,与IoSession 相关的某些实时数据时需在内存中保存,以便IoService实例才能随时访问并对该会话实例提供时需的I/O读写服务。Mina定义了 IoSessionDataStructureFactory,来保存会话相关数据,并全部都是底部形态提供了如下有一三个小 土办法:

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