转自1:整体结构分析

http://www.cnblogs.com/xuekyo/archive/2013/03/06/2945826.html

转自2:详细源码分析

http://www.cnblogs.com/xuekyo/archive/2013/03/08/2950644.html

Mina设计基础简介

Apache Mina是一个能够帮助用户开发高性能和高伸缩性网络应用程序的框架。它通过Java nio技术基于TCP/IP和UDP/IP协议提供了抽象的、事件驱动的、异步的API。

Mina包的简介:

org.apache.mina.core.buffer 用于缓冲区的IoBuffer
org.apache.mina.core.service
org.apache.mina.transport.*
用于提供连接的service
org.apache.mina.core.session 用于提供两端状态的session
org.apache.mina.core.filterchain
org.apache.mina.filter.*
用于拦截所有IO事件和请求的filter chain和各类拦截器(在IoService和IoHandler之间)
org.apache.mina.handler.* 用于处理IO事件的handler
org.apache.mina.core.future 用于实现异步IO操作的 future
org.apache.mina.core.polling 用于实现IO轮询的的polling
org.apache.mina.proxy.* 用于实现代理的proxy

先介绍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时最主要关注的地方。

MIINA架构图

在图中的模块链中,IoService 便是应用程序的入口,相当于我们前面代码中的 IoAccepter,IoAccepter 便是 IoService 的一个扩展接口。IoService 接口可以用来添加多个 IoFilter,这些 IoFilter 符合责任链模式并由 IoProcessor 线程负责调用。而 IoAccepter 在 ioService 接口的基础上还提供绑定某个通讯端口以及取消绑定的接口。

简单地来讲,就分为三层:

  1. I/O Service :负责处理I/O。
  2. I/O Filter Chain :负责编码处理,字节到数据结构或数据结构到字节的转换等,即非业务逻辑的操作。
  3. I/O Handle :负责处理业务逻辑。

Mina核心类图

最新文章

  1. Windows forfiles(删除历史文件)
  2. Notepad++ 实用技巧
  3. 使用 7za.exe 打包文件
  4. centos 下如何加入sudo 用户
  5. IOS中货币高精度要求使用NSDecialNumber、
  6. 《c程序设计语言》读书笔记-字符型0-9转为数字0-9
  7. PHP简单MVC架构
  8. Android Training精要(二)開啟ActionBar的Overlay模式
  9. WINFORM实现进程信息的查看,listview,点击,右键,右键菜单
  10. 由PHP实现单向链表引发的对象赋值,对象传参,链表操作引发的一系列问题
  11. 爬虫——selenium基础
  12. Windows BAT 命令下del 与 rd 命令
  13. 欧拉函数(C语言实现)
  14. 【代码笔记】Web-ionic-select
  15. Dubbo(5)优化:接口抽取以及依赖版本统一
  16. Android帧布局<TabHost>标签
  17. mysql 批处理文件出错后继续执行
  18. SDPA: Toward a Stateful Data Plane in Software-Defined Networking
  19. Spring-初识Spring框架-IOC控制反转(DI依赖注入)
  20. oracle 插入单引号

热门文章

  1. 运用JMX监控Tomcat
  2. Hibernate 使用log4j输出日志
  3. Oracle中sign/decode/nvl/round/trunc/(+)/instr/substr/replace解释
  4. 关于spring中<context:component-scan base-package="" />写法
  5. 在需要隐藏navigationController控制器
  6. java的学习之路01
  7. Java成员变量与局部变量同名
  8. 小电流MOS管
  9. Fiddler设置代理抓手机包
  10. Wpf 自定义控件(1)