之前读过Netty3的源码,没有相关记录,这次再来看Netty4的时候发现其结构变化挺大,另外也记录下方便以后自己查看
目录:
- Netty基本组件
- Netty运作流程
- Netty服务端Demo
- 跟踪Netty服务端启动关键代码解析
1. Netty基本组件
整个Nettty核心组件主要由以上这些核心类构成。NioEventLoop、Channel、Pipeline、ChannelHandler、ByteBuf。
其中NioEventLoop负责处理客户端的连接,Channel处理客户端的读写,Pipeline逻辑链,ChannelHandler最终的逻辑处理实现类,ByteBuf数据缓冲区。
2.Netty服务端Demo&运行流程
1 | package com.jh.socket.netty; |
- 创建ServerBootStrap实例
- 设置Reactor线程池:EventLoopGroup、EventLoop就处理所有注册到本线程的Selector上面的Channel
- 设置绑定服务端Channel
- 创建处理网络事件的ChannelPipeline和Handler
- 绑定并启动监听端口
- 当轮询到准备就绪的channel后,由Reactor线程:NioEventLoop执行Pipeline中的方法,最终调用channelHandler
4.跟踪Netty服务端启动关键代码解析
根据上面的Server启动类,可以跟踪到如下的代码逻辑,主要包含两大块
- 初始化实例化Channel并且把Channel绑定到Selector上
- Server端启动绑定端口逻辑并且监听Accept事件
1 | -->bind(int inetPort)--AbstractBootstrap,Netty Server端启动绑定 |
初始化实例化注册Channel
1 | -->newChannel()--BootstrapChannelFactory这个工厂类在启动之前就已经实例化好了 |
实例化Channel
1 | -->newChannel()--BootstrapChannelFactory这个工厂类在启动之前就已经实例化好了 |
初始化
1 | -->init(Channel channel)--ServerBootstrap这里里面也没干啥,主要就是把上面的channel再次初始化,绑定一些相关属性,绑定Options,attribute, |
注册Channel至Selector
1 | -->register(Channel channel)--EventLoopGroup即bossGroup>MultithreadEventLoopGroup |
绑定端口并且监听Accept事件
1 | -->doBind0(final ChannelFuture regFuture, final Channel channel,final SocketAddress localAddress, final ChannelPromise promise)--AbstractBootstrap,Netty Server端启动绑定端口逻辑 |
以上这段代码的分析仅仅只是Netty的大致启动过程。从Netty初始化实例化Channel,到注册Selector。然后绑定服务端端口,以及最终监听Accept事件