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

Apache Mina开发手册之二

简介: Apache Mina开发手册之二 四、NIO概述 NIO API是Java 1.4版引入的,NIO的意思是非阻塞的I/O通信。 要知道Mina的NIO是基于NIO-1开发的,而在JDK 7中引入了NIO-2的库,但Mina还没有从NIO-2中获得各方面的提升,因此Mina还是基于NIO-1的。
+关注继续查看

Apache Mina开发手册之二

四、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 的可用性及性能。
16648 0
如何从小白进化成 Apache Flink 技术专家?9节基础课程免费公开!
为了让大家更全面地了解 Apache Flink 背后的技术以及应用实践,今天,我们首次免费公开 Apache Flink 系列视频课程。
2395 0
Apache Flink实战(一) - 初识Flink
了解Flink是什么,Flink应用程序运行的多样化,对比业界常用的流处理框架,Flink的发展趋势,Flink生态圈,Flink应用场景及Flink如何进行高效的Flink学习。 0 相关源码 1 前言 1.
2995 0
Apache Flink Meetup · 北京站
Apache Flink Community China Meetup,关于大数据、实时计算、流计算、批处理等。邀请到Apache Flink PMC和Airbnb、阿里巴巴多位 Apache Flink Committer 现场分享。
2473 0
阿里巴巴编程之夏项目——Apache Flink
项目介绍: Apache Flink 是由 Apache 软件基金会开发的开源流处理框架,其核心是用 Java 和 Scala 编写的分布式流数据流引擎。Flink 以数据并行和流水线方式执行任意流数据程序,Flink 的流水线运行时系统可以执行批处理和流处理程序。
3969 0
5月9日云栖精选夜读 | 5分钟从零构建第一个 Apache Flink 应用
本刊开篇文章中我们将从零开始,教您如何构建第一个Apache Flink (以下简称Flink)应用程序。 开发环境准备 Flink 可以运行在 Linux, Max OS X, 或者是 Windows 上。
2127 0
5分钟从零构建第一个 Apache Flink 应用
作者:伍翀 在本文中,我们将从零开始,教您如何构建第一个Apache Flink (以下简称Flink)应用程序。 开发环境准备 Flink 可以运行在 Linux, Max OS X, 或者是 Windows 上。
3680 0
Apache Flink Time & Window 深度解析
作者:邱从贤 1、 Window & Time 介绍 Apache Flink(以下简称 Flink) 是一个天然支持无限流数据处理的分布式计算框架,在 Flink 中 Window 可以将无限流切分成有限流,是处理有限流的核心组件,现在 Flink 中 Window 可以是时间驱动的(Time Window),也可以是数据驱动的(Count Window)。
1601 0
Apache Flink®生态所面临的机遇与挑战
作者:简锋 引言 在谈生态之前,我们来聊聊什么是生态。生态是指在某个特定领域,以某个组件为核心衍生出来其他多个组件,这些组件可以间接或者直接用到这个核心组件,然后辅助这个核心组件共同完成一个更大或者更特殊的任务。
2345 0
深度剖析阿里巴巴对Apache Flink的优化与改进
本文主要从两个层面深度剖析:阿里巴巴对Flink究竟做了哪些优化? 取之开源,用之开源 一、SQL层 为了能够真正做到用户根据自己的业务逻辑开发一套代码,能够同时运行在多种不同的场景,Flink首先需要给用户提供一个统一的API。
1422 0
+关注
jieforest
原ChinaUnix博客专家,见:http://blog.chinaunix.net/uid/301743.html
711
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载