Netty 出站入站机制详解

本文详细介绍了Netty的出站入站机制,通过一个实例展示了数据从客户端到服务器再到客户端的完整流程。内容包括:1. 读事件触发时,Netty如何调用Inbound方法处理入站数据;2. 写事件触发时,如何调用Outbound方法进行出站操作。通过源码分析,揭示了Netty仅使用一个双向链表就能实现出站和入站操作的秘密,指出在处理读事件时遍历InboundHandler,写事件时则遍历OutboundHandler。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前段时间在B站学习Netty,讲到出站入站的机制时一直没搞明白到底是怎么弄的,直到开始讲源码部分时才终于搞明白。

先来看看Netty官方有关出站入站机制的解释:
在这里插入图片描述
按照图片的理解,则是在通道中,每次出现读事件时,会从头至尾依次调用Inbound即入站方法处理;
而触发写事件时,则会从尾到头依次调用outbound即出站方法处理。

这里会给人一种错觉,那就是netty在内部维护了两个单向链表实现出站入站操作,而事实上,ChannelPipeline中实际上是维护了一条由ChannelHandlerContext组成的双向链表,这里我们后面再说。

我们先来看一个例子,模拟一个场景,客户端向服务器发送数据,服务器写回客户端一个响应数据:
整体流程如图:
在这里插入图片描述
下面进行每一步的讲解:

  1. 首先服务器接收到来自客户端的数据,通过read方法获取,此时数据是存储在ByteBuf中
  2. 读取后的下一步首先要解码(入站)获取其真实数据,并且我们在解码器中定义了一个方法,将数据写回
  3. 执行写回操作之前,首先会调用Encoder(出站)进行编码,最后才将数据写回给客户端

以上体现了出站和入站的基本思想,即:
1. 入站操作主要是指读取数据的操作;而出站操作主要是指写入数据的操作
2. 入站会从先读取,再执行入站的Handler;出站会先执行出站的Handler,再写入

到这里其实出入站的操作已经解释完毕,但是底层的问题还没有解决:为什么只用了一个双向链表就可以实现?

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值