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

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

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、服务端和客户端得到执行时间。
 
netty
mina
 
Server
client
server
client
第一次
5076
5349
5051
5236
第二次
5375
5490
4902
4976
第三次
5521
5280
4953
5053
第四次
5367
5508
4980
5214
备注:当传输量达到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

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读