(1)Netty的本质是由JBOSS提供的一个java开源框架。
(2)Netty优势是提供异步的、事件驱动的网络应用程序框架和工具。
(3)Netty的目的是用以快速开发高性能、高可靠性的网络服务器和客户端程序。
总而言之: Netty 是一个基于 JAVA NIO 类库的异步通信框架,它的架构特点是:异步非阻塞、基于事件驱动、高性能、高可靠性和高可定制性。
了解了Netty的使用场景,才能为我们为什么学习netty消除未知的疑虑。我们知道Netty是业界最流行的NIO框架之一,它的健壮性、功能、性能、可定制性和可扩展性在同类框架中都是首屈一指的。
基于netty的特性,从而可以找出其适用的场景。
l API使用简单,开发门槛低;
l 功能强大,预置了多种编解码功能,支持多种主流协议;
l 定制能力强,可以通过ChannelHandler对通信框架进行灵活地扩展;
l 性能高,通过与其他业界主流的NIO框架对比,Netty的综合性能最优;
l 成熟、稳定,Netty修复了已经发现的所有JDKNIO Bug,业务开发人员不需要再为NIO的Bug而烦恼;
l 社区活跃,版本迭代周期短,发现的Bug可以被及时修复,同时,更多的新功能会加入;
l 经历了大规模的商业应用考验,质量得到验证。
构建高性能、低时延的各种Java中间件,例如MQ、分布式服务框架、ESB消息总线等,Netty主要作为基础通信框架提供高性能、低时延的通信服务;
公有或者私有协议栈的基础通信框架,例如可以基于Netty构建异步、高性能的WebSocket协议栈;
各领域应用,例如大数据、游戏等,Netty作为高性能的通信框架用于内部各模块的数据分发、传输和汇总等,实现模块之间高性能通信。
通信是软件最基础的功能之一,netty作为最流行的javaNIo通信框架,其本身的优势决定了其应用范围之广。
在互联网行业,随着网站规模的不断地扩大,系统的并发访问也越来越高,传统的基于tomcat的web容器垂直架构已经无法满足需求,应用拆分进行服务化,从而提高开发和维护的效率。
在这种情况下,垂直架构拆分,必然带来就是分布式,其中最重要就是部署,并且分布式的应用首先带来的就是各个节点之间的远程服务调用,此时高性能的RPC框架必不可少,netty上面的特性,作为异步高性能的通信框架,经常被作为基础通信组件被部分的RPC框架所使用的。
就我们知道阿里的分布式框架dubbo的RPC框架采用dubbo协议进行节点间通信,其默认协议就是采用的netty作为基础通信组件,从而用于内部节点之间的通信。
此外还有就是阿里的消息中间件rabbitMq也是采用的是netty作为消费者和生成者异步通信组件。还有Netty大数据、网络游戏、企业应用、电信软件等众多行业已经得到了成功商用。
Netty和Mina是Java世界非常知名的通讯框架。它们都出自同一个作者,Mina诞生略早,属于Apache基金会,而Netty开始在Jboss名下,后来出来自立门户netty.io。
我们已经知道了netty是一个“网络通信框架”。那么框架的作用基本上都是,基于其底层的api,从而提供更加便捷的编程模型。
如果不使用netty,直接编写基于NIO的网络程序,我们需要考虑大概是什么呢?
1. 监听服务端口,从而建立相应的socket连接。
2. 建立线程,获取并且处理内容,包括:读取内容,协议解析,逻辑处理,响应结果。
3. 使用完毕,关闭连接。
建立连接是一个比较耗时的过程,并且维护连接也是比较耗费开销的,jdk已经提供了多线程的框架,但是除此之外还是需要tcp进行通信,tcp连接通信是使用连接池来管理的。
Tcp连接的建立是一件很麻烦的事情,需要三次握手,比较耗时,对于需要并发处理的请求,那就需要建立多个连接,并且还需要维护。并且对于连接超时或者关闭还得进行相应的处理。
其实我们会发现如果基于NIO来编写网络程序,还是蛮复杂的并且可能容易出现错误。
Netty是一个NIO的通信框架,封装了内部实现的细节,我们只需要学习使用api,编写时候只需要关注逻辑处理部分即可。
虽然netty对外封装了NIO通信的底层实现,但是我的学习习惯一贯就是知其然必知其所以然,所以,我还是打算从NIO学习开始来逐步学习netty,了解了NIO才能体会了netty的精妙,下一节开启我的NIO之旅……