Netty中ChannelPipeline和ChannelHandler的关系

ChannelPipeline是Netty中处理事件流的容器,它包含一系列ChannelHandler,事件从头部向尾部传播。ChannelHandler是处理入站和出站事件的组件,安装在初始化阶段。入站事件从头部开始,依次由ChannelInboundHandler处理,出站事件从尾部开始,最终到达网络传输层。ChannelHandlerContext用于在handler间传递事件。
摘要由CSDN通过智能技术生成

ChannelPipeline为ChannelHandler链提供了容器,并定义了用于在该链上传播入站和出站事件流的API。当Channel被创建时,它会被自动地分配到它专属的ChannelPipeline。

ChannelHandler安装到ChannelPipeline中的过程:

  1. 一个ChannelInitializer的实现被注册到了ServerBootstrap(或者用于客户端的Bootstrap)中。
  2. 当ChannelInitializer.initChannel()方法被调用时,ChannelInitializer将在ChannelPipeline中安装一组自定义的ChannelHandler;
  3. ChannelInitialier将它自己从ChannelPipeline中移除。

ChannelHandler是专为支持广泛的用途而设计的,可以将它看作是处理往来ChannelPipeline事件(包括数据)的何代码的通用容器。

使得事件流经ChannelPipeline是ChannelHandler的工作,它们是在应用程序的初始化或者引导阶段被安装的。这些对象接收事件、执行它们所实现的处理逻辑,并将数据传递给链中的下一个ChannelHandler。它们的执行顺序是由它们被添加的顺序所决定的。实际上被我们称为ChannelPipeline的是这些ChannelHandler的编排顺序。

从一个客户端应用程序的角度来看,如果事件的运动方向是从客户端到服务器,那么我们称这些事件为出站的,反之则成为入站的(我的理解:ChannelPipeline就是这个站,从客户端到服务器叫出站,从服务器到客户端叫入站)。入站和出站的ChannelHandler可以被安装到同一个ChannelPipeline中。如果一个消息或者任何其他的入站事件被读取,那么它会从Ch

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值