Netty — API网关Demo

上一小节我们总结了Reactor模型,Netty基于主从Reactor模型设计了自己的模型结构,使得Netty在不同的场景下都有非常亮眼的性能和可用性表现。进入到这一小节,我又想到了那句话”Talk is cheap, show me code”。虽然上一小节我们简单写了一个“快速开始”,但是这对于要达到快速使用Netty进行网络开发的目的还远远不够。在一小节中我们会通过一系列的Demo示例熟悉Netty的开发,从代码中感受他们的特性。最后我们会通过一个简单的聊天加深我们对Netty各个核心组件的理解。最后我们动手设计实践一个API网关,认识网关的功能和结构,同时也进入提升我们使用Netty进行网络开发的熟练度,同时为后续深入源码打下基础。这一小节代码比较多,不要害怕耐心看完并付诸实践,一定会收获满满。

Netty流程剖析 — 服务启动源码

前面几个小节,我们梳理了几个核心组建,深入的分析了这几个组建的工作原理和一些实现细节,但是细看局部总是难以获得一个全局的视角,很难把它们真正的串起来。在梳理完这几个组件之后,我最想知道的就是启动的时候和读写操作的时候,这几个组件是怎么配合工作。虽然我也看过一切流程图,和一些简单的总结,但是自己没有深入过源码总感觉缺了点什么。我相信只有真正分析调试过源码才能真正理解,各个组件之间是怎么协作的,各个组件之间的设计要点是什么了。带着这些疑惑,我深入了源码也收获颇丰。这个部分,我们将对Netty的启动过程进行深入的分析,看看Netty是如何进行注册、绑定和监听。

Netty核心组件源码剖析 — ByteBuffer

在上一小节中,我们介绍channel,channel 的主要功能有处理网络IO读写,处理连接。这里需要注意的是channel仅仅是负责读写操作,在NIO中真正负责传输数据的是Buffer(缓冲区)。在NIO中,缓冲区的作用也是用来临时存储数据,可以理解为I/O数据的中转站。缓冲区直接对接channel,为其提供写入和读取的数据。通过操作buffer批量进行数据传输提高效率。在NIO中主要有八种缓冲区(ByteBuffer、CharBuffer、ShortBuffer,IntBuffer、LongBuffer、FloatBuffer、DoubleBuffer)。在网络中传输中,字节是基本单位,NIO使用的ByteBuffer作为Byte的字节容器,但是NIO中实现过于复杂,因此Netty又写了一套ByteBuf来代替NIO的ByteBuffer,这一小节我们将深入ByteBuf源码,探究ByteBuf底层原理与实现细节。

Netty核心组件源码剖析 — Channel

上一小节我们梳理了NioEventLoop,通过梳理我们知道,NioEventLoop本质上就是封装的执行线程,线程通过NioEventLoopGroup构造创建。NioEventLoop通过select()方法监听selectKey触发对应连接,读/写事件。并在每次的循环中执行一定的任务队列中的任务。而每次事件的触发都是基于Channel实现的。这里的Channel不是NIO中的Channel,而是我们Netty中封装了NIO Channel实现的Channel。这一小节我们将深入理解Channel的一些功能原理和具体的一些实现细节。

Netty核心组件源码剖析 — NioEventLoop

我们的源码分析会围绕着《Netty源码剖析与应用》这本书来学习,并且结合自己分析看源码,毕竟只有自己看到才是真的。这一小节我们要分析梳理核心组件NioEventLoop的源码,从源码角度看看NioEventLoop到底做了哪些事。第一次深入的研究源码学习,源码看得的确挺头大的,但是通过源码角度对Netty又有了一个全新的认知收获很多,那我们就一起来分析以下NioEventLoop吧。
Honesty
Honesty
人道洛阳花似锦,偏我来时不逢春
最新发布
Java IO — NIO Buffer
2024-10-21
Java IO — NIO Channel
2024-10-21
Java IO — IO/NIO模型
2024-10-21
Java异步编程方式介绍
2024-10-21
Elasticsearch — 索引(Mapping Index)
2024-10-19
Elasticsearch — 如何存储数据并保持一致性?
2024-10-19