`

Mina通信初步

    博客分类:
  • Mina
阅读更多
1、Mina通信框架简介
Mina整体框架:



2、Mina通信流程



3、Mina特性
MINA是一个简单的却有功能丰富的网络应用程序框架, 它提供如下特性:

为各种传输类型提供一套统一的API
通过Java NIO实现 TCP/IP & UPD/IP通信
通过RXTX实现串口通信(RS232)
VM内部管道通信
你可以实现自己的通信方式
通过Filter接口实现扩展点;类似与Servlet的Filter
低级和高级的API
低级:使用ByteBuffer
高级:用户自定义的消息对象和编码
可以自由定制的线程模型
单线程
一个线程池
多个线程池(例如 SEDA)
利用Java5的SSLEngine实现的开箱即用的SSL,TLS, StartTLS功能
过载保护 和 带宽限制
通过Mock对象可以进行单体测试
通过JMX管理服务器
通过StreamIoHandler支持基于流的I/O
可以整合进PicoContainer和Spring等常用容器
很容易从Netty迁移过来。

4、常见通信框架对比
以MINA、Cindy、QuickServer为例。

从功能上看,Mina、Cindy、QuickServer实现的功能也基本差不多,都是封装基本的网络IO操作,暴露事件接口供二次开发。

Mina需要继承IOHandlerAdapter类或ProtocolHandlerAdapter类,从该类中继承各事件方法实现业务操作。 Cindy也需要继承SessionHandlerAdapter具体类,跟Mina类似。QuickServer则需要实现接口 ClientEventHandler实现业务功能。这些类和接口提供的事件大致雷同:Connected,Closed,Received,Sent, Timeout等等。

Mina和Cindy使用了nio,而QuickServer则同时支持blockingIO和nio,需要进行配置选择(一个遗憾就 是QuickServer的nio模式下竟然不支持Timeout事件)。Mina实现中有一个很好的设计就是剥离IO层和Protocol层,作者的用 意是想在IO层实现对IO的处理,在Protocol实现对业务的处理,很好的一个分层思想。QuickServer则是一个大杂烩,把各种IO处理封装 在 BasicClientHandler中,里面还混杂了blockingIO、NIO等操作。

额外功能上,Mina和Cindy都可以 支持一个进程中开启多个服务端口进行不同处理,而QuickServer则不行。不过QuickServer提供了另外一个非常实用的功能-管理服务端 口,通过其设定的一些指令查询服务器的状态、控制服务器等。此功能成为最后选择的最大优势。其他例如IP过滤的功能在QuickServer中只需要进行 配置即可。

这次没对这三个服务器在性能上进行比较。以后再找机会完成:-)

从代码质量上来看,无疑Mina和Cindy占了 上风,QuickServer的分层实在不咋样。Mina和Cindy有不少相似的地方。而QuickServer的目的与其有所不同,集成许多方便的功 能,甚至还加入数据库连接池的功能(感觉作者有点无聊了)。最后的循证其实还是选了个最实用的工具,的确减少不少的工作量。此后还遇到一些二进制的问题就 不表了。

MINA is a good framwork

作者:fisher

Netty2的作者TrustinLee在为Apache LDAP项目所作的通讯基础框架MINA中显示了在通讯框架方面雄厚的实力,MINA是迄今为止我见过在java领域最好的通讯基础件,看得出,他通过Netty2的经验积累加上对ACE等传统大型框架的理解之后,在制作MINA的一开始就确定了一个近似于完美的架构,同时,我在RoadMap中看到MINA与Spring、JMX和OSGI的结合计划,虽然不知道什么时候能够完成,但光看这个RoadMap已经很让人激动了。

在MINA的服务绑定上,一开始就使用了serviceRegistry类这种中控型的注册绑定方式,看得出他对OSGI有一定研究并已决意向其靠拢。

而借鉴于ACE的Accepter和Connector结构使得Session的使用更加方便,同时分为IO层和Protocol两层的通讯基础件也是使得使用变得很方便。

最后要提一下的是作者使用的FilterChain式结构来加载Filter,使得很多非通讯核心问题得以从基础件中剥离出来,甚至连线程池模式都可以使用Filter来指定,虽然自己制作的线程池要想结合到MINA中需要一些额外的努力,但是仍然极大的增加了框架的灵活性。

MINA vs. QuickServer

作者:fisher

First for all, QuickServer is licensed as LGPL, and MINA as ASL.

从我个人角度而言,去年看过QuickServer的源码,我在项目中采用的每一个框架或类库都会做综合评价,通常不会是一个原因导致我采用或没有采用某个库或框架,具体最后没有采用QuickServer的原因忘记了,但是当时给我的总体感觉是,QuickServer虽然很方便,但不会让我在架构上得到新的好处。而它最大的优点则是,支持JDK1.3(如果没记错的话),另外就是License的问题

下面看一看来自TrusinLee的评论:

Thank for the information about another network application framework. I found a few differences:

Ø QuickServer supports blocking mode. (MINA supports only non-blocking mode, but you can make your operation block at your will.)

Ø QuickServer provides GUI-based admin. (MINA doesn't have one yet, but will have full JMX support soon, which is a standard.)

Ø QuickServer uses java.util.logging. (MINA uses SLF4J, which is a safe replacement of commons-logging.)

Ø QuickServer uses its own XML settings. (MINA provides Spring framework integration instead.)

Ø QuickServer can specify maximum number of clients allowed. (MINA can do this using a filter, but not implemented by default. Of course, this will be implemented as an overload prevention filter.)

Ø QuickServer team has one crew. (MINA has three crews.)

Ø QuickServer project started in 2003. (MINA started in 2005.)

Ø QuickServer has a difference event handler interface from MINA. (You'll have to compare it by yourself. IMHO, MINA has one simple enough handler which covers all QuickServer provides.)

Ø QuickServer doesn't support UDP at all. (MINA does)

Ø QuickServer doesn't support client-side API at all. (MINA does)

Ø QuickServer integrated authentication and text protocol in its core. (MINA didn't and they are considered as a cross-cutting concern that a filter should take care of. IMHO, MINA is more extensible here.)

Cindy2.x比MINA性能好是可以预见的,原因在于MINA提供的ByteBuffer和FilterChain。

Cindy3.x源代码我没有看,所以不好评价。

关于MINA的效率问题,在MINA的maillist中也被提出,似乎有相应的issue正要被加入到它的Issue Tracker中。

Cindy3.x才刚刚开始,我认为多给Crmky一些时间,他一定可以将架构设计的更好。

MINA在设计上也有少许问题,他的IoFilterChain将FilterManager和FilterChain合而为一,在看其代码的时候会觉得很乱。另外,为了保证包的顺序,一个IoSession上的Handler在上一次read调用没有返回前,是不会被再次调用的。我认为MINA的基础架构在1.0和1.1版本之间还会变化,以适应新加入的configuration方式。另外,MINA会产生一些内存垃圾,我用profiler检查过MINA,似乎是SocketIoProcessor中的某个计数器在不停的产生2byte的什么东东(记不太情了),不过似乎Trustin也注意到这个问题了,最近他说会在1.0release之后改善效率和内存的问题。
  • 大小: 38.7 KB
  • 大小: 32.7 KB
分享到:
评论

相关推荐

    Mina通信框架应用示例

    《Mina通信框架应用详解》 Mina通信框架,全称为Apache MINA,是一个高度可扩展的、基于Java的网络应用程序开发框架。MINA的名字来源于多语言(Multi-purpose Infrastructure for Network Applications),它提供了...

    Mina+Socket通信

    Mina和Socket是两种常见的网络通信框架和技术,它们在Java编程环境中被广泛使用。本篇文章将深入探讨如何使用Mina与Socket实现通信,并提供客户端和服务端的实现代码概述。 Mina(全称“MINA: Minimalistic ...

    mina简单通信需要的包

    标题中的“mina简单通信需要的包”指的是Apache Mina框架,这是一个用于构建高性能、异步网络应用程序的Java框架。在本文中,我们将深入探讨Mina的核心概念和它在通信中的应用,以及与之相关的库SLF4J。 Apache ...

    mina双向通信已测试

    **mina双向通信已测试** **简介** Mina(Minimum Asynchronous Network)是一个高度可扩展的、高性能的Java网络应用框架,常用于构建基于TCP/IP和UDP/IP协议的应用,如HTTP、FTP、SMTP等。本项目提供了一个完整的...

    Apache Mina通信原理

    Apache Mina通信原理Apache Mina通信原理

    队列,mina通信的结合实例

    在IT行业中,队列(Queue)和MINA通信框架是两个关键的概念,它们在系统设计和网络编程中扮演着重要角色。本实例将探讨如何将队列与MINA通信框架结合,以实现高效、可靠的网络服务。以下是关于这两个概念及其结合...

    jbpm4.3 流程申请(mina通信)

    **jbpm4.3流程申请(mina通信)** jbpm4.3是Java Business Process Management (BPM)系统的第四次重大版本更新,它提供了一套完整的业务流程管理解决方案,包括流程设计、执行、监控和优化等功能。在这个例子中,我们...

    java-mina通信框架详解.docx

    Apache Mina是一个强大的网络通信框架,专为基于TCP/IP和UDP/IP协议栈的应用设计。它提供了JAVA对象的序列化和虚拟机内部通信的功能,使得开发者能够迅速构建高性能、高可扩展性的网络应用。Mina的核心特性是其事件...

    mina通信协议文档及实例

    mina通信协议文档及实例,内含说明文档及实例,长短连接

    通信规约和mina通信程序

    mina通信程序则是基于Java的一种网络通信框架,它提供了高效的、可扩展的网络通信服务,常用于构建分布式系统或实现客户端与服务器间的通信。 **通信规约的理解** 通信规约主要包含以下几个核心要素: 1. **数据...

    mina双向通信demo

    自己写的demo,完成了mina的双向通信功能,比较简单的一个demo,扩展性强

    mina通信demo

    **Mina通信框架详解** Apache Mina 是一个高度可扩展且功能丰富的网络应用开发框架,主要用在Java环境中。这个“Mina通信demo”是为了帮助初学者理解和掌握Mina的基本用法而创建的。通过分析这个demo,我们可以深入...

    android实现mina通信,智能家居搞起来!

    在Android平台上实现mina通信,是将Java的mina框架应用到移动设备上,以实现高效、稳定的数据传输。Mina是一个开源的网络通信框架,广泛应用于TCP/IP和UDP/IP协议的编程,尤其适合处理大量并发连接的情况,如智能...

    Mina自定义协议通信的示例

    在IT行业中,网络通信是核心领域之一,而Mina(Mindterm In Action Network Application)是一个高性能、跨平台的Java框架,常用于构建网络应用程序,如服务器和客户端。本示例聚焦于Mina中的自定义协议通信,这允许...

    Mina通信Demo

    **Mina通信Demo详解** Mina(全称:Minimum APT for Network Application)是一个高度可扩展的、高性能的网络通信框架,广泛应用于Java平台上。在Android开发中,Mina可以帮助开发者构建TCP/IP和UDP网络应用,尤其...

    在Java中运用mina来实现TCP通信

    这是一个有关Mina在Java通信中运用的简单的入门实例,MIna自带一种触发机制,无需再开线程等待收发数据。这个实例中有客户端和服务端,与软件TCPUDPDbg进行文字通话测试。用的时候注意添加Mina包,此实例中用到的是...

    mina通信基本代码实现和学习文件

    Mina通信框架是Apache软件基金会的一个项目,主要应用于开发高性能、高可靠性的网络应用程序,尤其在Java平台上。它提供了一套全面的事件驱动、异步I/O的服务端和客户端API,使得开发者能够更容易地构建网络服务,如...

    Mina通信框架应用

    **Mina通信框架应用** Apache Mina(Minimum Asynchronous Network Application framework)是一个开源的网络通信框架,主要设计用于简化高性能服务器的开发。它提供了一种与传输层协议无关的抽象层,允许开发者...

    spring+mina实现http接口服务端通信客户端

    Spring 和 Mina 结合使用可以构建高性能的网络通信应用,而Spring MVC 是Spring 框架的一个模块,专门用于处理Web请求。在这个"spring+mina实现http接口服务端通信客户端"的项目中,我们将深入探讨如何整合这两个...

    mina网络通信实例

    《MINA网络通信实例解析》 MINA(Multipurpose Infrastructure for Network Applications)是Apache软件基金会的一个开源项目,它提供了一个高度可扩展且跨平台的网络应用程序框架,主要用于简化开发高性能和高可用...

Global site tag (gtag.js) - Google Analytics