3、服务端Channel创建

2019-02-15  本文已影响0人  后厂村彭于晏

课程大纲

1、服务端Channel创建流程
2、源码执行流程


1、服务端Channel创建流程

服务端Channel创建流程
     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()
image.png
image1.png
     2.服务端Channel初始化并注册。AbstractBootStrap.initAndRegister()
image3.png
     3.创建服务端channel。newChannel()
image4.png
       1)通过传入的Channel类型创建反射工厂。ReflectiveChannelFactory(Class<? extends T> clazz)
image5.png
       2)反射获取构造方法创建channel实例
image6.png
     4.进入NioServerSocketChannel的构造方法public NioServerSocketChannel()。通过newSocket(SelectorProvider provider)创建jdk底层channel对象
image7.png
image8.png
     5.创建TCP参数配置类。new NioServerSocketChannelConfig(this, javaChannel().socket())
image9.png
     6.调用父类AbstractNioChannel的构造方法。super(null, channel, SelectionKey.OP_ACCEPT)。配置阻塞模式为非阻塞和注册事件OP_ACCEPT
image10.png
     7.调用父类AbstractChannel构造方法,super(parent)。配置channel的唯一标识、用于jdk底层数据读写的unsafe和业务处理链ChannelPipeline。
image11.png
上一篇下一篇

猜你喜欢

热点阅读