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

  • 时间:
  • 浏览:2
  • 来源:uu快3下载网址_uu快3IOS下载_电脑版

实际上最终在调用构建的土土措施buildFilterChain的很久,将可能组织到DefaultIoFilterChainBuilder 实例中的多个IoFilter实例添加到可能构造的IoFilterChain中(如默认的DefaultIoFilterChain),一 个IoFilterChain实例须要在IoService实例运行时被使用,下面是buildFilterChain土土措施的逻辑:

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

根据上图中IoService接口定义,让让让当当我们 给出接口中定义的土土措施,如下所示:

通过接口中定义的土土措施名,须要了解到,另另另有几块IoService监听器都负责监听哪些事件。

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

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

另另另有几块IoServiceListener定义如下操作:

IoService抽象

每个IoService都对应这另另另有几块Executor,用来防止被触发的I/O事件。

每当有另另另有几块新的会话被创建,及使用了IoService提供的服务,就对应创建了另另另有几块IoSession实例,因此 ,与IoSession 相关的或多或少实时数据须要在内存中保存,以便IoService实例有有助于随时访问并对该会话实例提供须要的I/O读写服务。Mina定义了 IoSessionDataStructureFactory,来保存会话相关数据,五种社会形态提供了如下另另另有几块土土措施:

与另另另有几块IoSession有关的数据,都有上方的社会形态中保存着。其中主要包含 两类:一类是用户在启动会话时定义的属性集合,另一类是会话期 间可能须要进行读写操作。每个IoSession实例调用write土土措施的很久,都有对应这另另另有几块WriteRequest对象,封装了写请求数据。而提供I/O服务的IoService实例在运行都有把对应的WriteRequest对象塞进去 /移出IoSessionDataStructureFactory 社会形态所持有的队列。

其中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实现)。

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

IoAcceptor与IoConnector抽象

须要看出,上方土土措施中的IoSessionAttributeMap和WriteRequestQueue都有与另另另有几块IoSession相 关的数据对象,让让让当当我们 须要看一下,这几块类之间的关系,如图所示:

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

从IoAcceptor接口定义,须要很好地看出它具有的或多或少基本操作,如下所示:

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

让让当当当当我们 创建另另另有几块IoService实例时,可能是服务器端的IoAccectpr,也可能是客户端的IoConnector,须要分别通过调用如下另另另有几块土土措施来增加可能移除另另另有几块IoServiceListener:

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

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

上方类图中,AbstractIoService实现了IoService接口中定义的操作,一并增加了或多或少属性字段,须要通过哪些字段看出,Mina框架IoService抽象服务层设计了哪些数据社会形态,用来辅助有关I/O操作的服务。让让让当当我们 通过如下几块方面来详述:

IoAcceptor和IoConnector可能区分I/O操作相关的不同服务了,作为通信的服务器端和客户端,必然位于或多或少差异服务来维持人及 在通信过程中的角色,比如,IoAcceptor须要监听指定服务端口,等待客户端的连接到服务器端,而IoConnector与服务器端进行通信,首先应该连接到服务器端Socket暴露的服务地址。下面,让让让当当我们 分别根据通信双方的这一种不同角色,来深入讨论或多或少细节。

也很久说,IoFilterChainBuilder是供使用Mina框架的开发网络应用任务管理器池池的人员组织IoFilter链的,它很久另另另有几块运行前构建工具;而IoFilterChain是Mina框架运行服务所须要的,即是另另另有几块运行时辅助管理IoFilter链调用的工具。