Netty相关内容

89 阅读2分钟

Netty 是什么?

  1. Netty 是⼀个 基于 NIO 的 client-server(客户端服务器)框架,使⽤它可以快速简 单地开发⽹络应⽤程序。

  2. 它极⼤地简化并优化了 TCP 和 UDP 套接字服务器等⽹络编程,并且性能以及安全 性等很多⽅⾯甚⾄都要更好。

  3. ⽀持多种协议 如 FTP,SMTP,HTTP 以及各种⼆进制和基于⽂本的传统协议。

    总结就是:Netty 成功地找到了⼀种在不妥协可维护性和性能的情况下实现易 于开发,性能,稳定性和灵活性的⽅法。

Netty 应⽤场景

  1. 作为 RPC 框架的⽹络通信⼯具
  2. 实现⼀个⾃⼰的 HTTP 服务器
  3. 实现⼀个即时通讯系统
  4. 实现消息推送系统

Netty 的核⼼组件

Bytebuf(字节容器)

⽹络通信最终都是通过字节流进⾏传输的。 ByteBuf 就是 Netty 提供的⼀个字节 容器,其内部是⼀个字节数组。 当我们通过 Netty 传输数据的时候,就是通过 Byte Buf 进⾏的。 我们可以将 ByteBuf 看作是 Netty 对 Java NIO 提供了 ByteBuffer 字节容器 的封装和抽象。 有很多⼩伙伴可能就要问了 : 为什么不直接使⽤ Java NIO 提供的 ByteBuffer 呢? 因为 ByteBuffer 这个类使⽤起来过于复杂和繁琐。

Bootstrap 和 ServerBootstrap(启动引导类)

Bootstrap 是客户端的启动引导类/辅助类

ServerBootstrap 是服务端的启动引导类/辅助类

Channel(⽹络操作抽象类)

Channel 接⼝是 Netty 对⽹络操作抽象类。通过 Channel 我们可以进⾏ I/O 操 作。

EventLoop(事件循环)

EventLoop (事件循环)接⼝可以说是 Netty 中最核⼼的概念了

EventLoop 的主要作⽤实际就是责监听⽹络事件并调⽤事件处理器进⾏相 关 I/O 操作(读写)的处理

Channel 和 EventLoop 直接有啥联系呢? Channel 为 Netty ⽹络操作(读写等操作)抽象类, EventLoop 负责处理注册到 其上的 Channel 的 I/O 操作,两者配合进⾏ I/O 操作。

EventloopGroup 和 EventLoop 的关系

EventLoopGroup 包含多个 EventLoop (每⼀个 EventLoop 通常内部包含 ⼀个线程),它管理着所有的 EventLoop 的⽣命周期。 并且, EventLoop 处理的 I/O 事件都将在它专有的 Thread 上被处理,即 Thr ead 和 EventLoop 属于 1 : 1 的关系,从⽽保证线程安全。

ChannelHandler(消息处理器) 和 ChannelPipeline(ChannelHandler 对象链表)

ChannelHandler 是消息的具体处理器,主要负责处理客户端/服务端接收和发送 的数据。