核心概念

Channel

  • 管道,其是对Socket的封装,其包含了一组API,大大简化了直接与Socket进行操作的复杂性

    EventLoopGroup

  • EventLoopGroup是一个EventLoop池,包含很多的EventLoop

  • Netty 为每个Channel分配一个EventLoop,用于处理用户连接请求、对用户请求的处理等所有事件。EventLoop本身只是一个线程驱动,在其生命周期中坠毁绑定一个线程,让该线程处理一个Channel的所有IO事件
  • 一个Channel一旦与一个EventLoop想绑定,那么在Channel的整个生命周期内是不能改变的。一个EventLoop可以与多个Channel绑定。即Channel与EventLoop的关系是n:1,而EventLoop与线程的关系是1:1

ServerBootStrap

  • 用于配置整个Netty代码,将各个组件关联起来。服务端使用的是ServerBootStrap,而客户端使用的则是BootStrap。

ChannelHandler与ChannelPipeline

  • ChannelHandler是对Channel中数据的处理器。这些处理器可以是系统本身定义好的编解码器,也可以是用户自定义的。这些处理器会被统一添加到一个ChannelPipeline的对象中。然后按照添加的顺序对Channel中的数据进行依次处理

ChannelFuture

  • Netty中所有的IO操作都是异步的,即操作不会立即得到返回结果。所以Netty中定义了一个ChannelFuture对象作为整个异步操作的”代言人“,表示异步操作本身。如果想获取到该异步操作的返回值,可以通过该异步操作对象的addListener()方法为该异步操作添加监听器,为其注册回调。当结果出来后马上调用执行。
  • Netty的异步编程模型都是建立在Future与回调概念之上的。

执行流程

image.png