你了解Netty吗?

263 阅读3分钟

这是我参与8月更文挑战的第15天,活动详情查看:8月更文挑战

1、Netty简介

 在网络编程领域,Netty是Java的卓越框架,它驾驭了Java高级API的能力,并将其隐藏在一个易于使用的API之后。Netty使你可以专注于自己真正感兴趣的——你的应用程序的独一无二的价值。

下表列出了Netty的特性:

分 类Netty的特性
设计统一的API,支持多种传输类型,阻塞的和非阻塞的
简单而强大的线程模型
真正的无连接数据报套接字支持
链接逻辑组件以支持复用
易于使用详实的Javadoc和大量的示例集
不需要超过JDK1.6+的依赖(一些可选的特性可能需要Java1.7+和/或额外的依赖)
性能拥有比Java的核心API更高的吞吐量以及更低的延迟
得益于池化和复用,拥有更低的资源消耗
最少的内存复制
健壮性不会因为慢速、快速或者超载的连接而导致OutOfMemoryError
消除在高速网络中NIO应用程序常见的不公平读/写比率
安全性完整的SSL/TLS以及StartTLS支持
可用于受限环境下,如Applet和OSGI
社区驱动发布快速而且频繁

2、谁在使用Netty

  Netty拥有一个充满活力并且不断壮大的用户社区,其中不乏大型公司,如Apple、Twitter、Facebook、Google、Square和Instagram,还有流行的开源项目,如Infinispan、HornetQ、Vert.x和Elasticsearch,它们所有的核心代码都利用了Netty强大的网络抽象。

2.1 异步和事件驱动

  异步(也就是非同步)事件肯定大家都熟悉。举个例子:电子邮件,你可能会也可能不会收到你已经发出去的电子邮件对应的回复,或者你也可能会在正在发送一封电子邮件的时候收到一个意外的消息。异步事件也可以具有某种有序的关系。通过,你只有在已经问了一个问题之后才会得到一个和它对应的答案,而在你等待它的同时你也可以做点别的事情。

  在日常的生活中,异步自然而然地就发生了,所以你可能没有对它考虑多少。但是让一个计算机程序以相同的方式工作就会产生一些非常特殊的问题。本质上,一个既是异步的又是事件驱动的系统就会表现出一种特殊的、对我们来说极具价值的行为:它可以任意的顺序响应在任意的时间点产生的事件。
  这种能力对于实现最高级别的可伸缩性至关重要,定义为:"一种系统、网络或者进程在需要处理的工作不断增长时,可以通过某种可行的方式或者扩大它的处理能力来适应这种增长的能力"。

异步和可伸缩性之间的联系又是什么呢?

  • 非阻塞网络调用使得我们可以不必等待一个操作的完成。完全异步I/O正是基于这个特性构建的,并且更进一步:异步方法会立即返回,并且在它完成时,会直接或者在稍后的某个时间点通知用户。
  • 选择器使得我们能够通过较少的线程便可监视许多连接上的事件。

  将这些元素结合在一起,与使用阻塞I/O来处理大量事件相比,使用非阻塞I/O来处理更快速、更经济。从网络编程的角度来看,这是构那家我们理想系统的关键,而且你会看到,这也是Netty的设计底蕴的关键。