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

目录

目标

io.netty.channel

io.netty.bootstrap

NIO封装

图示 

主要类关系图

写操作与读写事件时序图

NIOEventLoop的行为

NioEventLoopGroup

 NIOEventLoop

NioServerSocketChannel

NioSocketChannel

其他类


目标

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

io.netty.channel

虫洞

io.netty.bootstrap

虫洞

NIO封装

图示 

主要类关系图

通过源码去认知Netty-NIO封装_第1张图片 

描述

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

 

通过源码去认知Netty-NIO封装_第2张图片

描述

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

 

写操作与读写事件时序图

通过源码去认知Netty-NIO封装_第3张图片

NIOEventLoop的行为

通过源码去认知Netty-NIO封装_第4张图片

 

通过源码去认知Netty-NIO封装_第5张图片

NioEventLoopGroup

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

 NIOEventLoop

class NioEventLoop extends SingleThreadEventLoop

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

NioServerSocketChannel

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

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

NioSocketChannel

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

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

其他类

AbstractNioByteChannel
AbstractNioMessageChannel
AbstractNioChannel

 

 

 

你可能感兴趣的:(RPC)