1.1. 为什么使用Netty?
大卫·惠勒曾经说过:“计算机科学的所有问题,都能够在另一层面间接地解决”。作为一个NIO 客户-服务端框架,Netty提供了这样一种间接的解决方案。Netty简化了TCP/UDP服务的网络编程,但我们仍然可以使用低层次的TCP api,因为Netty提供了高层次的抽象。
1.1.1 不是所有的网络框架都是一样的
在Netty中,“快和简单”并不意味着最终的应用程序会有可维护性和性能问题。从FTP、SMTP、HTTP、WebSocket、SPDY协议以及各种二进制和传统的文本协议中获得的经验,使得Netty的创始人非常注意Netty的设计。最终,Netty成功地提供了易于开发、高性能、高稳定性、和高扩展的优点。
一些知名度高的公司和开源项目包括RedHat, Twitter, Infinispan, HornetQ, Vert.x, Finagle, Akka, Apache Cassandra, Elasticsearch,以及其他人的使用都有助于Netty,也可以说,Netty的一些特性也正是由于这些项目的需求。经过这些年的发展,Netty已经变得非常的知名并且是最常用的JVM网络框架之一。这在数个流行的开闭源项目中可体现的。事实上,Netty在2011年获得了杜克选择奖。
并且在2011年,Netty的作者Trustin Lee离开了RedHat去了Twitter。至此,Netty项目变得独立于任何公司,并且在努力简化对它的贡献。RedHat和Twitter都使用Netty,所有在撰写本文的时候,这两家公司是Netty最大的贡献者一点也不足为奇。采用Netty的项目在增加,与此同时,个人贡献者也在增加。Netty的用户社区很活跃,项目仍充满活力。
1.1.2 Netty有丰富的功能集
当你阅读本书的章节时,你将学习使用到很多Netty的特性。图1.1 突出显示了一些支持的传输和协议,以简要概述Netty的架构。

除了其广泛支持的传输和协议外,Netty还在各个发展领域提供了好处:
发展领域
Netty特性
设计
用于各种传输类型的阻塞和非阻塞套接字的统一API
灵活运用
简单但有用的线程模型
真正的无连接数据报套接字支持
逻辑链以使重用变得简单(附: 责任链模式的使用)
易于使用
完善的javadoc和大量的使用用例
除了JDK1.6(及以上),不再需要其他的依赖。有些特性可能依赖JDK1.7(及以上)
、其他特性可能需要其他的依赖,但都是可选的。
性能
更高的吞吐,比Java API更低的延迟
由于池和重用,资源消耗较低
最小化不必要的内存复制
健壮性
不会由于过快、过慢、重载连接而造成OutOfMemoryError
消除在高速网络中NIO应用常见的不公平读写比
安全性
完整的SSL/TLS和StartTLS支持
可运行在受限环境中,比如Applet和OSGI
社区
发布快速且及时
活跃
除了列出的特性 ,Netty还为JavaNIO中已知的bug和限制提出了解决方案,因此你不再需要处理这些问题。
回顾一下Netty特性的概览,现在是时候仔细研究一下异步处理和背后的思想。NIO和Netty都使用了大量的异步代码,如果不了解与此相关的选择的影响,就会不能很好地使用它。下一节,我们将展示为什么我们需要异步API。
最后更新于
这有帮助吗?