Netty答疑解惑-Netty组件之间的关系

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

Netty中组件有很多,在前的介绍了很多重要的组件例如: Bytebuf、EventLoopGroup、Channel 等等。组件之间有着关联关系,下面就来讲一下组件之间的关系。首先看一下Netty的线程模型:

image.png

通过线程模型来说明一下组件之间的关系。

1. EventLoop和EventLoopGroup

image.png

EventLoopGroup和EventLoop是一个一对多的关系,从代码层面看:

public interface EventLoop extends OrderedEventExecutor, EventLoopGroup {
    @Override
    EventLoopGroup parent();
}
复制代码

EventLoop是EventLoopGroup的子类。也相当于是EventLoopGroup。

2. Channel、ChannelPipeline、ChannelHandler、ChannelHandlerContext

通过源码研究可以知道(以NioServerSocketChannel为例子),Channel创建的时候会同时创建ChannelPipeline 这里可以知道,Channel和ChannelPipeline是一一对应的关系。ChannelPipeline 内部维护了一个ChannelHandler的双向链表,同时这个双向链表继承了ChannelHandlerContext和ChannelHandler。当你往

ChannelPipeline 添加ChannelHandler的时候,首先是包装成ChannelHandlerContext,然后添加到上下文中。关系图如下:

image.png

上图说明了Channel、ChannelPipeline、ChannelHandler、ChannelHandlerContext四者之间的关系。

Tips:ChannelHandler如果是单例,ChannelHandler与ChannelPipeline是1对多的关系

  • Channel和ChannelPipeline是一对一的关系,Channel创建的时候绑定ChannelPipeline
  • ChannelPipeline中有多个ChannelHandler,这里包括ChannelInboundHandler和ChannelOutboundHandler以及双工类型的处理器。
  • ChannelHandlerContext和ChannelHandler是一对一的关系。ChannelHandler注册到ChannelPipeline的时候会包装成ChannelHandlerContext。
  • ChannelPipeline中维护的双向链表是ChannelHandlerContext。

我是蚂蚁背大象,文章对你有帮助点赞关注我,文章有不正确的地方请您斧正留言评论~谢谢

猜你喜欢

转载自juejin.im/post/7079374891341856776
今日推荐