网络I/o编程模型23 netty的出站与入站中handler加载与执行顺序
Posted 健康平安的活着
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络I/o编程模型23 netty的出站与入站中handler加载与执行顺序相关的知识,希望对你有一定的参考价值。
一 出站与入站中handler加载与执行顺序
1.1 关系梳理
1.调用 new Context(group,filterName(name,handler),handler)方法,创建一个Context。从这里可以看出来,每次添加一个handler都会常见一个关联的Context。调用 addLast方法,将Context追加到链表中。由下图的中的黄色箭头表示,可以看出123的顺序就是在追加。
2.每当创建channelSocket的时候都会创建一个绑定的pipeiline,1:1的关系,创建peipeline的时候会创建tail节点和head节点,形成最初的链表。
3.在调用peipeline的addLast方法的时候,会根据给定的handler创建一个context,然后建这个context插入到链表的尾端(tail的前面)
3.context包装了多个handeler,多个context在pipeline中形成双向链表。
4.入站方向叫inbound,由head节点开始,出站方向叫outbound,由tail节点开始。
因为出站是从内部向外面进行写操作,从tail开始能够让前面的handler进行处理,防止handler被遗漏,如编码。入站当然就是从head网内部输入,让后面的handler能够处理这些输入的数据。比如解码。
注意:虽然head也实现了outbound接口,但不是从head开始执行出站任务的。
5.而节点中间的传递通过AbstaractChannelHandlerContext类内部的fire系列方法,找到当前节点的下一个节点不断的循环传播,是一个过滤器形成 完成对handler的调度。
https://www.cnblogs.com/tianzhiliang/p/11739372.html
二 netty网络通信中涉及的出栈和入栈流程
2.1 描述
channelhandler处理事件分为出站和入站,两个方向的操作都是不同的,因此,netty定义了两个子接口继承channnelhandler。
netty提供的一系列使用的编码解码器,本质上也是一种handler,它们都实现了ChannelInboundHandler或者ChannelOutboundHandler接口。
业务处理的handler一定要放到最后面
1.channelInboundhandler 入站事件接口
channelActive:用于当channel处于活动状态时被调用
channelRead: 当从channel读取数据时被调用等方法
2.channelOutboundHndler 出站事件接口
bind 方法:当请求将channel绑定到本地地址时调用
close 方法: 当请求关闭channel 时调用等等。
3.整体流程图
开发者涨薪指南 48位大咖的思考法则、工作方式、逻辑体系以上是关于网络I/o编程模型23 netty的出站与入站中handler加载与执行顺序的主要内容,如果未能解决你的问题,请参考以下文章