回忆handler

链式结构

我们先来回忆下在Netty 源码分析之 ChannelPipeline(一) 提到过来的handler链式结构:

  • handler分为实现ChannelInboundHandler接口的入站处理器和实现ChannelOutboundHandler接口的出站处理器;

  • handler由DefaultChannelHandlerContext进行包装,并组成一个双向链表;

  • 所有的入站操作从HeadContext出发,沿着链表经由每一个入站处理器处理后向TailContext方向传递;

  • 所有的出站操作从TailContext出发,沿着链表经由每一个出站处理器处理后向HeadContext方向传递;

  • 无论是入站操作抑或是出站操作的传递,都可以在handler中按照业务需求被中断或者改变传递方向。

本文的封面图使用了一张流水线卡通图,正因为这个链式结构非常类似于制造业里的流水线,handler就像是流水里的处理节点,而入站出站数据就如同流水线上被加工的产品。

初始化

一个常见的客户端初始化过程是这个样子的: