Netty
基于事件驱动的网络应用开发框架。
揭开Netty面纱
- 本质:网络应用程序框架
- 实现:异步、事件驱动
- 特性:高性能、可维护、快速开发
- 用途:开发服务器和客户端
最下面的核心层包括:
- 0复制的、功能丰富的Byte Buffer
- 通用的通信层API
- 可扩展的事件模型
左上角为Netty支持的传输层服务:
- TCP的Socket、UDP的Datagram
- HTTP的Tunnel
- In-VM的Pipe
右上角为所支持的各种协议。
Netty的maven依赖
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.39.Final</version>
</dependency>
Netty的NIO
Netty是基于JDK的NIO的,为什么不直接使用NIO去实现?
- Netty做的更多
- Netty做的更好
Netty做的更多:
- 支持常用的应用层协议;
- 解决传输问题:粘包、半包现象
- 支持流量整形
- 完善的断连、Idle等异常处理等。
Netty做的更好
- 规避了JDK NIO bug
- API更强大
JDK的NIO一些API不够友好,功能薄弱,例如:ByteBuffer --》Netty‘s ByteBuf
除了NIO之外,也提供了其他一些增强:ThreadLocal–〉Netty‘s FasrThreadLocal - 隔离变化、屏蔽细节
隔离JDK NIO的实现变化,nio -》nio2(aio)->…
屏蔽JDK NIO的实现细节
例如经典的epoll bug:异常唤醒空转导致cpu 100%。
Netty的前尘往事
使用Netty的一些典型项目:
- 数据库:Cassandra
- 大数据处理:Spark、Hadoop
- Message Queue:Rocket MQ