Netty那些事(3)之Netty简介

Netty是提供异步的、事件驱动的网络应用程序框架和工具,可以快速开发高性能、高可靠性的网络服务器和客户端程序。


Netty那些事(3)之Netty简介_第1张图片
Netty服务端代码核心代码1


Netty那些事(3)之Netty简介_第2张图片
Netty服务端核心代码2


Netty那些事(3)之Netty简介_第3张图片
Netty客户端核心代码1


Netty那些事(3)之Netty简介_第4张图片
Netty客户端核心代码2

服务端启动流程:

1. 首先是要boss和worker两个线程池来初始化一个ChannelFactory;

2. 是要ChannelFactory来初始化一个ServerBootstrap实例。

3. 为ServerBootstrap设置pipleLineFactory,这里用来添加处理的handle;

4. 是要Bind方法绑定监听。

客户端启动流程:

1. 首先是要boss和worker两个线程池来初始化一个ChannelFactory;

2. 是要ChannelFactory来初始化一个ServerBootstrap实例。

3. 为ServerBootstrap设置pipleLineFactory,这里用来添加处理的handle;

4. 是要connect方法监听。


Netty那些事(3)之Netty简介_第5张图片
Netty架构图

Netty也是有属于自己的三层架构模型

1. Reactor通信调度层,负责监听客户端的链接请求,将数据负责到缓冲区,并触发这些事件到pipeline;

2. pipleLine职责链层,负责动态的编排职责链,职责链可以选择监听和处理自己关心的事件,它可以拦截处理和后/向前传播事件,具体的事件的业务处理;

3. service层,业务编排层有两类,一类是纯粹的业务逻辑编排,一类是其他的应用层协议插件,用于特定相关的会话和链路管理。

下面讲下Netty的线程模型:


Netty那些事(3)之Netty简介_第6张图片
Netty的三种线程模型

1. 单线程模型适用于一些小容量应用场景,可以使用单线程模型。但是对于高负载、大并发的应用场景却不合适;

2. 多线程模型在绝大多数场景下,Reactor多线程模型都可以满足性能需求;但是,在极个别特殊场景中,一个NIO线程负责监听和处理所有的客户端连接可能会存在性能问题。例如并发百万客户端连接,或者服务端需要对客户端握手进行安全认证,但是认证本身非常损耗性能。在这类场景下,单独一个Acceptor线程可能会存在性能不足问题。

3. 可解决多线程下的问题。


Netty那些事(3)之Netty简介_第7张图片
Netty特性1


Netty那些事(3)之Netty简介_第8张图片
Netty特性2

Netty VS 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了,做无用功。

Netty的行业运用

1. 互联网领域

2. 大数据领域

3. 游戏行业

4. 银行、证券等金融领域

5. 电信领域

6. 电力等企业市场

Netty的未来展望:

1. 应用范围:随着大数据、互联网和云计算的发展,传统的垂直架构将被分布式、弹性伸缩的新架构替代 ,系统只要分布式部署,就存在多个 节点之间的通信问题,由于是内部通信,同时强调搞扩展性和高性能性,因此往往会选择高性能的通信方式,利用Netty+二进制编码承载这些内部私有协议,已经逐渐成为业界主流的用户:如Dubbo,RocketMQ,Hadoop的Avro等。

2. 社区活跃度:Netty的社区一直非常活跃,API文档和开发指南内容也比较全面,Bug的修复速度相对较快,这些因素促进了Netty社区的良性发展。

3. Netty的版本更新节奏非常快。

你可能感兴趣的:(Netty那些事(3)之Netty简介)