Apache MINA 基础知识
官方网站:http://mina.apache.org/
Apache Mina是一个能够帮助用户开发高性能和高伸缩性网络应用程序的框架。它通过Java nio技术基于TCP/IP和UDP/IP协议提供了抽象的、事件驱动的、异步的API。
Apache MINA 也称为:
简单地来讲,就分为三层:
- I/O Service :负责处理I/O。
- I/O Filter Chain :负责编码处理,字节到数据结构或数据结构到字节的转换等,即非业务逻辑的操作。
- I/O Handle :负责处理业务逻辑。
Mina几个重要接口:
- IoServiece :这个接口在一个线程上负责套接字的建立,拥有自己的 Selector,监听是否有连接被建立。
- IoProcessor :这个接口在另一个线程上负责检查是否有数据在通道上读写,也就是说它也拥有自己的 Selector,这是与我们使用 JAVA NIO 编码时的一个不同之处,通常在 JAVA NIO 编码中,我们都是使用一个 Selector,也就是不区分 IoService与 IoProcessor 两个功能接口。另外,IoProcessor 负责调用注册在 IoService 上的过滤器,并在过滤器链之后调用 IoHandler。
- IoAccepter :相当于网络应用程序中的服务器端
- IoConnector :相当于客户端
- IoSession :当前客户端到服务器端的一个连接实例
- IoHandler :这个接口负责编写业务逻辑,也就是接收、发送数据的地方。这也是实际开发过程中需要用户自己编写的部分代码。
- IoFilter :过滤器用于悬接通讯层接口与业务层接口,这个接口定义一组拦截器,这些拦截器可以包括日志输出、黑名单过滤、数据的编码(write 方向)与解码(read 方向)等功能,其中数据的 encode与 decode是最为重要的、也是你在使用 Mina时最主要关注的地方。
客户端的通信过程:
- 通过SocketConnector同服务器端建立连接。
- 链接建立之后I/O的读写交给了I/O Processor线程,I/O Processor是多线程的。
- 通过I/O Processor读取的数据经过IoFilterChain里所有配置的IoFilter,IoFilter进行消息的过滤,格式的转换,在这个层面可以制定一些自定义的协议。
- 最后IoFilter将数据交给Handler进行业务处理,完成了整个读取的过程。
- 写入过程也是类似,只是刚好倒过来,通过IoSession.write写出数据,然后Handler进行写入的业务处理,处理完成后交给IoFilterChain,进行消息过滤和协议的转换,最后通过I/O Processor将数据写出到socket通道。
IoFilterChain作为消息过滤链
- 读取的时候是从低级协议到高级协议的过程,一般来说从byte字节逐渐转换成业务对象的过程。
- 写入的时候一般是从业务对象到字节byte的过程。
相关参考资料链接:
http://my.oschina.net/ielts0909/blog?catalog=253154
http://www.blogjava.net/mikechen/archive/2012/03/15/371938.html
http://dxf1122.blog.163.com/blog/static/54041004200931371414356/
http://blog.sina.com.cn/s/blog_7abc61de0100sdoi.html
http://mina.apache.org/mina-project/documentation.html
http://wenku.baidu.com/view/b9af67c34028915f804dc292.html
http://wenku.baidu.com/view/46800bce0508763231121232.html
http://wenku.baidu.com/view/5ccc7935b90d6c85ec3ac6e7.html