
今天是猿灯塔“365篇原创计划”第一篇。
接下来的时间灯塔君持续更新Netty系列一共九篇
当前:Netty 源码解析(一)开始
Netty 源码解析(二): Netty 的 Channel
Netty 源码解析(三): Netty 的 Future 和 Promise
Netty 源码解析(四): Netty 的 ChannelPipeline
Netty 源码解析(五): Netty 的线程池分析
Netty 源码解析(六): Channel 的 register 操作
Netty 源码解析(七): NioEventLoop 工作流程
Netty 源码解析(八): 回到 Channel 的 register 操作
Netty 源码解析(九): connect 过程和 bind 过程分析
今天呢!灯塔君跟大家讲:
Netty 源码解析(一)
-
本文只介绍TCP相关的内容,Netty对于其他协议的支持,不在本文的讨论范围内。
-
和并发包的源码分析不一样,我不可能一行一行源码说,所以有些异常分支是会直接略过,除非我觉得需要介绍。
-
Netty源码一直在更新,各版本之间有些差异,我是按照2018-09-06的最新版本 4.1.25.Final 来进行介绍的。
1<dependency>
2 <groupId>io.netty</groupId>
3 <artifactId>netty-example</artifactId>
4 <version>4.1.25.Final</version>
5</dependency>
开netty-example的源码把echo包下面的代码复制出来玩一玩。

-
ServerBootstrap类用于创建服务端实例,Bootstrap用于创建客户端实例。
-
两个EventLoopGroup:bossGroup和workerGroup,它们涉及的是Netty的线程模型,可以看到服务端有两个group而客户端只有一个,它们就是Netty中的线程池。
-
Netty中Channel,没有直接使用Java原生的ServerSocketChannel和SocketChannel,而是包装了NioServerSocketChannel和NioSocketChannel与之对应。
当然,也有对其他协议的支持,如支持UDP协议的 NioDatagramChannel本文只关心TCP相关的。
-
左边handler(...)方法指定了一个handler(LoggingHandler),这个handler是给服务端收到新的请求的时候处理用的,右边handler(...)方法指定了客户端处理请求过程中需要使用的handlers。
如果你想在EchoServer中也指定多个handler也可以像右边的EchoClient一样使用ChannelInitializer
-
左边childHandler(…) 指定了childHandler,这边的handlers是给新创建的连接用的,我们知道服务端ServerSocketChannel在accept一个连接以后,需要创建SocketChannel的实例,childHandler(…)中设置的handler就是用于处理新创建的SocketChannel的,而不是用来处理ServerSocketChannel实例的。
-
pipeline:handler可以指定多个(需要上面的ChannelInitializer类辅助),它们会组成了一个 pipeline,它们其实就类似拦截器的概念,现在只要记住一点每个NioSocketChannel或NioServerSocketChannel实例内部都会有一个pipeline实例pipeline中还涉及到handler 的执行顺序。
-
ChannelFuture:这个涉及到Netty中的异步编程,和JDK中的Future接口类似。

365篇原创技术干货
关注“猿灯塔”公众号
即可免费学习Java技术
END

扫码关注

