使用到的类
Java NIO (non-blocking I/O): 同步非阻塞
NIO 新增了 Channel、Selector、Buffer 等抽象概念,支持面向缓冲、基于通道的 I/O 操作方法。
- Selector:可以理解为选择器; 多路复用器 。
- Channel:可以理解为通道(双向); 状态是否处于 连接就绪、接受就绪、可读就绪、可写就绪。
- 文件类 FileChannel
- UDP类 DatagrameChannel
- TCP类 ServerSocketChannel 和 SocketChannel
- Buffer:读取 channel 中数据的一块内存
- 容量 Capacity
- 位置 Position
- 上限 Limit
- 标记 Mark
NIO 提供了与传统 BIO 模型中的 Socket 和 ServerSocket 相对应的 SocketChannel 和 ServerSocketChannel 两种不同的套接字通道实现。
- 缓冲区 buffer
- 通道 channel 双向
- 多路复用器 Selector
Netty
1. 基础
Netty 是一个高性能、异步事件驱动的 NIO 框架,基于 JAVA NIO 提供的 API 实现。
它提供了对TCP、UDP 和文件传输的支持
作为一个异步 NIO 框架,Netty 的所有 IO 操作都是异步非阻塞的,通过 Future-Listener 机制,用户可以方便的主动获取或者通过通知机制获得 IO 操作结果。
2. 应用场景
高性能领域
并发场景
异步通信领域
产品:dubbo
2.1 原生NIO缺陷
类库 API复杂
入门门槛高(多线程,网络编程)