课程大纲
1、服务端Channel创建流程
2、源码执行流程
1、服务端Channel创建流程
![](https://img.haomeiwen.com/i12240217/a7a5d9b328bd0618.png)
1.服务端Server调用bind()启动
2.调用Abstract.initAndRegister()完成初始化和注册操作
3.进入initAndRegister()方法,调用newChannel()创建服务端channel
4.进入构造函数,调用newSocket()通过jdk nio语法创建底层jdk channel
5.new NioServerSocketChannelConfig()创建TCP参数配置类
6.super(...)调用父类AbstractNioChannel构造方法,configBlocking(false)配置阻塞模式,添加感兴趣事件OP_ACCEPT
7.super(...)调用父类AbstractChannel构造方法,配置id,unsafe和channelpipeline
2、源码执行流程
1.服务端Server启动入口。ServerBootStrap.bind()->AbstractBootStrap.bind()
![](https://img.haomeiwen.com/i12240217/ce735f96c378478c.png)
![](https://img.haomeiwen.com/i12240217/88bec8f1c9b7acaa.png)
2.服务端Channel初始化并注册。AbstractBootStrap.initAndRegister()
![](https://img.haomeiwen.com/i12240217/b1b6f48ef6cf4513.png)
3.创建服务端channel。newChannel()
![](https://img.haomeiwen.com/i12240217/aa5191174401ac64.png)
1)通过传入的Channel类型创建反射工厂。ReflectiveChannelFactory(Class<? extends T> clazz)
![](https://img.haomeiwen.com/i12240217/61293f8501a974ee.png)
2)反射获取构造方法创建channel实例
![](https://img.haomeiwen.com/i12240217/7371ad26b9712aa5.png)
4.进入NioServerSocketChannel的构造方法public NioServerSocketChannel()。通过newSocket(SelectorProvider provider)创建jdk底层channel对象
![](https://img.haomeiwen.com/i12240217/de8e61fea7d64d46.png)
![](https://img.haomeiwen.com/i12240217/7da8b20ef8bef721.png)
5.创建TCP参数配置类。new NioServerSocketChannelConfig(this, javaChannel().socket())
![](https://img.haomeiwen.com/i12240217/b244914604aead68.png)
6.调用父类AbstractNioChannel的构造方法。super(null, channel, SelectionKey.OP_ACCEPT)。配置阻塞模式为非阻塞和注册事件OP_ACCEPT
![](https://img.haomeiwen.com/i12240217/e0d1347a951f158e.png)
7.调用父类AbstractChannel构造方法,super(parent)。配置channel的唯一标识、用于jdk底层数据读写的unsafe和业务处理链ChannelPipeline。
![](https://img.haomeiwen.com/i12240217/eb5296b4fcde7762.png)
网友评论