画了张图,包含了netty的大部分组件,一些说明在图中标出便于理解
在我的理解看来可以将netty大体分为左右两部分
左半部分可以理解为线程池系列 用来执行具体任务,右半部分可以理解为核心组件系列 包括selector,channel,pipeline及handel,后面会逐个介绍
根据Netty官方提供的example包下的第一个例子,只连接不处理 来分析一下左右两部分分别是什么
以客户端来分析
核心点几步:
1. 创建一个线程池组group; //可以说几乎完成了左半部分线程池系列的全部初始化
2. 创建一个客户端Bootstrap;
3. 加入线程池组,
4. 加入socketChannel, //设置了channelFactory 用来创建NioSocketChannel
5. 定义了ChannelInitializer,加入了自定义的handel;
6. 异步connect; //这一步做的事比较多,new一个channel,初始化一个pipeline,将hendel全部加入到pipeline。从group中拿一个loop 将channel注入到loop中,启动loop线程,将channel注册到selector上
7. 关闭channel;
8. 关闭线程池组group;
左半部分线程池系列几乎都是由第1步创建线程池组完成的,当然还有第4步启动了loop的线程
右半部分核心组件初始化由4,5,6步完成。
详细解析篇幅过长 分三篇食用
第一篇 源码解析-Netty源码之EventLoopGroup线程池分析
第二篇 源码解析-Netty源码之Bootstrap创建,初始化Channel,Pipeline,handler
了解Java NIO原理 源码解析-JavaNIO之Buffer,Channel