Netty中Channel、ChannelPipeline、ChannelHandler、ChannelHandlerContext之间的关系

在这里插入图片描述

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章