Netty的ByteBuf基本结构

前面的章节中,我们了解到了 NIO 中的 Buffer。它其实就是一个数组,然后封装了一些方法来对这个数组进行操作。其实对于 NIO 编程而言,JDK NIO 中的 Buffer 已经可以满足编程的需要了,但是对该 Buffer 操作比较复杂,它的容量不能够动态的扩展和收缩。

Netty的ByteBuf重要API

Netty 自己定义 ByteBuf 是因为 Nio 自带的 ByteBuffer 不是很好用,提供的 API 不是很完善,所以 Netty 就自定义了 ByteBuf。当然它会提供一些很好用的 API 供用户使用,来很方便的让用户对其进行操作。

ByteBuf源码解析

Netty 的 ByteBuf 实现非常复杂,本章我们会宏观的从整体方向对 ByteBuf 进行分析。

AbstractByteBuf源码解析

AbstractByteBuf 继承自 ByteBuf,AbstractByteBuf 会实现 ByteBuf 里面的部分功能。

AbstractReferenceCountedByteBuf源码解析

从前面的类继承关系上面我们知道,它是继承 AbstractByteBuf 的类。它的主要功能是计数,类似于 JVM 内存回收的对象引用计数器,用于跟踪对象的分配和销毁,做自动内存回收使用。

UnpooledHeapByte源码解析

UnpooledHeapByteBuf 是基于堆内存进行内存分配的字节缓冲区,它没有基于对象池技术实现。在每次 I/O 的读写都会创建一个新的 UnpooledHeapByteBuf

PooledDirectByteBuf源码解析

PooledDirectByteBuf 基于内存池实现,与 UnpooledHeapByteBuf 的唯一不同就是内存的分配策略不同。

Netty的Channel

在了解 NIO 的 Channel 的时候,我们知道,它是用于非阻塞 I/O 的操作。类似于 NIO 的 Channel,Netty 提供了自己的 Channel 和其子类实现,用于异步 I/O 操作和其他相关的操作

Netty的AbstractChannel源码解析

AbstrcatChannel 继承 DefaultAttributeMap 类,并且实现 Channel 接口。

Netty的AbstractNioChannel源码解析

从前面章节的类关系图上面我们可以了解到 AbstractNioChannel 继承 AbstractChannel。AbstractChannel 里面的变量 AbstractNioChannel 都拥有,并且它会实现部分 AbstractChannel 的抽象方法

Netty的AbstractNioByteChannel源码解析

AbstractNioByteChannel 是 AbstractNioChannel 的子类,它的大部分功能和 AbstractNioChannel 类似,只不过单独的实现了部分功能。

Netty的NioServerSocketChannel源码解析

NioServerSocketChannel 它是服务端连接请求 Channel。它的功能和 JDK 里面的 ServerSocketChannel 相似。

Netty的NioSocketChannel源码解析

NioSocketChannel 主要关心的是客户端的连接操作。

Netty的UnSafe

Unsafe 和名字一样,是不安全的,它是聚合在 Channel 中协助进行网络读写相关操作的,只能给 Channel 内部使用,不应该被 Netty 的上层使用者使用,所以定义为 Unsafe

Netty的ChannelPipeline和ChannelHndler

Netty 的 ChannelPipeline 我们可以简单的理解为一个 Channel 数据管道,消息在 ChannelPipeline 中流动和传递。ChannelPipeline 持有 I/O 事件的连接器 ChannelHandler 的链表

Netty的EventLoop和EventLoopGroup

在前面的章节中,我们了解了 Reactor 模型的特点,以及大体讲了一下,Netty 对 Reactor 模型的支持,Netty 推荐使用主从多线程模型,有一个专门的线程用来接收 TCP 连接,

Netty的Future和Promise

Future 是 Java 的原生的 API 中提供的接口,用来记录异步执行状态,Future 的 get() 方法会判断任务是否执行完成,如果完成就会立刻返回执行结果,如果没有完成则一直阻塞,