Netty基本介绍
Netty是一个NIO的客户服务端框架,提供了简单与容易的API,能够帮助我们更快和更简单的开发客户端与服务端通信的应用。
Netty框架架构
从netty官网我们可以看到下面这个netty的架构图,从图中我们可以看到netty主要分为三部分.
- 核心部分(Core)
a. 提供了零拷贝的ByteBuffer(Zero-Copy-Capable Rich Byte Buffer)去操作数据,从而提高代码的运行效率,
b. 提供可扩展的事件模型(Extensible Event Model)
c. - 与网络数据处理相关的Transport Service
封装了TCP/UDP通信底层实现,同时提供了HTTP通道处理 - 协议支持(Protocol Support)
提供了常见的数据协议的封包与解包,同时将网络数据解析成相关的数据,如http数据.
Reactor模式
- 事件驱动模型
a. 事件监听器监听某一事件,当事件发生时进行相应的逻辑处理
b.事件源是事件产生的入口,由事件源触发事件,最终调用事件监听器进行处理
- Reactor模式(Reactor Pattern)架构
组件 | 描述 |
---|---|
Handle | 即操作系统中的句柄fd,是对资源在操作系统层面上的一种抽象,可以是CONNECT事件,也可以是READ、WRITE、CLOSE事件等。事件的发源地,即相当与事件驱动模型的事件源 |
Synchronous Event Demultiplexer(同步事件多路分离器) | 阻塞等待被监听的事件集fd_set中的事件发生。一般使用I/O复用技术实现,在linux系统上一般是select、poll、epol_waitl等系统调用,用来等待一个或多个事件的发生。调用者会被阻塞,直到分离器的描述符集上有事件发生。 |
Initiation Dispatcher(事件调度器) | 即Reactor角色,主要用于管理Event Handler,负责注册、移除EventHandler,是Reactor模式的入口,调用Synchronous Event Demultiplexer的select方法阻塞直到阻塞返回时,根据Handle找到相对应的Event Handler进行处理,即回调EventHandler中的handle_event()方法 |
Event Handler(事件处理器) | 事件处理的接口类。这些模板函数描述了和应用程序相关的对某个事件的操作,用户需要继承它来实现自己的事件处理器,即具体事件处理器。因此,事件处理器中的回调函数一般声明为虚函数,以支持用户拓展 |
Concrete Event Handler(具体的事件处理器) | 是事件处理器接口的实现。它实现了应用程序提供的某个服务。每个具体的事件处理器总和一个描述符相关。它使用描述符来识别事件、识别应用程序提供的服务 |
- IO Reactor三种模式
a. 单线程Reactor模式
b. 多线程IO Reactor模式
c. 多Reactor多线程模式