【源码学习】Mina笔记 (一)

11 篇文章 0 订阅
8 篇文章 0 订阅

        因最近准备了解Apache Vysper的源码,而vysper又依赖于Mina,所以又想重新看看mina。之所以说是重新看,是因为一两年前也有看过,不过也没做啥笔记,好些细节都忘记了,这次就边看边做笔记好了。

 

        Apache Vysper是Mina项目下的子项目,实现了大部分的XMPP协议(当前最新版本是0.7),而Mina是一个使用Java Nio来实现的高性能异步网络编程组件,自身基于事件驱动模型来开发。

 

        在Mina里面,最主要的就是NioSocketAcceptor,NioSocketConnector和NioProcessor,把握这几个类的实现就能从整体上把握mina的结构了。

        1) NioSocketAcceptor是用来编写服务器端程序的,它会间接创建一个实现了Runnable接口的Acceptor内部类,也会间接创建包含NioProcessor实例的处理池SimpleIoProcessorPool,接着由线程池调度Acceptor等待客户端的连接到来。当有客户端连接过来了,Acceptor开始处理,从SimpleIoProcessorPool中获取一个NioProcessor,开始和客户端进行真正的数据通讯。

        2) NioSocketConnector的原理和NioSocketAcceptor类似,但它是用来编写客户端程序的,它没有Acceptor,取而代之的是一个Connector内部类,当成功连接到服务器时,也会从处理池SimpleIoProcessorPool中分配一个NioProcessor来处理具体的数据通讯。

        3) 数据通讯方面,Mina有一个叫做filter chain的东西(主要看看DefaultIoFilterChain),读数据或写数据都会经过chain,以完成数据的编码和解码。

                a) 读取数据时,会从HeadFilter开始,经历中间的filter chain之后到达TailFilter,然后触发messageReceived方法来直接调用用户自定义的IoHandler。

                b) 写数据时会反过来,从TailFilter开始,经历中间的filter chain完成数据编码到达HeadFilter,把数据写到缓冲队列中,接着尝试唤醒selector,触发NioProcessor负责具体的数据(Write the pending requests)。

 

        大体的框架结构就是这样,nio和线程池是重点。当中还有好些巧妙的编码细节值得我去深入了解,后面再继续边看边写笔记吧~

 

        发布在 http://auzll.iteye.com

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值