这篇我们深入一下 Netty 的整体架构,做到从高处俯瞰 Netty。
上图现在看不懂没事,我们慢慢盘,这篇稍稍长了点,不过看完应该对 Netty整体架构会有个清晰的认识~
话不多说,发车!
从官网的一张图入手
如果你访问过 Netty 官网,你肯定会看到下面这张图,因为它就放在首页。
但也只有一张图,官网没有对这张图做任何说明,但咱们来盘一盘这张图。
显而易见,这张图把 Netty 切割成了三部分:core、transport services、protocol support。
- core:核心,实际上就是提供了一些底层通用实现来供上层使用,从图中可以看出包含的核心有可扩展事件模型、通用通信 API、可零拷贝的 buffer。
- transport services:传输服务,表明 Netty 支持多种传输方式,例如 TCP 和 UDP 、HTTP隧道、虚拟机管道。我们可以很方便的切换各种传输方式,因为 Netty 都支持了。
- protocol support:协议的支持,从图中可以看到 Netty 支持了非常多常见的协议,例如 HTTP、WebSocket、SSL、Google Protobuf(它其实是个编解码协议...放在这怎么说呢,个人觉得不太合适) 等等。可以说开箱即用,不必自行实现,当然,如果你想实现自定义协议,也是很方便的。
总体而言,这幅图想要表现的只是大致的分层,或者可以认为是代码分层,我们来看下大致的包结构,大家先有个大体印象就行:
core:
core 层大致包含以下这几个包:
- buffer:这个包主要就是实现了 Netty 自定义的 ByteBuf,因为 Java ByteBuffer 的 API 太难用了, 并且还有很多优化的余地,所以 Nettty 就实现了个 ByteBuf 替换之。
- common:就是一些通用的工具类,像我以前分析过的 Netty 时间轮,FastThreadLocal 就在 core 里面。
- resolver:从名字就可以得出,解析用的, 解析主机名、IP地址、DNS 等。
transport services:
这层大致包含以下这几个包:
主要的功能就是处理和传输数据了,如果对 Netty 稍稍有了解