1.简述
Netty是一个高性能、异步事件驱动的NIO框架,它提供了对TCP、UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。
Netty在互联网领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,一些业界著名的开源组件也基于Netty的NIO框架构建。
2.Netty的优缺点
Netty的优点:
- API使用简单,开发门槛低。
- 功能强大,预置了多种编解码功能,支持多种主流协议。
- 定制能力强,可以通过ChannelHandler对通信框架进行灵活地扩展。
- 性能高,通过与其他业界主流的NIO框架对比,Netty的综合性能最优。
- 成熟、稳定,Netty修复了已经发现的所有JDK NIO BUG,业务开发人员不需要再为NIO的BUG而烦恼。
- 社区活跃,版本迭代周期短,发现的BUG可以被及时修复,同时,更多的新功能会加入。
- 经历了大规模的商业应用考验,质量得到验证。
Netty的缺点:
- 大版本不兼容,3.x/4.x同时维护,5.x放弃维护,主要原因是Netty抛弃了Jboss单独发展了。
3.为什么选择Netty
Netty的特点:
- 高性能、异步事件驱动的NIO框架,提供了对TCP、UDP和文件传输的支持。
- 使用更高效的socket底层,对epoll空轮询引起的cpu占用飙升在内部进行了处理,避免了直接使用NIO的陷阱,简化了NIO的处理方式。
- 采用多种decoder/encoder 支持,对TCP粘包/分包进行自动化处理。
- 可使用接受/处理线程池,提高连接效率,对重连、心跳检测的简单支持。
- 可配置IO线程数、TCP参数, TCP接收和发送缓冲区使用直接内存代替堆内存,通过内存池的方式循环利用ByteBuf。
- 通过引用计数器及时申请释放不再引用的对象,降低了GC频率。
- 使用单线程串行化的方式,高效的Reactor线程模型。
- 大量使用了volitale、使用了CAS和原子类、线程安全类的使用、读写锁的使用。
Netty的设计:
- 适用于各种传输类型的统一API - 阻塞和非阻塞套接字。
- 基于灵活且可扩展的事件模型,可以清晰地分离关注点。
- 高度可定制的线程模型 - 单线程,一个或多个线程池,如SEDA。
- 真正的无连接数据报套接字支持(自3.1起)。
Netty的性能:
- 更高的吞吐量,更低的延迟。
- 减少资源消耗。
- 最小化不必要的内存复制。
Netty的安全:
- 完整的SSL / TLS和StartTLS支持。
4.Netty的应用场景
Netty的应用场景:
- 作为RPC框架的网络通讯工具,如Dubbo。
- 实现即时通讯系统。
- 实现消息推送系统。