public interface Channel extends AttributeMap, ChannelOutboundInvoker, Comparable<Channel> {
// ...
ChannelPipeline pipeline();
// ...
}
每一个 Channel 被创建,就会生成一个与其绑定的 ChannelPipeline。
ChannelPipeline 中包含了一个处理该 Channel 消息的 ChannelHandler 执行链。
当每一个 ChannelHandler 被注册到该 ChannelPipeline 中就会生成一个对应的 ChannelHandlerContext,和该 ChannelHandler 进行绑定。
ChannelHandler 的执行器链 ChannelPipeline 是由 ChannelHandlerContext 作为结点组成的双向链表。
public interface ChannelHandlerContext extends AttributeMap, ChannelInboundInvoker, ChannelOutboundInvoker {
// ...
Channel channel();
ChannelHandler handler();
// ...
}
一个 ChannelHandler 可以从属于(注册到)多个 ChannelPipeline。所以,一个 ChannelHandler 可以绑定多个 ChannelHandlerContext。
不过,这样的ChannelHandler必须使用 @Sharable 注解标注,保证它的线程安全性,否则试图将它注册到多个 ChannelHandlerPipeline 中时将会抛出异常。
https://netty.io/4.0/api/io/netty/channel/ChannelPipeline.html