美文网首页程序员
netty源码分析(24)- pipeline总结

netty源码分析(24)- pipeline总结

作者: Jorgezhong | 来源:发表于2019-03-01 15:18 被阅读0次

    从18到23节都是在学习pipeline里面的内容,包括了ChannelHandlerChannelHandlerContext,事件的传播。本节进行总结一下。

    • pipeline初始化:在服务端channel客户端channel创建的时候被创建。创建pipeline的是她们的公共父类AbstractChannel
    • 添加删除ChannelHandlerpipeline的结构是双向链表结构,每一个节点都是ChannelHandlerContext,里面包装了用户自定义的ChannelHandler。添加和删除ChannelHandler最终都是删除其对应的ChannelHandlerContext节点。而在添加ChannelHandlerContext的过程中,使用instanceofinbound/outbound属性来判断ChannelHandler的类型。
    • pipeline的默认结构:pipeline创建时固定创建HeadContextTailContext作为头节点和尾节点。HeadContext节点,该节点持有一个unsafe,负责实现具体协议(具体的事件处理),而TailContext起到了终止事件和异常传播的作用。
    • pipeline的传播机制:分为三种
    1. inbound事件的的同类顺序传播
    2. outbound事件的同类逆序传播
    3. exception事件链表顺序传播
    三个问题
    • netty时如何判断ChannelHandler类型的?

    当调用pipeline.addLast(handler)的时候,其过程会实例化一个ChannelHandlerContext,其过程会调用instanceof关键子,判断handler是属于ChannelInboundHandler还是ChannelOutboundHandler,分别用boolean类型的变量inboundoutbound来标识。

    • 对于ChannelHandler的添加应该遵循怎么样的顺序?

    inbound类型的事件传播和添加顺序正相关而outbound类型的事件和添加顺序逆相关

    • 用户手动触发事件传播,不同的触发方式有什么不同?

    触发方式大体分两种,从开始节点触发从当前节点触发
    当用户调用类似ctx.channel().pipeline().fireXXX()的时候,表示从开始节点触发,对于inbound事件和exception事件来说,开始节点是HeadContext,对于outbound事件来说,开始节点是TailContext
    当用户调用ctx.fireXXXctx.write(XX)的时候,表示从当前节点触发,事件往下进行传播。

    相关文章

      网友评论

        本文标题:netty源码分析(24)- pipeline总结

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