Netty概述
Netty是由Jboss提供的一个异步,基于事件驱动的高性能网络通信开源框架,可以快速的开发高性能,高可靠的网络IO程序。
Netty主要是针对TCP协议下,面向client端的高并发应用,或者P2P场景下大量数据持续传输应用。
Netty本质就是一个NIO框架,适用于服务端通讯相关的多种应用场景。
1、原生NIO存在的问题
NIO 的类库和 API 繁杂,使用麻烦:需要熟练掌握 Selector
、ServerSocketChannel
、SocketChannel
、ByteBuffer
等。
1. 需要具备其他的额外技能:要熟悉 Java
多线程编程,因为 NIO
编程涉及到 Reactor
模式,你必须对多线程和网络编程非常熟悉,才能编写出高质量的 NIO 程序。
2. 开发工作量和难度都非常大:例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常流的处理等等。
3. JDK NIO 的 Bug:例如臭名昭著的 Epoll Bug
,它会导致 Selector
空轮询,最终导致 CPU
100%。直到 JDK 1.7 版本该问题仍旧存在,没有被根本解决。