Netty  是目前使用网络编程的首选,很多的框架都是基于Netty进行开发的。

比如Spring5的WebFlux

Netty一共有3个主要部分组成:

1. Netty核心,传输服务层,协议支持层,以及高效的数据结构ByteBuffer

2.统一网络通信的API

3.事件驱动模型

 

Netty中又有5个核心概念

1.Channel 在Netty中不再对Socket本身进行操作,而是对Channel进行操作,每一个Channel都是非阻塞的,代表着一个链接,可以进行IO的写入/读取操作

2.ChannelFeature  获取当前Channel的状态,是否已经准备好,是否已经完成。也可以在ChannelFeature上增加一个回调,当操作完成后自动执行

3.Event&Handel  核心功能,事件可以找到入站和出站的数据流

4.Encode&Decode  主要是编解码,将数据通过ByteBuffer进行传输等

5.ChannelPiePeline   将一串向相同处理方式的事件挂在同一个ChannelPiePeline 上,这个我不太清楚理解的对不对。

 

Netty的模型目前有3种

1. Reactor的单线程模型。

 

 单线程模型: 基于IO非阻塞以及IO复用,业务线程在对应的Channel中,Channel向Reactor进行注册事件,用户请求连接到Reactor线程,由Reactor进行【IO的处理以及事件线程的分发】,将消息数据分发到对应的Channel进行处理。

 

 

2. Reactor的多线程

 

 Reactor的多线程模型在单线程模型的基础上实现了【IO隔离】,IO隔离是什么?

Reactor只负责进行数据的IO处理,然后将数据发向【工作线程池】,由工作线程池进行具体的分发操作

3。Reactor的主从模型

 

 

*我感觉哪里写的不对,求证后改一波