美文网首页
3、服务端Channel创建

3、服务端Channel创建

作者: 后厂村彭于晏 | 来源:发表于2019-02-15 17:51 被阅读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

    相关文章

      网友评论

          本文标题:3、服务端Channel创建

          本文链接:https://www.haomeiwen.com/subject/zfpmeqtx.html