Magic Netty 技术基础知识积累

Netty的框架构成

2018-06-14  本文已影响7人  逅弈

Netty的框架构成

Netty是一个多模块的项目,他的包结构设计的非常完美,但不是一开始就设计成这样的,也是在他发展的过程中慢慢的修改完善,最后形成了一个堪称完美的包结构。

Netty中的jar包

Netty是一个多模块的项目,有众多的jar包,我们可以直接使用它的 all-in-one 的包,也可以单独使用其中的某些包。这些单独的jar包包括:

netty-common

common包主要有一些通用的工具类,还有Netty自己封装的一个并发包,里面有他重新实现的 FuturePromise 以及 EventExecutorFastThreadLocal 等通用的类,common包作为netty的一个核心基础包,其他的包都需要依赖他。

netty-buffer

buffer包实现了一个设计优美的ByteBuf(最初被设计为接口,后来被改为抽象类)组件,主要用来承载字节,包括字节的写入与读取。除了可以申请堆内存,通过Netty的ByteBuf还可以申请堆外内存,即DirectBuffer。另外对于Buffer的管理,Netty也是非常棒的,他实现了一个内存池,对于已经分配的内存使用完之后可以不需要释放,而是回收到内存池中去,下次再次申请时可以在池中寻找一块匹配的内存进行分配。

netty-transport

transport包中有四种重要的类(或接口):Bootstrap、Channel、ChannelHandler和EventLoop。

netty-handler

handler包中主要是为我们内置实现的一些开箱即用的ChannelHandler的实现类。比如说我们需要记录下所有的事件的日志,那么只需要在pipeline中增加一个 LoggingHandler 就可以了,再比如说我们需要将一个http协议升级到https,那么只需要在我们的pipeline中增加一个 SslHandler 就可以了。

netty-codec

codec包主要是实现编解码的,主要的两个基础的抽象类:ByteToMessageDecoderMessageToByteEncoder,分别是将字节解码为对象,以及将对象编码为字节。其他所有的编解码的实现都是基于这两个类。我们可以通过继承这两个类来实现自己的编解码逻辑,也可以使用netty中已有的一些编解码方法,因为netty为我们内置实现了非常多的开箱即用的编解码的类,例如:HttpRequestDecoderHttpResponseEncoderProtobufDecoderLineBasedFrameDecoder等等。

netty-resover

resover包主要是实现了一些解析器,包括 addresshostnamedns 等数据的解析。

Netty包结构

让我们通过以下几张图来查看下netty在他发展的过程中包结构的变化:

image-3.1.0.png image-3.2.0.png image-3.3.0.png image-3.4.0.png image-3.5.0.png image-4.0.0.png image-4.0.11.png image-4.0.17.png image-4.0.22.png image-4.0.30.png image-4.0.40.png

可以看到在版本不断升级的情况下,Netty的包结构并没有发生太大的变化。这是非常不容易的,要知道Netty的作者从2003就开始了Netty的项目,现在大版本已经发布到4.x了(目前Netty5已经废弃),在这么长的时间中,包结构能保持这么稳定说明Netty项目足够优秀。我们列举了一些流行的框架,比较一下各框架的包结构的变更的比例,结果如下表所示:

image-package-disorder-compare.png

上面的表格表示每个项目包结构重新设计的占比,可以看到Netty的包结构是最稳定的。这意味着Netty的包结构从一开始就设计的比较合理,经过长久的发展也没有发生大的变化,从另一方面也反映了Netty是一个非常优秀的项目。

稳定的包结构所带来的好处也是不言而喻的:

PS:包结构参考自 http://edmundkirwan.com/general/netty.html

我是逅弈,如果文章对您有帮助,欢迎您点赞加关注,并欢迎您关注我的公众号:

欢迎关注微信公众号
上一篇下一篇

猜你喜欢

热点阅读