开发者社区> chszs> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Apache Mina开发手册之二

简介: 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/39550367 Apache Mina开发手册之二 作者:chszs,转载需注明。
+关注继续查看
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/39550367

Apache Mina开发手册之二

作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs

四、NIO概述

NIO API是Java 1.4版引入的,NIO的意思是非阻塞的I/O通信。
要知道Mina的NIO是基于NIO-1开发的,而在JDK 7中引入了NIO-2的库,但Mina还没有从NIO-2中获得各方面的提升,因此Mina还是基于NIO-1的。
虽然Oracle官方是把NIO的N作为New的解释,但业界普遍把这个N解释为Non-Blocking。

Mina目前分为1.x和2.x两个主要版本,两个版本的主要区别在于1.x使用传统I/O方式,而2.x使用NIO方式。由于NIO是无阻塞的,而传统IO是阻塞的,所以2.x版本性能会有所提高。但是由于NIO比传统IO更加难于理解,实现更加复杂,想自己开发基于NIO的高性能服务器难度较大,所以这也是选择Mina框架的原因。
Mina 3.x目前还在开发阶段,到时候会通过NIO-2进一步提升通信性能。

java.nio.*包中包含了几个关键的结构:
1)Buffer:数据的容器
2)Charset:字节和Unicode编码的容器转换器
3)Channel:封装了I/O操作的实体的连接表现
4)Selector:提供了可选择的、多分复用的非阻塞I/O
5)Regexps:提供了一些操作正则表达式的工具

使用Mina的优点:
1)隐藏了开发网络程序的复杂性,提供了统一的编程接口;
- 用Java NIO实现TCP/IP和UDP/IP通信
- 用RXTX实现RS232串口通信
- VM级的管道通信
- 实现自己的传输协议

2)与Servlet相似的过滤器接口,支持扩展

3)低层和高层API
- 低层:使用字节缓冲ByteBuffer
- 高层:使用用户定义的消息对象和编码

4)高可定制的线程模型
- 单线程
- 单个线程池
- 多个线程池(即SEDA)

5)通过Java 5的SSLEngine实现开箱即用的SSL、TLS和StartTLS

6)过载防护与流量限制

7)使用mock对象使用单元可测试性

8)JMX管理能力

9)通过StreamIoHandler支持流I/O

10)可与PicoContainer或Spring框架相集成

11)可从Mina 1.x和Netty平滑迁移

五、Mina应用程序架构

1、基于Mina应用程序的架构

基于Mina的应用程序的架构通常是这样的:


可以看出,Mina是应用程序和网络层之间的胶水层,可以通过Mina完成TCP、UDP通信,甚至是串口RS-232C通信。Mina屏蔽了网络编程的复杂性,你只需专心于处理业务逻辑。

下面我们继续深入Mina框架:


广义上来讲,基于Mina的应用程序可以划分为三层:

1)I/O Service:I/O服务,执行实际的I/O通信。
2)I/O Filter Chain:I/O过滤器链,把字节过滤/转换成所需的数据结构,反之亦然。
3)I/O Handler:I/O句柄,放置实际的业务逻辑。

因此,要想创建基于Mina的应用程序,你必须:

1)创建I/O服务
可选择已有的服务(*Acceptor)或创建自己的I/O服务。

2)创建过滤器链
可选择已有的过滤器或创建自定义的过滤器,用于转换请求/响应的数据

3)创建I/O句柄
写业务逻辑,处理不同的消息


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
重磅!Apache Flink 1.11 功能前瞻抢先看!
Flink 1.11 版本即将正式宣告发布!为满足大家的好奇与期待,我们邀请 Flink 核心开发者对 1.11 版本的功能特性进行解读与分享。Flink 1.11 在 1.10 的基础上对许多方面进行了完善和改进,并致力于进一步提高 Flink 的可用性及性能。
16639 0
快速起步Apache Flink,这远比我们看到的更强大
Flink 诞生于欧洲的一个大数据研究项目 StratoSphere。该项目是柏林工业大学的一个研究性项目。早期,Flink 是做 Batch 计算的,但是在 2014 年,StratoSphere 里面的核心成员孵化出 Flink,同年将 Flink 捐赠 Apache,并在后来成为 Apache 的顶级大数据项目,同时 Flink 计算的主流方向被定位为 Streaming,即用流式计算来做所有大数据的计算。
1330 0
25 亿条/秒消息处理!Flink 又双叒叕被 Apache 官方提名
3 月 26 日,Apache 官方博客宣布其成立 21 周年,博客中对 Apache 之道、Apache 大型项目的应用以及 Apache 基金会里程碑事件进行了盘点。其中 Apache Flink 在 2019 年阿里巴巴双 11 场景中突破实时计算消息处理峰值达到 25 亿条/秒的记录被 Apache 官方博客收录。
1517 0
Apache Flink 进阶(八):详解 Metrics 原理与实战
本文由 Apache Flink Contributor 刘彪分享,本文对两大问题进行了详细的介绍,即什么是 Metrics、如何使用 Metrics,并对 Metrics 监控实战进行解释说明。
2909 0
Apache Flink 进阶(七):网络流控和反压剖析
本文根据 Apache Flink 系列直播整理而成,由 Apache Flink Contributor、OPPO 大数据平台研发负责人张俊老师分享。主要内容如下: - 网络流控的概念与背景 - TCP的流控机制 - Flink TCP-based 反压机制(before V1.5) - Flink Credit-based 反压机制 (since V1.5) - 总结与思考
2971 0
Apache Flink 进阶(六):Flink 作业执行深度解析
主要分享内容为 Flink Job 执行作业的流程,文章将从两个方面进行分享:一是如何从 Program 到物理执行计划,二是生成物理执行计划后该如何调度和执行。
763 0
Apache Flink 进阶(五):数据类型和序列化
本文根据 Apache Flink 系列直播整理而成,由 Apache Flink Contributor、360 数据开发高级工程师马庆祥老师分享。文章主要从如何为Flink量身定制的序列化框架、Flink序列化的最佳实践、Flink通信层的序列化以及问答环节四部分分享。
2522 0
Apache Flink 进阶(四):Flink on Yarn/K8s 原理剖析及实践
本文主要介绍 Flink on Yarn/K8s 的原理及应用实践,文章将从 Flink 架构、Flink on Yarn 原理及实践、Flink on Kubernetes 原理剖析三部分内容进行分享并对 Flink on Yarn/Kubernetes 中存在的部分问题进行了解答。
2470 0
Apache Flink 进阶入门(二):Time 深度解析
时间属性是流处理中最重要的一个方面,是流处理系统的基石之一,贯穿这三层 API。在 DataStream API 这一层中因为封装方面的原因,我们能够接触到时间的地方不是很多,所以我们将重点放在底层的 ProcessFunction 和最上层的 SQL/Table API。
4514 0
重磅!《Apache Flink 十大技术难点实战》发布,帮你从容应对生产环境中的技术难题
总结生产环境十大常见难点,10篇技术实战文章帮你完成故障识别、问题定位、性能优化等全链路过程,实现从基础概念的准确理解到上手实操的精准熟练,从容应对生产环境中的技术难题!
27673 0
+关注
841
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载