Netty 学习笔记

定义

Netty 是 一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。

Netty 是一个 NIO 客户端服务器框架,可以快速轻松地开发协议服务器和客户端等网络应用程序。它极大地简化和简化了网络编程        

特征

设计

  • 适用于各种传输类型的统一 API - 阻塞和非阻塞套接字
  • 基于灵活且可扩展的事件模型,可以清晰地分离关注点
  • 高度可定制的线程模型——单线程、一个或多个线程池如SEDA
  • 真正的无连接数据报套接字支持(自 3.1 起)

使用方便

  • 详细记录的 Javadoc、用户指南和示例
  • 无需额外依赖,JDK 5 (Netty 3.x) 或 6 (Netty 4.x) 就足够了
    • 注意:某些组件(例如 HTTP/2)可能有更多要求。请参阅 要求页面 了解更多信息。

表现

  • 更高的吞吐量、更低的延迟
  • 资源消耗少
  • 最小化不必要的内存复制

安全

  • 完整的 SSL/TLS 和 StartTLS 支持

核心

Java NIO(New I/O,即新的 I/O)提供了对非阻塞 I/O 操作的支持,它的核心是三大组件:Channel(通道)Buffer(缓冲区)Selector(选择器)

  1. Channel(通道)

    • Channel 是数据传输的载体,类似于流,但它可以同时支持读和写操作,并且可以异步地进行数据传输。
    • Java NIO 中的通道可以分为两类:文件通道和网络通道。常用的通道类型包括 FileChannel、SocketChannel、ServerSocketChannel、DatagramChannel 等。
  2. Buffer(缓冲区)

    • 缓冲区是用来存储数据的区域,它实际上是一个数组,通过缓冲区可以高效地读写数据。
    • Java NIO 提供了多种类型的缓冲区,如 ByteBuffer、CharBuffer、ShortBuffer、IntBuffer、LongBuffer、FloatBuffer 和 DoubleBuffer 等,每种缓冲区都对应着不同的数据类型。
  3. Selector(选择器)

    • 选择器是 Java NIO 实现非阻塞 I/O 的关键组件之一,它可以监听多个通道的事件,从而实现单线程处理多个通道的 I/O 操作。
    • 通过 Selector,可以实现一个线程同时监听多个通道的读写事件,并在有事件发生时及时地进行处理,提高了系统的并发性能。
    • 通常情况下,Selector 与 Channel 搭配使用,通过注册 Channel 到 Selector 上,监听感兴趣的事件,如读就绪、写就绪等。

非阻塞 I/O

(Non-blocking I/O)是一种 I/O 模型,其特点是在进行数据读写操作时不会阻塞线程,线程会立即返回而不需要等待操作完成。在 Java 中,非阻塞 I/O 主要通过 Java NIO(New I/O)实现。

非阻塞 I/O 的主要优势包括:

  1. 提高并发性能:非阻塞 I/O 允许一个线程同时处理多个连接,因此可以更高效地利用系统资源,提高系统的并发性能。

  2. 避免线程阻塞:由于非阻塞 I/O 不会让线程阻塞在 I/O 操作上,因此可以减少线程间切换的开销,提高系统的响应速度和吞吐量。

  3. 适用于大量连接:非阻塞 I/O 适用于需要处理大量连接的场景,如网络服务器,可以通过少量的线程同时处理大量的连接,而不会因为线程阻塞而导致资源耗尽。

在 Java 中,非阻塞 I/O 主要依靠 Java NIO 实现。通过使用 Channel、Buffer 和 Selector,可以实现非阻塞的读写操作。Selector 是非阻塞 I/O 的关键组件,它可以同时监听多个通道的事件,并在有事件发生时通知程序进行处理。

总的来说,非阻塞 I/O 是一种高效的 I/O 模型,适用于需要处理大量连接并且要求高并发性能的场景。

todo

你可能感兴趣的:(学习,笔记,java)