图解Apache Mina
Apache MINA 是一个用于简化开发构建高性能、高可扩展的网络应用框架。通过JAVA NIO在各种传输协议(如:TCP/IP、UDP/IP)上提供抽象的事件驱动异步API
Apache MINA可以称为:NIO框架库、服务端客户端框架库、一个网络套接字库
特性
为各种传输协议提供统一API
提供类似servlet filter的过滤链路支持
可定制化线程模型
开箱即用的 SSL · TLS · StartTLS
- 超载保护和传输流量控制
- 易于集成(如:与Spring集成)
- 可平滑过渡到Netty
- ...

(Apache MINA在应用中的角色)
从图中可以看出,只需要关注与MINA的交互而复杂的网络层处理交由MINA来完成
Apache MINA架构

(总体架构)
采用三层架构:
- I/O Service - 执行实际 I/O处理
- I/O Filter Chain - 将字节过滤/转换为所需的数据结构,反之亦然
- I/O Handler - 应用层实现逻辑的地方
所以创建一个基于Apache MINA的应用只需要
- 创建an I/O service - 选择合适的Acceptor或自定义
- 创建 a Filter Chain - 转换请求响应
- 创建 an I/O Handler - 处理不同的消息

(服务端架构)

(服务端流程示意)

(客户端架构)
案例分析
服务端
public static void main(String[] args) throws IOException {
//IoService
final IoAcceptor acceptor = new NioSocketAcceptor();
//IoFilter
acceptor.getFilterChain().addLast("logger",new LoggingFilter());
acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter(
//ProtocolCodecFactory
new TextLineCodecFactory(Charset.forName("UTF-8"))));
//IoHandler
acceptor.setHandler(new TimeServerHandler());
//IoService
acceptor.getSessionConfig().setReadBufferSize(2048);
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,10);
acceptor.bind(new InetSocketAddress(PORT));
LOGGER.info("服务端启动成功,端口:{}",PORT);
}

客户端
public static void main(String[] args) throws InterruptedException {
//IoConnector
final NioSocketConnector connector = new NioSocketConnector();
connector.setConnectTimeoutMillis(3*1000);
// connector.getSessionConfig().setUseReadOperation(true);
//IoFilter
connector.getFilterChain().addLast("codec",
new ProtocolCodecFilter(
// ProtocolCodecFactory
new ObjectSerializationCodecFactory()));
connector.getFilterChain().addLast("logger",new LoggingFilter());
//IoHandler
connector.setHandler(new TcpClientHandler());
IoSession session = null;
for (;;){
try {
//IoFuture
final ConnectFuture connectFuture = connector.connect(new InetSocketAddress(HOST, PORT));
connectFuture.awaitUninterruptibly();
session = connectFuture.getSession();
break;
}catch (RuntimeIoException e){
System.err.println("failed connected");
e.printStackTrace();
Thread.sleep(5000);
}
session.getCloseFuture().awaitUninterruptibly();
//IoProcessor
connector.dispose();
}
}

主要类图

附件
参考
说明
附件具标注各个类方法的具体实现,请注意查看
引用请注明出处
图解Apache Mina的更多相关文章
- Apache MiNa 实现多人聊天室
Apache MiNa 实现多人聊天室 开发环境: System:Windows JavaSDK:1.6 IDE:eclipse.MyEclipse 6.6 开发依赖库: Jdk1.4+.mina-c ...
- Apache Mina(一)
原文链接:http://www.cnblogs.com/xuekyo/archive/2013/03/06/2945826.html Apache Mina是一个能够帮助用户开发高性能和高伸缩性网络应 ...
- Apache MINA(一)
Apache MINA is a network application framework which helps users develop high performance and high s ...
- Apache Mina 入门实例
这个教程是介绍使用Mina搭建基础示例.这个教程内容是以创建一个时间服务器. 以下是这个教程需要准备的东西: MINA 2.0.7 Core JDK 1.5 或更高 SLF4J 1.3.0 或更高 L ...
- Apache Mina原理及典型例子分析
Apache Mina ,一个高性能 Java 异步并发网络通讯框架.利用 Mina 可以高效地完成以下任务: TCP/IP 和 UDP/IP 通讯 串口通讯 VM 间的管道通讯 SSL/TLS JX ...
- Apache Mina 2.x 框架+源码分析
源码下载 http://www.apache.org/dyn/closer.cgi/mina/mina/2.0.9/apache-mina-2.0.9-src.tar.gz 整体架构 核心过程(IoA ...
- Apache Mina开发手冊之四
Apache Mina开发手冊之四 作者:chszs,转载需注明. 博客主页:http://blog.csdn.net/chszs 一.Mina开发的主要步骤 1.创建一个实现了IoService接口 ...
- 网络通信框架Apache MINA
Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络 ...
- Apache Mina(二)
在mina的源码,整个框架最核心的几个包是 : org.apache.mina.core.service :IoService.IoProcessor.IoHandler.IoAcceptor.IoC ...
随机推荐
- 改进欧拉公式求解常微分方程(c++)
#include<iostream> #include<iomanip> using namespace std; int main() { double x,y,h,temp ...
- [C++] namespace命名空间和using用法
命名空间namespace:指标识符的各种可见范围. C++标准程序库中的所有标识符都被定义在一个std的namespace,这就是程序开始添加 using namespace std; 的原因. 很 ...
- 第06组 Beta版本演示
队名:福大帮 组长博客链接: https://www.cnblogs.com/mhq-mhq/p/12052263.html 作业博客 : https://edu.cnblogs.com/campus ...
- ActionFilter、IAuthorizationFilter 权限验证重定向跳转到其它页面
方法一: public class IsAllowAttribute: ActionFilterAttribute { public override void OnActionExecuting(A ...
- WebGL调试工具分享
学习WebGL,我们需要一些好用的调试工具,下面分享3个常用的调试工具. WebGL Inspector 下载地址:https://github.com/benvanik/WebGL-Inspecto ...
- nodejs 管道判断
// 不优雅的判断管道判断 let d process.stdin.on('data', chunk => { d = String(chunk) }) setTimeout(() => ...
- php连接mysql8报错如何解决
php版本为5.6,连接mysql8.0时报错,但是连接其他mysql8前的版本是正常的 原因可能是mysql8默认的使用密码认证方式不一样,mysql8.0默认使用caching_sha2_pass ...
- express 413 Request Entity Too Large解决办法
1.配置nginx 原因是请求实体太长了.一般出现种情况是Post请求时Body内容Post的数据太大了 如上传大文件过大; 如POST数据比较多 处理方法修改nginx.conf的值就可以解决了. ...
- rConfig v3.9.2 授权认证与未授权RCE (CVE-2019-16663) 、(CVE-2019-16662)
rConfig v3.9.2 authenticated and unauthenticated RCE (CVE-2019-16663) and (CVE-2019-16662) 原文:https: ...
- RAID磁盘阵列结构
RAID磁盘阵列结构原理其实很简单,就是每块硬盘不插在主板的硬盘接口上了,而是全插在RAID卡上,然后RAID卡再插到主板上,由RAID卡统一管理硬盘,做各种RAID磁盘策略(RAID0,RAID1, ...