netty与mina的比较

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大忌了。

你可能感兴趣的:(nio,netty,java,网络)