【Andorid开发框架学习】之Mina开发1

    今天我将介绍 Apache MINA的基本概念和 API,包括 I/O服务、I/O 会话、I/O 过滤器和 I/O 处理器。

  一、MINA的简介

    Apache MINA是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可靠性的网络应用程序。它提供了一个通过Java NIO在不同的传输例如TCP/IP和UDP/IP上抽象的事件驱动的异步API。

  二、什么是NIO?

    Java NIO,非堵塞应用通常适用用在I/O读写等方面,我们知道,系统运行的性能瓶颈通常在I/O读写,包括对端口和文件的操作上,过去,在打开一个I/O通道后,read()将一直等待在端口一边读取字节内容,如果没有内容进来,read()也是傻傻的等,这会影响我们程序继续做其他事情,那么改进做法就是开设线程,让线程去等待,但是这样做也是相当耗费资源的。

  三、什么是事件驱动?

    Apache MINA 提供的是事件驱动的 API。它把与网络相关的各种活动抽象成事件。网络应用只需要对其感兴趣的事件进行处理即可。事件驱动的 API 使得基于 Apache MINA 开发网络应用变得比较简单。应用不需要考虑与底层传输相关的具体细节,而只需要处理抽象的 I/O 事件。比如在实现一个服务端应用的时候,如果有新的连接进来,I/O 服务会产生 sessionOpened这样一个事件。如果该应用需要在有连接打开的时候,执行某些特定的操作,只需要在 I/O 处理器中此事件处理方法 sessionOpened中添加相应的代码即可。

  四、MINA的架构

  

  基于 Apache MINA 的网络应用有三个层次,分别是 I/O 服务、I/O 过滤器和 I/O 处理器:

    • I/O 服务:I/O 服务用来执行实际的 I/O 操作。Apache MINA 已经提供了一系列支持不同协议的 I/O 服务,如 TCP/IP、UDP/IP、串口和虚拟机内部的管道等。开发人员也可以实现自己的 I/O 服务。
    • I/O 过滤器:I/O 服务能够传输的是字节流,而上层应用需要的是特定的对象与数据结构。I/O 过滤器用来完成这两者之间的转换。I/O 过滤器的另外一个重要作用是对输入输出的数据进行处理,满足横切的需求。多个 I/O 过滤器串联起来,形成 I/O 过滤器链。
    • I/O 处理器:I/O 处理器用来执行具体的业务逻辑。对接收到的消息执行特定的处理。

  创建一个完整的基于 Apache MINA 的网络应用,需要分别构建这三个层次。Apache MINA 已经为 I/O 服务和 I/O 过滤器提供了不少的实现,因此这两个层次在大多数情况下可以使用已有的实现。I/O 处理器由于是与具体的业务相关的,一般我们会去实现这个处理器。

  五、MINA自带的I/O过滤器

    • 日志过滤器:LoggingFilter记录所有事件和请求;
    • 协议编码解码过滤器:ProtocolCodecFilter将传入的字节流转换成消息对象,或进行反向操作;
    • 压缩过滤器:CompressionFilter负责压缩所有的数据;
    • 安全套阶层过滤器:SSLFilter提供SSL、TLS、STARTTLS支持,用户可以自己进行SSL加密,在下面的博客中,我会讲如何进行SSL加密。

 

  六、注意事项

    • 从上图中,我们可以看到,Mina仅仅支持添加一个I/O处理器,如果添加多个,那么默认使用最后一次添加的那个处理器;
    • 在添加过滤器的时候,处理的顺序是按照添加过滤器的顺序;
    • Mina在使用过滤器的时候,只要在需要的地方添加就可以了,不一定是服务器、客户端都要添加的。就是说,服务器、客户端编程的时候服务器有这个过滤器,客户端可以有也可以没有。
    • 如果用户需要使用SSL加密,那么在添加过滤器的时候最好第一个添加SSLFilter,不然处理的数据无法进行加密。

  下面的博客我会讲述Mina的服务器、客户端的开发,欢迎关注!

时间: 2024-10-09 08:13:54

【Andorid开发框架学习】之Mina开发1的相关文章

【Andorid开发框架学习】之Mina开发之Mina简介

今天我将介绍 Apache MINA的基本概念和 API,包括 I/O服务.I/O 会话.I/O 过滤器和 I/O 处理器. 一.MINA的简介 Apache MINA是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可靠性的网络应用程序.它提供了一个通过Java NIO在不同的传输例如TCP/IP和UDP/IP上抽象的事件驱动的异步API. 二.什么是NIO? Java NIO,非堵塞应用通常适用用在I/O读写等方面,我们知道,系统运行的性能瓶颈通常在I/O读写,包括对端口和文件的操作上

【Andorid开发框架学习】之Volley入门

Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮.Volley特别适合数据量不大但是通信频繁的场景.在listView显示图片这方面,使用volley也是比较好的,不必担心OOM错误. 1.Vollley框架的学习流程: 首先,我们先下载Volley开发所需的jar包,Volley的Jar包下载.在eclipse中新建一个工程,然后导入Volley开发的jar包,接下来我们就可以进行Volley的开发了. 2.最简单的Volley的Get请求 创建一个请求队列:

分享免费的.net开发框架学习资料(专题汇总)

分享免费.net学习资料,.net平台开发,全部免费!!! 专题:水晶报表使用入门及实战http://edu.ibeifeng.com/view-index-id-357.html 专题:源代码管理工具的使用与配置http://edu.ibeifeng.com/view-index-id-349.html 专题:大型网站性能优化http://edu.ibeifeng.com/view-index-id-347.html 专题:JavaScript压缩.调试及性能调优http://edu.ibei

Beaglebone Back学习三(开发环境搭建)

开发环境搭建 1 Ubuntu环境搭建 2 Window环境搭建 3 开发板环境搭建 1 Ubuntu环境搭建 (1)安装必要的网络工具 samba nfs tftp vmware-tools samba nfs apt-get install nfs-kernel-server vim  /etc/exports  (/path/to/nfs  *(rw,sync,no_root_squash) ) /etc/init.d/nfs-kernel-server restart (2)配置通信网络

学习JavaWeb项目开发需要掌握的技术

武汉java培训学习JavaWeb项目开发需要掌握的技术,国内外信息化建设已经进入基于Web应用为核心的阶段, java作为应用于网络的最好语言,前景无限看好.然而,就算用Java建造一个不是很烦琐的web应用,也不是件轻松的事情.概括一下,实施Java的WEB项目需要掌握的技术如下:Java语言面向对象分析设计思想设计模式和框架结构XML语言网页脚本语言数据库应用服务器集成开发环境下面我们具体地看每个技术.1.Java语言Java语言体系比较庞大,包括多个模块.从WEB项目应用角度讲有JSP.

Cocos2dx 学习笔记整理----开发环境搭建

最近在学习cocos2dx,预备将学习过程整理成笔记. 需要的工具和环境整理一下: 使用的版本 cocos2dx目前已经出到了v3.1.1,学习和项目的话还是用2.2.3为宜,毕竟不大想做小白鼠,并且学习了几天之后才发出3.X版本的,版本内容变动比较大. 开发环境 1 jdk 1.6以上 2 python 2.7为宜(创建项目要用的) 3 NDT+Android SDK 4 Cygwin或者MinGW 开发工具 1 Eclipse + CDT + ADT 2 VS2010 3 Sublime T

学习VC MFC开发必须了解的常用宏和指令

1.#include指令  包含指定的文件 2.#define指令   预定义,通常用它来定义常量(包括无参量与带参量),以及用来实现那些"表面似和善.背后一长串"的宏,它本身并不在编译过程中进行,而是在这之前(预处理过程)就已经完成了 3.#typedef指令 常用来定义一个标识符及关键字的别名它是语言编译过程的一部分,但它并不实际分配内存空间. 4.#ifndef   #else   #endif指令  条件编译.一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容

学习web前端开发感想

1.学习一个技术,不是一看见源代码就是copy,而是仔细阅读后,找到自己想要的,并且自己写出来,自己理解了,下次遇到同样的问题,自己才能解决. 2.在电脑上学习的过程中,我总是先建立一个文本文档,这样便于记录,然后再进行分类到笔记本中... 3.把你看到的每个网页用大脑生成html代码和css布局. 把你看到的每个动画和交互用大脑生成javaScript. 4.一定要养成做好笔记的习惯.并且要学会做笔记. 5.页面中中所有的东西都要放在一个标签里面.否则不好控制. 6.自己的知识库在开始学习的时

第一章 Andorid系统移植与驱动开发概述 - 读书笔记

Android驱动月考1 1.Android系统的架构: (1)Linux内核,Android是基于Linux内核的操作系统,并且开源,所以Android与Ubuntu等操作系统的差别很小,并且这一层主要是操作系统核心,包括进程线程的调度和内存.电池管理,都是一些常驻内存的核心服务. (2)C/C++代码库,这一层主要都是.so文件,.so文件常见在编译之后产生,包括PHP的运行so.同时这一层也包含虚拟机的Runtime. (3)Android SDK API,安卓的SDK的接口,由Java编