ApacheMina2-(2)MINA工作模式
ApacheMINA2 工作模式
我们看一下Mina服务端的结构图

1, IO Acceptor 监听网络端口,获得对应的连接请求 connection,及数据包 packet
2, 当一个连接请求发出,会为此请求创建一个会话session,对于以后来源于此ip及端口的请求,都会通过该会话session进行处理
3, 所有session获得的数据包,会通过过滤链(Filter Chain)中的过滤器进行处理,已过滤,转换成可用的数据包(如,转换成对象,对数据进行一些逻辑处理),将低层数据转为高层对象。这时候,有些编码器,解码器就显得很有用了。
4, 最终,被转换后的对象,会交给IOHander层处理,IOHandler
客户端结构图

1, 客户端首先要创建一个IOConnector(mina对应Socket的封装),初始化与服务器对应端口的连接
2, 当连接创建,会创建对应session,并将session赋予此连接
3, 应用/客户端,通过会话向服务器端发送数据,当然数据要经过过滤链的处理后
4, 所有服务器端返回的数据,也是要经过过滤链的处理,最终交给IOHandler进行处理
所以我们无论从哪一端看,都是遵循以下流程

对上图中每一个组件进行说明:
1,IoService:这个接口在一个线程上负责套接字的建立,拥有自己的 Selector,监听是否有连接被建立。
2,IoProcessor:这个接口在另一个线程上负责检查是否有数据在通道上读写,也就是说它也拥有自己的 Selector,这是与我们使用 JAVA NIO 编码时的一个不同之处,通常在 JAVA NIO 编码中,我们都是使用一个 Selector,也就是不区分 IoService与 IoProcessor 两个功能接口。另外,IoProcessor 负责调用注册在 IoService 上的过滤器,并在过滤器链之后调用 IoHandler。
3,IoFilter:这个接口定义一组拦截器,这些拦截器可以包括日志输出、黑名单过滤、数据的编码(write 方向)与解码(read 方向)等功能,其中数据的 encode 与 decode是最为重要的、也是你在使用 Mina 时最主要关注的地方。
4,IoHandler:这个接口负责编写业务逻辑,也就是接收、发送数据的地方。
你没有理由放弃你的理想

浙公网安备 33010602011771号