Netty 5.0源码分析之综述

1. 前言

本系列主要是用于梳理Netty的架构流程,深入设计细节,重点关注Netty是如何实现它所声称的特性。

(ps:本人水平有限,如有错误,请不吝指教 : ))

2. 什么是Netty

Netty 是一个异步事件驱动的网络编程框架和工具,使用Netty 可以快速开发出可维护的,高性能、高扩展能力的协议服务及其客户端应用。Netty极大地简化并优化网络编程,例如TCP和UDP套接字服务器。

Netty吸收了多种协议的实现经验,包括FTP、SMPT、HTTP、各种二进制和文本协议,成功找到一种开发应用程序的方法,保证易于开发、性能、稳定性、扩展性等特性。

3. Netty总体架构

Netty 5.0源码分析之综述

  • 为不同的传输类型定义统一的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)

上一篇:【.Net】输出的字符靠右对齐


下一篇:给Java程序猿们推荐一些值得一看的好书