因最近准备了解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和线程池是重点。当中还有好些巧妙的编码细节值得我去深入了解,后面再继续边看边写笔记吧~
相关推荐
### Mina2.0阅读源码笔记知识点梳理 #### 一、Mina 概述与官方资源 **Mina** 是 Apache 基金会下的一个开源项目,它为开发者提供了一个高性能且易于使用的网络应用框架。Mina 的设计目标是帮助用户轻松地开发出高...
在本学习笔记中,我们将专注于MINA的子项目——FtpServer,它是实现FTP服务器功能的一个模块。 FTP(File Transfer Protocol)是一种广泛使用的互联网协议,用于在不同主机之间传输文件。Apache MINA FtpServer提供...
《mina学习笔记》 ...综上,学习MINA不仅可以提升网络编程的能力,还能为开发高并发、高性能的网络应用打下坚实基础。通过阅读这些学习资料,读者将能够逐步掌握MINA的精髓,从而在实际项目中发挥出其强大功能。
### MINA学习笔记 #### MINA概述 MINA是一个用Java编写的高性能、轻量级的网络通信框架,主要用于简化网络编程的复杂性。它支持多种传输协议(如TCP/IP和UDP/IP),并且提供了一套丰富的API来处理网络通信相关的...
**Mina 学习笔记(入门)** Apache Mina 是一个高度可扩展的网络通信框架,主要用于构建高性能、高效率的服务器端应用。它提供了一种简单的方式来处理网络协议,如TCP/IP和UDP/IP,以及SSL/TLS加密的连接。在本学习...
标题 "MINA" 指的是 Apache MINA (Multipurpose Infrastructure for Network Applications),这是一个由...通过学习MINA的源码、参考手册和实践经验,开发者可以掌握网络编程的核心技术,并提升项目开发的效率和质量。
自己整理的一些mina学习资料,内含MINA官方教程(中文版).docx,MINA-2.0.0-M4.chm(英文版),Apache_Mina_Server_2.0中文参考手册V1.0.pdf, 还有mina的包
Apache FTPServer是一款开源的FTP服务器软件,它是Apache MINA项目的一部分,用于构建高性能、可扩展的网络应用。这篇笔记主要围绕Apache FTPServer的使用、配置和相关开发进行讲解。 首先,Apache FTPServer提供了...