Mina2.0框架技术详解

Mina是一个主要对基于TCP/IP、UDP/IP协议栈的主流网络通信应用框架,被支付宝等商用产品使用多年,可以帮助我们快速开发高性能、高扩展性的网络通信应用。Mina 提供了事件驱动、异步(Mina 的异步IO使用的是JAVA NIO 作为底层支持)操作的变成模型。它同时对网络通信的Server 端、Client 端的进行了封装,这样,开发者只需要关心数据的接受、发送以及业务处理即可。下面是其重要的几个接口:

  1. IoService:这个接口在一个线程上负责套接字的建立,拥有自己的Selector,监听是否有连接被建立。这个接口是服务端IoAcceptor、客户端IoConnector 的抽象,提供IO 服务和管理IoSession的功能。IoAcceptor进程用于监听客户端的连接,每监听一个端口建立一个线程,可以同时监听多个端口。IoConnector进程用于与服务端建立连接,每连接一个服务端就建立一个线程。这两种线程都是通过线程池建立的,我们可以在构建对象的时候就指定线程池类型,默认的线程池类型为newCachedThreadPool。
  2. IoProcessor:这个接口在另一个线程上,负责检查是否有数据在通道上读写和IO的处理,也就是说它也拥有自己的Selector,这是与我们使用JAVA NIO 编码时的一个不同之处。通常在JAVA NIO 编码中,我们都是使用一个Selector,也就是不区分IoService与IoProcessor 两个功能接口。另外,IoProcessor 负责调用注册在IoService 上的过滤器,并在过滤器链之后调用IoHandler。对于一个IoAcceptor或IoConnector线程对应一个IoProcessor线程,这个IoProcessor线程从IoProcessor线程池中取出,IoProcessor线程池的大小默认为机器的CPU核数+1。
  3. IoFilter:这个接口通常都是成组存在的,这些过滤器按照一定的顺序组成一条过滤器链,主要用于括日志输出、黑名单过滤、数据的编码与解码等。其中数据的encode 与decode是最为重要的、也是在使用Mina 时最主要关注的地方。

IoHandler:这个接口负责编写业务逻辑,也就是接收、发送数据的处理中心。

服务端工作流程:

  1. 通过SocketAcceptor 同客户端建立连接;
  2. 连接建立之后 I/O的读写交给了I/O Processor线程,I/O Processor是多线程的;
  3. 通过I/O Processor 读取的数据按照先后顺序经过IoFilterChain里所有配置的IoFilter,IoFilter进行消息的过滤,格式的转换;
  4. IoFilter链处理完毕后将数据交给 Handler  进行业务处理,完成了数据读取处理;
  5. 写入过程也是类似,只是刚好倒过来,通过IoSession.write 写出数据,然后Handler进行写入的业务处理,处理完成后交给IoFilterChain,进行消息过滤和协议的转换,最后通过 I/O Processor 将数据写出到 socket 通道。

Mina的业务实现流程:首先架构业务解码器树,然后将创建自定义解码器类进行解码。解码完毕后,调用自定义IoHandler类完成业务数据处理。

猜你喜欢

转载自blog.csdn.net/peter_changyb/article/details/81195604
今日推荐