0x00 阅读源代码
下载源代码
- 阅读版本号
netty-4.1.33.Final- 由于github下载速度是在太慢了,这里用gitee克隆一个镜像。
- 下载版本
git clone -b netty-4.1.33.Final git@gitee.com:Z201/netty.git
查看源代码结构
- 查看项目主要文件夹
tree -d -L 1
├── all
├── bom
├── buffer (Core netty定制的buffer)
├── codec (Protocol Support)
├── codec-dns (Protocol Support)
├── codec-haproxy (Protocol Support)
├── codec-http (Protocol Support)
├── codec-http2 (Protocol Support)
├── codec-memcache (Protocol Support)
├── codec-mqtt (Protocol Support 物联网)
├── codec-redis (Protocol Support )
├── codec-smtp (Protocol Support 邮件)
├── codec-socks (Protocol Support)
├── codec-stomp (Protocol Support ws)
├── codec-xml (Protocol Support)
├── common (Core)
├── dev-tools
├── docker
├── example (抄代码的地方)
├── handler (Protocol Support)
├── handler-proxy (Protocol Support)
├── license
├── microbench (测试用的)
├── resolver (Core)
├── resolver-dns (Core)
├── tarball
├── target
├── testsuite
├── testsuite-autobahn
├── testsuite-http2
├── testsuite-osgi
├── testsuite-shading
├── transport (Transport Services)
├── transport-native-epoll (Transport Servicesnative omitted - reserved keyword in Java)
├── transport-native-kqueue (Transport Servicesnative omitted - reserved keyword in Java)
├── transport-native-unix-common Transport Services native omitted - reserved keyword in Java)
├── transport-native-unix-common-tests
├── transport-rxtx (Transport Services 串口编程 作废)
├── transport-sctp (Transport Services )
└── transport-udt (Transport Services 作废)
- 将项目导入idea中,笔者采用mac系统。这里需要注意需要安装部分软件。
brew install autoconf automake libtool
# 如果安装了国内的镜像出现Error opening archive: Failed to open
# export HOMEBREW_BOTTLE_DOMAIN=''
# 参考文档 https://zhuanlan.zhihu.com/p/383707713
# 如果是mac系统需要手动将pom文件tcnative.classifier修改成对应系统的。
mvn install -Dmaven.test.skip=true
0x01 根据官方文档快速入门
强烈推荐认真阅读netty的官方文档。
- 官方文档地址 :https://netty.io/wiki/index.html
Core
- netty-common模块是 Netty 的核心基础包,其他模块都需要依赖它。常用的包括通用工具类和自定义并发包。
- netty-buffer 模块中Netty自己实现了的一个更加完备的ByteBuf 工具类,用于网络通信中的数据载体。
- netty-resover模块主要提供了一些有关基础设施的解析工具,包括 IP Address、Hostname、DNS 等。
Protocol Support
- netty-codec模块主要负责编解码工作,提供主流协议的编辑码,还提供了抽象编解码类 ByteToMessageDecoder 和 MessageToByteEncoder,通过继承这两个类我们可以轻松实现自定义的编解码逻辑。
Transport Service
- netty-transport 模块可以说是 Netty 提供数据处理和传输的核心模块,如 Bootstrap、Channel、ChannelHandler、EventLoop、EventLoopGroup、ChannelPipeline 等。其中 Bootstrap 负责客户端或服务端的启动工作,包括创建、初始化 Channel 等;EventLoop 负责向注册的 Channel 发起 I/O 读写操作;ChannelPipeline 负责 ChannelHandler 的有序编排,这些组件在介绍 Netty 逻辑架构的时候都有所涉及。