美文网首页Java 杂谈深入浅出Netty源码剖析
【第7篇】Netty初始化过程与Future源码分析

【第7篇】Netty初始化过程与Future源码分析

作者: 爱学习的蹭蹭 | 来源:发表于2019-05-20 23:16 被阅读1次

    1、 ServerBootStrap

    • ServerBootStrap是一个BootStrap的一个启动类
    • group 会处理所有的IO和事件

    2、 return this

    • return this表示返回方法的对象

    3、Netty的反射支持(重点)

    • 反射:通过反射机制能获取类定义的属性与方法成员,这样的动态调用方式称为反射
    • 凡是方法接收一个class的对象,其实就是跟反射有关如:channel(NioServerSocketChannel.class)
    • 代码显示
      //创建ServerBootstrap
      ServerBootstrap serverBootstrap = new ServerBootstrap();
      //设置参数的接收请求bossGroup和workerGroup对参数的实现实现对象处理、并对处理器绑定Channel
      serverBootstrap.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class).
      handler(new LoggingHandler(LogLevel.INFO)). childHandler(new WebSocketChannelInitializer());
    
    channel

    4、Future(重点)

    • Future是异步,提供中断、是否执行,是否完成
    • Future是一个futurej计算异步的结果,异步的计算他动作一定发生在另外一个线程的Future.get的方法的结果之前,由于内存一致性所影响的(难点

    5、 ChannelFuture(重点)

    • ChannelFuture 使用大量的事件监听器,是一个Channel异步IO的操作,而且Netty的所有IO都是异步的
    • 一个ChannelFuture要么是完成与未完成状态,当I/O操作开始时,一个Future的创建,表示完成状态失败与成功的返回
    • ChannelFuture提供很多方法进行检测I/O,监控await不建议使用此方法,建议addListener方法,由于此方法是非阻塞
    • 不要在ChannelHandler调用await方法,通常事件处理器方法被I/O的方法调用,await事件被的处理器调用的话,那么时间的处理被IO线程被调用的,那么等待的I/O操作就可能不会完成就可能造成死锁(**Do note confuse I/O timeout and await Timeout,意思就说不要把IO超时与await超时混在一谈**)
    ChannelFuture

    6、Netty的Future与JDK的Future有点在哪里?(重点和改良点)

    • Netty的Future它是继承JDK的Future
    • JDK的Future不知道什么时候调用Future.get()方法,Netty使用监听器解决这个问题,使用观察者模式
    • Netty的Future提供可以调用性,可用性的问题进行改良
    • Netty Future

    7、ChannelPipeline的作用(重点)

    • ChannelPipeline管道,将多个Channel连接起来一起进行操作
    • initChaannel当主持时会被调用,当实例方法返回的时会从管道进行移除
    ChannelPipeline

    8、 Netty使用监听(观察设计模式)

    • 凡是用监听几乎都是使用观察模式(状态发生变化)

    相关文章

      网友评论

        本文标题:【第7篇】Netty初始化过程与Future源码分析

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