netty是一个NIO通信框架,但是要用好netty,需要深入理解JAVA IO, NIO以及netty NIO框架的实现方式,本文简单描述netty的核心模块。如下图(来自netty.io首页)所示,netty包含三个模块:传输服务,支持的协议和核心模块,我们结合4.1.14.final源代码介绍三个模块。
传输模块。传输模块对应的是io.netty.channels包下面实现的的类tcp协议的channel类,channel类提供组合java 对应的channel和从java channel读写数据的功能,注册IO线程,引用channePipeline三类主要功能。channel是连接的抽象,其是将java channel, 线程,pipeline三则相结合的关键所在。
核心模块。核心模块在源代码中对应channelPipeline所管理的东西。byteBuffer提供了数据缓存和传输的机制,同意交互api定义了channel,pipeline,handler,context的统一接口,事件机制是handler之间,handler与channel之间交互的机制。
协议支持。本质上都是handler, 在netty中,协议就是一堆handler的有序组合。tls, 压缩解压,解码编码等等,本质上都是对底层channel数据流的粘包/拆包操作。
该图只是逻辑上的核心模块划分, 从阅读源代码的角度来讲,我个人认为有如下核心模块。
netty引擎模块,包含bootstrap, NioEventLoop, NioEventLoopGroup等相关类。bootstrap负责启动程序,创建channel, 初始化配置channel; eventLoop相关类负责利用selector监控所注册的channel, 发起channel的读和写,是真正的netty引擎,同事eventLoop还负责netty task/scheduedTask的执行。
channel模块。包含各种协议的channel, channelPipeline相关类,channel中包含对应的unsafe,该类中实现了真正对channel的操作;channelpipeline组织和管理channel上的所有handler,是责任链模式的经典实现。
handler模块.这个模块是对应应用层协议的实现,包含tls, http等协议的解析,该模块的代码可以看一些通用的协议和基础handler.
netty系列的文章将逐步介绍:
- netty的入口--bootstrap
- netty的发动机--NioEventLoop/NioEventLoopGroup
- TCP的channel--NioSocketChannel/NioServerSocketChannel
- 责任链模式--channelPipeline
- netty的数据缓存--byteBuffer
- netty的future/listener回调模式
- netty的连接池
- netty安全--TLS
- http协议解析