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

原文地址:https://blog.csdn.net/e765741668/article/details/45234711

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、服务端和客户端得到执行时间。

备注:当传输量达到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大忌了

Java NIO框架Mina、Netty、Grizzly介绍与对比相关推荐

  1. Java NIO框架Mina、Netty、Grizzly介绍与对比(zz)

    Mina: Mina(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应 ...

  2. Java NIO框架Mina

    2019独角兽企业重金招聘Python工程师标准>>> 真羡慕java有系列的懒人框架,虽然c也有Netty, ACE等高速网络框架,但是语言的特性,决定了java框架之间更好集成, ...

  3. Java NIO框架(Java编程)

    Java NIO框架 MINA 用netty性能和链接数.并发等压力测试参数好于mina 1.NIO弥补了原来的I/O的不足,它再标准java代码中提供了高速和面向块的I/O 原力的I/O库与NIO最 ...

  4. Java NIO框架

    NIO 全称是Non-Blocking IO或New IO,也就是非阻塞IO或新版IO. NIO的特性如下: 1.面向缓冲区(Buffer):每个Buffer 实质上是一个容器对象 每一种基本 Jav ...

  5. Apache NIO 框架 Mina 使用中出现 too many open files 有关...

    2019独角兽企业重金招聘Python工程师标准>>> 时间: 2013-04-08 17:01:26.0 分类:  软件工程/管理 /  开发方法 /  文章 Apache NIO ...

  6. Grizzly:Java NIO框架

    在Java新I/O API(NIO)出现之前,开发可扩展的服务器应用比较困难.Grizzly NIO框架的设计初衷便是帮助开发者更好地利用Java NIO API,构建强大的可扩展的服务器应用,并提供 ...

  7. Java NIO 框架 Netty 之美:粘包与半包问题

    Netty 是一个可以快速开发网络应用程序的 NIO 框架,它大大简化了 TCP 或者 UDP 服务器的网络编程.Netty 的简易和快速开发并不意味着由它开发的程序将失去可维护性或者存在性能问题,它 ...

  8. java nio 框架_几种Java NIO框架的比较(zz)

    问题:生活中工作中,会有人问我javaNIO框架里面 Netty Mina  xSocket Grizzly 等等哪个比较好? 在这里写一下自己的感受,也算是总结一下吧 在我的印象中.不管是什么NIO ...

  9. java mina性能_高性能Java网络框架 MINA

    Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络 ...

最新文章

  1. opencv+python读写视频流
  2. 高档名片设计:12款专业的名片设计欣赏
  3. Acdream Xor 简单数学
  4. Cloud Native未来值得关注的方向:Service Mesh简介
  5. 超炫jQuery测试答题功能
  6. sap.ui.layout.form.SimpleForm.prototype
  7. freetype字体位图转距离场_那些火遍ins的字体小技巧,不看你就亏了
  8. ubuntu16.4 配置logstash6.3.2 kibanan6.3.2
  9. Qos令牌桶技术原理
  10. javascript 高级程序设计 (第四版) 第二章 下
  11. cesium-加载点云数据
  12. esp32的MQTT物联网开发记录
  13. 打印word模板并预览打印
  14. android int 字节数组,android 将int转byte,byte转int的两种方法
  15. 计算机控制面板空白,win7控制面板打开是空白的怎么办-解决控制面板打开之后空白的方法 - 河东软件园...
  16. ADI高速信号采集芯片与JESD204B接口简介
  17. 101个CV模型集体开源,魔搭社区视觉AI深度解析
  18. 为什么你一直学不好SEO优化?
  19. 一台电脑借助另一台电脑实现上网
  20. Python语言在人工智能(AI)中的优势

热门文章

  1. RotatedRect中返回的角度angle详解
  2. CS资质认证的条件是什么?有哪些好处
  3. iOS 应用架构 (三)
  4. SpringBoot中使用AMQ的两种方式二(Java配置、注解方式)
  5. c语言课程设计趣味小游戏,趣味小游戏的课程设计.doc
  6. 技术评审中常见的一些问题
  7. vue axios 拦截器配置与封装
  8. 深入浅出剖析静态方法和实例方法的区别
  9. [Jsoi2013]快乐的jyy
  10. python循环语句