美文网首页
netty源码分析(一) - 基本组件

netty源码分析(一) - 基本组件

作者: 进击的蚂蚁zzzliu | 来源:发表于2020-10-05 18:14 被阅读0次

基本组成

netty基本组件.png

从图中可以看出,netty主要涉及以下几个部分

  • NioEventLoop:netty的核心发动机,在死循环中select OP_READ/OP_ACCEPT事件
  • Channel:把NIO中SocketChannel封装成netty的NioSocketChannel(接收客户端连接后创建的channel);把NIO中ServerSocketChannel封装成netty的NioServerSocketChannel(netty server端启动时创建,绑定服务端端口);
  • ByteBuf:对channel中数据进行读写
  • Pipeline:把用户业务逻辑使用责任链串联起来,后面用户读写用户数据时会经过责任链中每个节点进行处理(接收到客户端连接创建NioSocketChannel时创建)
  • ChannelHandler:pipeline中的节点,负责处理具体的业务逻辑

基本流程

netty流程.png

NioEventLoop结构

NioEventLoop.png
  • Group相关类:都从JDK提供的ExecutorService继承而来,因此明显是提供线程池相关的能力;
  • Executor相关类:都从JDK提供的AbstractExecutorService继承而来

Channel结构

Channel.png
  • AbstractChannel:提供channel的基础功能包含unsafe/pipeline/eventLoop等
  • AbstractNioChannel:增加了Nio相关功能包含SelectableChannel/SelectionKey/readInterestOp等
  • AbstractNioMessageChannel:服务端channel基础类,提供服务端channel的doReadMessages/doWriteMessage抽象方法
  • AbstractNioByteChannel:客户端channel基础类,提供客户端channel的doReadBytes/doWriteBytes抽象方法
  • NioServerSocketChannel:服务端channel具体类,主要个性化的重写各个父类提供的抽象方法
  • NioSocketChannel:客户端channel具体类,主要个性化的重写各个父类提供的抽象方法
  • Unsafe相关类:Channel ~> AbstractChannel ~> AbstractNioChannel ~> AbstractNioByteChannel ~> NioSocketChannel 中分别有一个对应的内部类 Unsafe ~> AbstractUnsafe ~> AbstractNioUnsafe ~> NioByteUnsafe ~> NioSocketChannelUnsafe;Channel的IO操作都是委托给Unsafe,例如:read/write/bind/register/close等等
  • NioServerSocketChannel和NioSocketChannel几点区别:
    1. 向父类注册的事件不同,NioServerSocketChannel是accept, NioSocketChannel是read
    2. NioServerSocketChannel的read操作是指读取一条连接,NioSocketChannel是指读取IO数据

相关文章

网友评论

      本文标题:netty源码分析(一) - 基本组件

      本文链接:https://www.haomeiwen.com/subject/gmmauktx.html