1. 前言
本系列主要是用于梳理Netty的架构流程,深入设计细节,重点关注Netty是如何实现它所声称的特性。
(ps:本人水平有限,如有错误,请不吝指教 : ))
2. 什么是Netty
Netty 是一个异步事件驱动的网络编程框架和工具,使用Netty 可以快速开发出可维护的,高性能、高扩展能力的协议服务及其客户端应用。Netty极大地简化并优化网络编程,例如TCP和UDP套接字服务器。
Netty吸收了多种协议的实现经验,包括FTP、SMPT、HTTP、各种二进制和文本协议,成功找到一种开发应用程序的方法,保证易于开发、性能、稳定性、扩展性等特性。
3. Netty总体架构
- 为不同的传输类型定义统一的API,适用于阻塞和非阻塞套接字;
- 基于一个灵活、可扩展的事件模型,允许关注明确的任务分工;
- 高度可定制的线程模型,适用于单线程、一个或多个像SEDA这样的线程池;
- 真正无连接的数据报套接字支持(版本3.1+);
- 完整的 SSL / TLS 和 StartTLS 的支持;
- HTTP、WebSocket支持;
- Google Protocol Buffer支持。
4. 关注点
本系列文章主要关注Core
部分的实现:
Extensible Event Model
(可扩展的事件模型);Universal Communication API
(统一的通信API);Zero-Copy-Capable Rich Byte Buffer
(零拷贝的Buffer)。
4.1 Extensible Event Model
Netty具有定义良好的I/O事件模型。由于严格的层次结构区分了不同的事件类型,因此Netty允许你在不破坏现有代码的情况下实现自己的事件类型,这是与其他框架相比另一个不同的地方。
4.2 Universal Communication API
Java的Old I/O和New I/O,使用了互不兼容的API,而Netty则提供了统一的API封装这两种I/O模型。
4.3 Zero-Copy-Capable Rich Byte Buffer
在数据传输时,最终处理的数据会需要对单个传输层的报文,进行组合或者拆分。NIO原生的ByteBuffer要做到这件事,需要对ByteBuffer内容进行拷贝,产生新的ByteBuffer,而Netty通过提供Composite(组合)和Slice(切分)两种Buffer来实现零拷贝。
5. Netty源码结构
为了理解Netty的异步事件驱动机制,需要研究Netty的源码实现。其包结构如下所示:
io.netty
- bootstrap 配置启动服务相关的类
- buffer 缓冲区相关的类
- channel 处理连接的核心类
- handler 实现协议编解码的类
- util 工具类
接下来,我们就逐一分析这些包结构中的实现。
(END)