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

时间: 2024-09-20 14:52:16

netty vs mina netty和mina的区别的相关文章

框架对比-spring框架和mina,netty等框架各自的优势在哪里

问题描述 spring框架和mina,netty等框架各自的优势在哪里 各位大神,求问spring框架和mina,netty等框架各自的优势在哪里,是spring本身不能完成高并发,高吞吐量,分布式等要求吗? 解决方案 spring是为了解决企业应用开发的复杂性而创建的,提供了Java Web开发一系列的解决方案.其最核心的理念就是aop和ioc. mina是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可扩展性的网络应用程序. netty提供异步的.事件驱动的网络应用程序框架和工具,用

【读后感】Netty 系列之 Netty 高性能之道 - 相比 Mina 如何 ?

[读后感]Netty 系列之 Netty 高性能之道 - 相比 Mina 如何 ? 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. [读后感] 不知道这是什么节奏,也许人家早就春意盎然了,只是我

《Netty实战》Netty In Action中文版——文前内容

<Netty实战>样章由人民邮电出版社授权并发编程网发布,本书的中文版已经由人民邮电出版社引进并出版. 京东预售链接(优先发货):<Netty实战>([美]诺曼·毛瑞尔(Norman Maurer),马文·艾伦·沃尔夫泰尔(Marvin Allen Wolfthal))   内容提要 本书是为想要或者正在使用Java从事高性能网络编程的人而写的,循序渐进地介绍了Netty各个方面的内容. 本书共分为4个部分:第一部分详细地介绍Netty的相关概念以及核心组件,第二部分介绍自定义协议

netty 同步-关于Netty在项目中的使用-疑惑!

问题描述 关于Netty在项目中的使用-疑惑! 各位好, 小弟有一事不明,请大拿们指点一二! 我想实现一个交易框架,使用netty实现,netty是基于事件的NIO框架,用它做为ServerSocket来处理客户请求,但客户方是用传统的同步BIO来实现的,就是通过socket.connect()这种方式连接到我的netty serverSokcet上来,netty不会保留connection,读完数据就把channel关闭了,connection自然也就不存在了,但client端是同步的需要等待

Netty系列之Netty可靠性分析

转自http://www.infoq.com/cn/articles/netty-reliability?utm_source=infoq&utm_medium=popular_links_homepage 1. 背景 1.1. 宕机的代价 1.1.1. 电信行业 毕马威国际(KPMG International)在对46个国家的74家运营商进行调查后发现,全球通信行业每年的收益流失约为400亿美元,占总收入的1%-3%.导致收益流失的因素有多种,主要原因就是计费BUG. 1.1.2. 互联网行

netty 多线程-关于netty工作线程并发的问题。

问题描述 关于netty工作线程并发的问题. 最近在做一个项目的压测是有关netty并发的.1.工作线程coresize设置最小20,最大100,但是worker线程数一直都是20从来没超过,也增加过并发量,不知道是什么原因.2.尝试把coresize调整为50,工作线程只创建到48. 想请教下,1中为何线程数达不到最大线程设置:work线程的工作机制究竟是咋么样:现打算进行调优,该从哪方面下手. 解决方案 http://www.infoq.com/cn/articles/netty-concu

netty 转发消息-netty服务器如何转发客户端消息?

问题描述 netty服务器如何转发客户端消息? 我用map保存客户端的channel,遍历map --> channel.writeAndFlush(**),客户端收不到啊 哪里出了问题吗 还是思路错了 解决方案 http://www.oschina.net/question/156914_220771

《Netty 实战》Netty In Action中文版 第2章——你的第一款Netty应用程序(一)

第2章 你的第一款Netty应用程序 本章主要内容 设置开发环境 编写Echo服务器和客户端 构建并测试应用程序 在本章中,我们将展示如何构建一个基于Netty的客户端和服务器.应用程序很简单:客户端将消息发送给服务器,而服务器再将消息回送给客户端.但是这个练习很重要,原因有两个. 首先,它会提供一个测试台,用于设置和验证你的开发工具和环境,如果你打算通过对本书的示例代码的练习来为自己将来的开发工作做准备,那么它将是必不可少的. 其次,你将获得关于Netty的一个关键方面的实践经验,即在前一章中

netty java服务-netty服务端系统如何启动和停止

问题描述 netty服务端系统如何启动和停止 大家好,我想用netty做服务系统,没有用其他的java服务器,服务开启后会一直监听端口,想请问一下怎么停止服务,不用kill _9,谢谢 解决方案 http://blog.csdn.net/dc_726/article/details/47858077 解决方案二: 直接kill 呢.它是否有处理15信号量. 解决方案三: kill能结束,但毕竟kill过程中可能会影响正在处理的业务,所以不能kill 解决方案四: 我的想法是startup.sh启