通过源码去认知Netty-NIO封装

目录

1. 目标

2. io.netty.channel

3. io.netty.bootstrap

4. NIO封装

4.1. 主要类关系图

4.2. 写操作与读写事件时序图

4.3. NIOEventLoop行为的流程图

4.4. NioEventLoopGroup

4.5. NIOEventLoop

4.6. NioServerSocketChannel

4.7. NioSocketChannel

4.8. 其他类


1. 目标

通过io.netty.channel和io.netty.bootstrap两个package,对netty进行总体认知。进一步查看netty对NIO的封装,了解源码实现,梳理类层次关系与源码流程。

2. io.netty.channel

虫洞

3. io.netty.bootstrap

虫洞

4. NIO封装

4.1. 主要类关系图

描述

一个bootstrap相当于一个client,包含一个eventloopgroup作为组,group包含多个eventloop,每个eventloop使用一个selector管理多个socketchannel的事件。

描述

一个server bootstrap 相当于一个server,包含两个eventloopgroup,一个负责serversocketChannel,一个负责socketchannel。

4.2. 写操作与读写事件时序图

4.3. NIOEventLoop行为的流程图

4.4. NioEventLoopGroup

class NioEventLoopGroup extends MultithreadEventLoopGroup
  •     具有多个NIOEventLoop
  •     newChild,创建NioEventLoop
  •     rebuildSelectors,管理的child均重建selector,以绕开epoll的100%cpu bug
  •     super:MultithreadEventExecutorGroup
    • EventExecutor[] children 其实引用的就是eventloop
    • EventExecutorChooser chooser 选择器,默认时循环选择

4.5. NIOEventLoop

class NioEventLoop extends SingleThreadEventLoop

    NIOEventLoop中引用selector,当前线程首次调用eventloop.execute()时,开始轮询检查是否有可用的event,据event类型,调用channel pipeline的对应操作。详细流程见上图。

4.6. NioServerSocketChannel

    extends AbstractNioMessageChannel
                             implements io.netty.channel.socket.ServerSocketChannel

主要作用:
调用javaChannel()获取到JDK NIO ServerSocketChannel,并进行操作。
如:调用accept(),接收SocketChannel连接,生成NIOSocketChannel    
    

4.7. NioSocketChannel

extends AbstractNioByteChannel implements io.netty.channel.socket.SocketChannel

调用javaChannel()获取JDK NIO SocketChannel,并进行操作。
如:读写bytebuf 

4.8. 其他类

AbstractNioByteChannel
AbstractNioMessageChannel
AbstractNioChannel

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值