ch.pipeline().addLast(new EchoOutboundHandler1()); ch.pipeline().addLast(new EchoOutboundHandler2());
ch.pipeline().addLast(new EchoInboundHandler1()); ch.pipeline().addLast(new EchoInboundHandler2()); ---------------------------------------- 链表中的顺序为head->out1->out2->in1->in2->tail 如果是in2里执行的write,则会从tail往前找Outbound执行,所以会执行out2、out1
建议的顺序: 先写outHandler,再写inHandler。 in的按顺序执行,out的逆序执行。 ---------------------------------------- netty 将数据写入 socket 的过程分析 https://blog.conn4575.com/p/java/netty/how-does-netty-write-to-socket/
inbound 事件从 headContext 开始,依次调用中间 handler 的对应方法,逐渐向尾部“冒泡”,最终所有事件都会到达TailContext ,TailContext 什么都做,将所有到达的事件都吞掉即可。outbound 事件从tailContext 开始(如果是某个中间 handler 发起的,就从这个 handler 对应的 context 开始),向链表头部传递,各个 handler 做出相应处理后最终传递给 HeadContext
|