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的应用只需要

  1. 创建an I/O service - 选择合适的Acceptor或自定义
  2. 创建 a Filter Chain - 转换请求响应
  3. 创建 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 官网

说明

附件具标注各个类方法的具体实现,请注意查看

引用请注明出处

最新文章

  1. php中trait(性状)与generator(生成器)
  2. JS自动缩放页面图片
  3. php中urldecode()和urlencode()
  4. (转)jquery easyui treegrid使用小结 (主要讲的是如何编辑easyui中的行信息包括添加 下拉列表等)
  5. tool list
  6. Linux命令大全----常用文件操作命令
  7. Linux目录结构及常用命令(转载)
  8. Java经典面试题
  9. linux常用命令 、查看日志、web排查
  10. 原创: rsync软件服务利用ansible实现一键化部署
  11. Tomcat7 目录详解
  12. ArrayQueue的底层实现
  13. CSRF 漏洞原理详解及防御方法
  14. JS 定时器 setTimeout 与 setInterval 的区别和用法
  15. python调用.net动态库
  16. WebService系列二:使用JDK和CXF框架开发WebService
  17. Mysql 分区表-分区操作
  18. (研) int(*p)[10]; int *p[10]; int(*)[10]; 之间的区别
  19. AWS探索及创建一个aws EC2实例
  20. java的装饰设计模式

热门文章

  1. 【BIRT】汉化设计器
  2. jmeter cookie管理器
  3. 错误详情:已取消该操作。--------- 在 System.Threading.CancellationToken.ThrowOperationCanceledException()
  4. vi中使用删除键(backspace)只能删除到行首不能跳到上一行怎么处理?
  5. windows10 dos窗口输出卡住
  6. 学习使用junit4
  7. 深入学习c++--多线程编程(三)thread的两种死法
  8. matlab学习笔记8 基本绘图命令-图形窗口简介
  9. EasyNVR网页无插件播放摄像机RTSP流是如何调取接口在Web页实现多窗口同时直播的
  10. Swift编码总结7