Netty 概念梳理(未完待续)

目标
网络通信领域知识、技能的提升
方便后续项目Netty实战

主要学习内容

  1. 概念
  2. 源码
  3. 黑科技
  4. ByteBuf todo

1、Netty概念梳理

1.1EventLoopGroupEventLoopChannel 的关系

image.png
  • Channel 是 Java NIO 的一个基本构造。A nexus to a network socket or a component which is capable of I/O operations such as read, write, connect, and bind.
  • EventLoop 本身只由一个线程驱动,其处理了一个 Channel 的所有 I/O 事件,并且在该
    EventLoop 的整个生命周期内都不会改变。
  • EventLoopGroup 包含一个或者多个 EventLoop;
    注意,在这种设计中,一个给定 Channel 的 I/O 操作都是由相同的 Thread 执行的,实际
    上消除了对于同步的需要。

1.2ChannelHandlerChannelPipelineChannelHandlerContext的关系

image.png
  • Netty 的主要组件是 ChannelHandler,用于实现所有处理入站和出站数据的应用程序逻辑。ChannelHandler的方法对应一个事件。
  • ChannelPipeline 提供了 ChannelHandler 链的容器。
  • 当 ChannelHandler 被添加到 ChannelPipeline 时,它将会被分配一个 ChannelHandlerContext,其代表了 ChannelHandler 和 ChannelPipeline 之间的绑定。虽然这个对象可以被用于获取底层的 Channel,但是它主要还是被用于写出站数据。
  • ChannelHandler 的事件方法都有一个 ChannelHandlerContext参数。通过使用作为参数传递到每个方法的 ChannelHandlerContext,事件可以被传递给当前ChannelHandler 链中的下一个 ChannelHandler。
  • 在Netty中,有两种发送消息的方式。你可以直接写到Channel中,也可以 写到和Channel- Handler 相关联的 ChannelHandlerContext 对象中。前一种方式将会导致消息从 Channel- Pipeline 的尾端开始流动,而后者将导致消息从 ChannelPipeline 中的下一个 Channel- Handler 开始流动。

1.3主要ChannelHandler及主要事件

image.png

1.4 ChannelPipeline

1.5 ChannelHandlerContext

1.6 EventLoop

Executor的执行逻辑


image.png

为了解决上述问题,Netty 采用了串行化设计理念,从消息的读取、编码以及后续 Handler 的执行,始终都由 IO 线程 NioEventLoop 负责,这就意外着整个流程不会进行线程上下文的切换,数据也不会面临被并发修改的风险,

你可能感兴趣的:(Netty 概念梳理(未完待续))