ChannelPipeline
ChannelPipeline
ChannelPipeline提供了ChannelHandler链的容器,并定义了用于在该链上传输入站和出站事件流的API。
ChannelHandler安装到ChannelPipeline中的过程如下:
- 一个ChannelInitializer的实现被注册到了ServerBootstrap中;
- 当ChannelInitializer.initChannel()方法被调用时,ChannelInitializer将在ChannelPipeline中安装一组自定义的ChannelHandler;
- ChannelInitializer将它自己从ChannelPipeline中移除。
使得事件流经ChannelPipeline是ChannelHandler的工作,它们是在应用程序的初始化或者引导阶段被安装的。这些对象接收事件、执行它们所实现的处理逻辑,并将数据传递给链中的下一个ChannelHandler。它们的执行顺序是由它们被添加的顺序所决定的。实际上,被我们称为ChannelPipeline的是这些ChannelHandler的编排顺序。
ChannelPipeline持有所有将引用于入站和出站数据以及事件的ChannelHandler实例,这些ChannelHandler实现了应用程序用于处理状态变化以及数据处理的逻辑。
我们可以根据需要通过添加或者移除ChannelHandler实例来修改ChannelPipeline。通过利用Netty的这项能力可以构建出高度灵活的应用程序。
修改ChannelPipeline
ChannelHandler可以通过添加、删除或者替换其他的ChannelHandler来实时地修改ChannelPipeline的布局。(它也可以将它自己从ChannelPipeline中移除。)这是ChannelHandler最重要的能力之一。
ChannelHandler的用于修改ChannelPipeline的方法:
名称 | 描述 |
---|---|
addFirst addBefore addAfter addLast | 将一个ChannelHandler添加到ChannelPipeline中 |
remove | 将一个ChannelHandler从ChannelPipeline中移除 |
replace | 将ChannelPipeline中的一个ChannelHandler替换为另一个ChannelHandler |
ChannelPipeline的用于访问ChannelHandler的操作:
名称 | 描述 |
---|---|
get | 通过类型或者名称返回ChannelHandler |
context | 返回和ChannelHandler绑定的ChannelHandlerContext |
names | 返回ChannelPipeline中所有ChannelHandler的名称 |