Netty 是什么?
-
Netty 是⼀个 基于 NIO 的 client-server(客户端服务器)框架,使⽤它可以快速简 单地开发⽹络应⽤程序。
-
它极⼤地简化并优化了 TCP 和 UDP 套接字服务器等⽹络编程,并且性能以及安全 性等很多⽅⾯甚⾄都要更好。
-
⽀持多种协议 如 FTP,SMTP,HTTP 以及各种⼆进制和基于⽂本的传统协议。
总结就是:Netty 成功地找到了⼀种在不妥协可维护性和性能的情况下实现易 于开发,性能,稳定性和灵活性的⽅法。
Netty 应⽤场景
- 作为 RPC 框架的⽹络通信⼯具
- 实现⼀个⾃⼰的 HTTP 服务器
- 实现⼀个即时通讯系统
- 实现消息推送系统
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 是消息的具体处理器,主要负责处理客户端/服务端接收和发送 的数据。