介绍
Netty 是一个高性能、异步事件驱动的 NIO 框架,基于 JAVA NIO 提供的 API 实现,使用 主从Reactor多线程 实现
提供了对TCP、UDP 和文件传输的支持,作为一个异步 NIO 框架,Netty 的所有 IO 操作都是异步非阻塞的,性能非常高
中文资料:
https://www.w3cschool.cn/essential_netty_in_action/essential_netty_in_action-4pqk28b5.html
为什么不用 NIO API 编程
因为 NIO 有一些缺点:
NIO的类库和API繁杂,学习成本高,你需要熟练掌握
Selector
、ServerSocketChannel
、SocketChannel
、ByteBuffer
等。需要熟悉Java多线程编程。这是因为NIO编程涉及到Reactor模式,你必须对多线程和网络编程非常熟悉,才能写出高质量的 NIO 程序。
臭名昭著的epoll bug。它会导致
Selector
空轮询,最终导致CPU 100%。直到JDK1.7版本依然没得到根本性的解决。
优点
- API使用简单,学习成本低。
- 性能高,对比其他主流的NIO框架,Netty的性能最优。
- 功能强大,内置了多种解码编码器,支持多种协议:FTP, SMTP, HTTP
- 社区活跃,发现BUG会及时修复,迭代版本周期短,不断加入新的功能。
谁在用
Facebook、阿里的 Dubbo 框架、Elasticsearch都采用了Netty