Mina原理草图及注释

from:http://daimojingdeyu.iteye.com/blog/884740

今天先画一个草图备忘,明天再注释一下。

 

 

上图是Mina的Server端内部运行图,Client处表示外部的客户端通过Socket建立连接。

图中IoAcceptor对应NioSocketAcceptor类,是用来接受Socket请求的。

 

图中用灰色的齿轮表示,小齿轮表示他一直可以干活,运转不息。黄色的小齿轮则表示一个运行在线程池上的任务,表示它是运转在线程池之上的。

 

1、服务端在创建NioSocketAcceptor实现时,会生成一个线程池,此线程池用来执行一个接受请求的任务,这个任务叫Acceptor(可以在AbstractPollingIoAcceptor类中找到其实现类),Acceptor会开一个Selector,用来监听NIO中的ACCEPT事件。任务初始化时并没有执行,而在调用NioSocketAcceptor实例的bind方法时,则会启动对指定端口的ACCEPT事件的监听。

 

2、SimpleIoProcessorPool是在NioSocketAcceptor实例化时创建的,其上有N+1(N=CPU的个数)个NIOProcessor来处理实际IO的读写事件,每个NIOProcessor都会对应一个Selector,来监听Socket中的读写事件。实际对读写的操作也是在一个SimpleIoProcessorPool实例化好的一个线程池中以任务的形式执行,这个任务叫Processor(可以在AbstractPollingIoProcessor类中找到其实现)。

 

1、2中都有提到Selector,这也就是Mina中处理IO事件引入的双Selector的模型,是对Reactor模式的扩展。

下图展示了Mina中reactor模型:

 

而传统的reactor模型则如下:

 

 

一次请求的过程如下:

Client通过Socket连接服务器,先是由Acceptor接收到请求连接的事件(即ACCEPT事件)。此事件由Acceptor进行处理,会创建一条Socket连接,并将此连接和一个NIOProcessor关联,这个过程通过图中的 连接分配器 进行,连接分配器会均衡的将Socket和不同的NIOProcessor绑定(轮流分配),绑定完成后,会在NIOProcessor上进行读写事件的监听,而读写的实际处理则分配给Processor任务完成。当有读写事件发生时,就会通知到对应的Processor进行数据处理。

 

先写这么多吧,可以结合Mina的代码来看一下上面的流程。个人理解,希望对想对Mina了解的兄弟有点帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值