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

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

Netty的优势有:springboot

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网络框架(详解)就是小编分享给你们的所有内容了,但愿能给你们一个参考,也但愿你们多多支持脚本之家。

相关文章
相关标签/搜索