Java NIO框架Mina、Netty、Grizzly介绍与对比

来源:互联网 发布:兼职网络诈骗案例分析 编辑:程序博客网 时间:2024/06/11 02:26

Java NIO框架Mina、Netty、Grizzly介绍与对比

  • 原文链接:http://www.24xuexi.com/w/2011-11-14/98277.html
  • 原文日期:2011年11月14日

Mina

Mina(Multipurpose Infrastructure for Network Applications) 是 Apache组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 Mina 版本2.04支持基于 JavaNIO 技术的 TCP/UDP 应用程序开发、串口通讯程序,Mina 所支持的功能也在进一步的扩展中。目前,正在使用Mina的应用包括:Apache Directory Project、AsyncWeb、AMQP(Advanced MessageQueuing Protocol)、RED5 Server(Macromedia? FlashMedia RTMP)、ObjectRADIUS、 Openfire等等。

Netty

Netty是一款异步的事件驱动的网络应用框架和工具,用于快速开发可维护的高性能、高扩展性协议服务器和客户端。也就是说,Netty是一个NIO客户端/服务器框架,支持快速、简单地开发网络应用,如协议服务器和客户端。它极大简化了网络编程,如TCP和UDP套接字服务器。

Grizzly

Grizzly是一种应用程序框架,专门解决编写成千上万用户访问服务器时候产生的各种问题。使用JAVANIO作为基础,并隐藏其编程的复杂性。容易使用的高性能的API。带来非阻塞socketd到协议处理层。利用高性能的缓冲和缓冲管理使用高性能的线程池。

结语

OK,我们现在可以看看三者的简单对比了。

首先,从设计的理念上来看,Mina的设计理念是最为优雅的。当然,由于Netty的主导作者与Mina的主导作者是同一人,出自同一人之手的Netty在设计理念上与Mina基本上是一致的。而Grizzly在设计理念上就较差了点,几乎是JavaNIO的简单封装。

其次,从项目的出身来看,Mina出身于开源界的大牛Apache组织,Netty出身于商业开源大亨Jboss,而Grizzly则出身于土鳖Sun公司。从其出身可以看到其应用的广泛程序,到目前为止,我见到业界还是使用Mina多一些,而Netty也在慢慢的应用起来,而Grizzly则似乎只有Sun自已的项目使用了,如果还有其他的公司或开源项目在使用,那就算我孤陋寡闻。 最后,从入门的文档来说,由于Mina见世时间相对较长,官方以及民间的文档与入门示例都相当的多。Netty的官方文档也做得很好,而民间文档就要相对于Mina少一些了。至于Grizzly,不管是官方还是民间,都很少见到其文档。

Netty和mian比较报告 一、数据测试报告简述:1、启动服务器,等到客户端接入     2、客户端发送链接请求。当已经链接,记录当前时间并向服务端发送约50m数据,每次1kb.           3、当服务端接收到链接,第一次接收到数据后,记录当前时间           4、服务端将接收到的数据再返回给客户端。当服务端接收数据超过50m,则停止接收,并记录当前时间           5、当客户端接收数据量超过50m,记录当前时间。终止链接。           6、服务端和客户端得到执行时间。 nettymina Serverclientserverclient第一次5076534950515236第二次5375549049024976第三次5521528049535053第四次5367550849805214备注:当传输量达到100m时,mina抛异常:java.lang.OutOfMemoryError: Java heap space结果:mina效率更快,netty性能更稳。 二、codec和handler比较         以下只是个人实践。可能会有其它办法解决。  1、Codec比较mina编码解码器(codec)创建实例可有以下选择:1)      每一次接收到的数据创建一次codec实例2)      为所有client链接创建一次codec实例netty编码解码器创建实例可有以下选择:1)      每一次链接创建一次codec实例2)      为所有client链接创建一次codec实例 2、Handler比较Mina的handler创建实例可有以下选择:1)      为所有client链接创建一次codec实例Netty编码解码器创建实例可有以下选择:1)  每一次链接创建一次handler实例2)  为所有client链接创建一次handler实例 三、文档比较         1、netty和mina文档都比较多,但mina文档不齐全,netty文档比较清晰四、UDP协议传输1、 netty将UDP无连接的特性暴露出来;而mina对UDP进行了高级层次的抽象,可以把UDP当成"面向连接"的协议,Netty需要手动处理顺序、丢包检测、重发等等。 五、协议支持         Netty架构:                  Mina架构         没有找到,但应有类似技术支持。 网上评价:1.      mina将内核和一些特性的联系过于紧密,使得用户在不需要这些特性的时候无法脱离,相比下性能会有所下降;netty解决了这个设计问题。2.      netty基本的架构和mina几乎完全一样,使用时候思想上差不多;但是有很多细节的改进(比如说mina的IoSession每次读写完要调用flip(),netty的channel则不用,并支持zero copy)。3.      netty比mina使用起来更简单。4.      关于UDP链接:mina把TCP和UDP一样当"有连接"的处理,一个UDP请求会按照address产生一个新的 IoSession,过期时间是1分钟,这样做的好处是显然的,但是对于有性能要求的项目就不好了,对一个无连接的东西cache 1分钟,大多数时候可能是白cache了,做无用功。 Mina这样做可能还有个初衷是连续解码用的,比如一个包太大了,分了两次传输;但是这样的设计应该是udp大忌了

-

转载请注明来自:http://www.24xuexi.com/w/2011-11-14/98277.html

0 0
原创粉丝点击