基于NIO的Netty网络框架(详解)

 更新时间:2017年06月09日 08:31:13   投稿:jingxian   我要评论

下面小编就为大家带来一篇基于NIO的Netty网络框架(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Netty是一个高性能、异步事件驱动的NIO框架,它提供了对TCP、UDP和文件传输的支持,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。

Netty的优点有:

a、功能丰富,内置了多种数据编解码功能、支持多种网络协议。

b、高性能,通过与其它主流NIO网络框架对比,它的综合性能最佳。

c、可扩展性好,可通过它提供的ChannelHandler组件对网络通信方面进行灵活扩展。

d、易用性,API使用简单。

e、经过了许多商业应用的考验,在互联网、网络游戏、大数据、电信软件等众多行业得到成功商用。

Netty采用了典型的三层网络架构进行设计,逻辑架构图如下:

第一层:Reactor通信调度层。该层的主要职责就是监听网络的连接和读写操作,负责将网络层的数据读取到内存缓冲区中,然后触发各种网络事件,例如连接创建、连接激活、读事件、写事件等,将这些事件触发到Pipeline中,再由Pipeline充当的职责链来进行后续的处理。

第二层:职责链Pipeline层。负责事件在职责链中有序的向前(后)传播,同时负责动态的编排职责链。Pipeline可以选择监听和处理自己关心的事件。

第三层:业务逻辑处理层,一般可分为两类:a. 纯粹的业务逻辑处理,例如日志、订单处理。b. 应用层协议管理,例如HTTP(S)协议、FTP协议等。

我们都知道影响网络服务通信性能的主要因素有:网络I/O模型、线程(进程)调度模型和数据序列化方式。

在网络I/O模型方面,Netty采用基于非阻塞I/O的实现,底层依赖的是JDKNIO框架的Selector。

在线程调度模型方面,Netty采用Reactor线程模型。常用的Reactor线程模型有三种,分别是:

a、Reactor单线程模型:Reactor单线程模型,指的是所有的I/O操作都在同一个NIO线程上面完成。对于一些小容量应用场景,可以使用单线程模型。

b、Reactor多线程模型:Rector多线程模型与单线程模型最大的区别就是有一组NIO线程处理I/O操作。主要用于高并发、大业务量场景。

c、主从Reactor多线程模型:主从Reactor线程模型的特点是服务端用于接收客户端连接的不再是一个单独的NIO线程,而是一个独立的NIO线程池。利用主从NIO线程模型,可以解决一个服务端监听线程无法有效处理所有客户端连接的性能不足问题。Netty线程模型并非固定不变的,它可以支持三种Reactor线程模型。

在数据序列化方面,影响序列化性能的主要因素有:

a、序列化后的码流大小(网络带宽占用)。

b、序列化和反序列化操作的性能(CPU资源占用)。

c、并发调用时的性能表现:稳定性、线性增长等。

Netty默认提供了对GoogleProtobuf二进制序列化框架的支持,但通过扩展Netty的编解码接口,可以实现其它的高性能序列化框架,例如Avro、Thrift的压缩二进制编解码框架。

以上这篇基于NIO的Netty网络框架(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • maven如何在tomcat8中实现自动部署

    maven如何在tomcat8中实现自动部署

    本篇文章主要介绍了maven如何在tomcat8中实现自动部署,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • Java中使用内存映射实现大文件上传实例

    Java中使用内存映射实现大文件上传实例

    这篇文章主要介绍了Java中使用内存映射实现大文件上传实例,本文对比测试了FileInputStream 或者FileOutputStream 抑或RandomAccessFile的频繁读写操作,最后总结出映射到内存后进行读写以提高速度,需要的朋友可以参考下
    2015-01-01
  • Kotlin基础教程之面向对象

    Kotlin基础教程之面向对象

    这篇文章主要介绍了Kotlin基础教程之面向对象的相关资料,需要的朋友可以参考下
    2017-05-05
  • SpringBoot项目修改访问端口和访问路径的方法

    SpringBoot项目修改访问端口和访问路径的方法

    这篇文章主要介绍了SpringBoot项目修改访问端口和访问路径的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • java使用文件流实现查看下载次数

    java使用文件流实现查看下载次数

    这篇文章主要为大家详细介绍了java使用文件流实现查看下载次数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Java  匿名内部类详解及实例代码

    Java 匿名内部类详解及实例代码

    这篇文章主要介绍了Java 匿名内部类详解及实例代码的相关资料,需要的朋友可以参考下
    2017-02-02
  • 详解用Eclipse如何创建Web项目

    详解用Eclipse如何创建Web项目

    本篇文章主要介绍了详解用Eclipse如何创建Web项目,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • Eclipse常用快捷键大全

    Eclipse常用快捷键大全

    这篇文章主要介绍了Eclipse常用快捷键大全,较为详细的针对eclipse中各种应用中使用快捷键进行了分类总结,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • JVM 心得 OOM时的堆信息获取方法与分析

    JVM 心得 OOM时的堆信息获取方法与分析

    下面小编就为大家带来一篇JVM 心得 OOM时的堆信息获取方法与分析。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • Java基于高精度整型实现fibonacci数列的方法

    Java基于高精度整型实现fibonacci数列的方法

    这篇文章主要介绍了Java基于高精度整型实现fibonacci数列的方法,是比较典型的算法,需要的朋友可以参考下
    2014-09-09

最新评论