Netty 是什么?
Netty 是由 JBOSS 提供的 Java 开源 NIO 框架,目前已成为业界最流行的选择之一。它提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
相比 JDK 原生 NIO,Netty 提供了相对简单易用的 API,非常适合网络编程。作为完全基于 NIO 实现的异步框架,Netty 的所有 IO 操作都是异步非阻塞的。通过 Future-Listener 机制,用户可以方便地主动获取或通过通知机制获得 IO 操作结果。
Netty 无疑是 NIO 领域的佼佼者,其健壮性、功能、性能、可定制性和可扩展性在同类框架中首屈一指。Hadoop 的 RPC 框架 Avro、RocketMQ 以及主流的分布式通信框架 Dubbo 等都验证了它的可靠性。
核心优势
在实际应用中,Netty 展现出以下显著优势:
- API 易用:开发门槛低,上手快。
- 功能强大:预置多种编解码功能,支持主流协议。
- 高度定制:可通过 ChannelHandler 灵活扩展通信框架。
- 性能优异:综合性能优于其他主流 NIO 框架。
- 稳定成熟:修复了 JDK NIO 已知 BUG,业务开发无需担忧底层缺陷。
- 社区活跃:版本迭代周期短,BUG 修复及时,新功能加入迅速。
- 商用验证:在互联网、大数据、游戏、电信等行业成功商用。
与 Mina 的对比
Netty 与 Mina 同为 Trustin Lee 的作品,但 Netty 出现较晚,在设计上做了诸多优化:
- 架构解耦:Mina 将内核与特性联系过紧,Netty 解决了这一问题,避免不必要的性能损耗。
- 文档与特性:Netty 文档更清晰,涵盖了 Mina 的大部分特性。
- 更新频率:Netty 发布新版本更快,响应需求更敏捷。
- 生态整合:Mina 依赖 Apache,而 Netty 与 JBoss 结合度高,原生支持 Google Protocol Buffers,并拥有更完整的 IOC 容器支持(如 Spring、Guice 等)。
- 使用体验:Netty 允许自定义处理上游或下游事件,Decoder/Encoder 机制更直观。
- UDP 处理:Netty 直接暴露 UDP 无连接特性,而 Mina 将其抽象为面向连接协议,导致 Netty 在某些场景下更贴近底层需求。

