Netty学习系列-- 掀开你神秘的面纱

Posted 李晓娜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Netty学习系列-- 掀开你神秘的面纱相关的知识,希望对你有一定的参考价值。

Netty是什么

    (1)Netty的本质是由JBOSS提供的一个java开源框架。

    (2)Netty优势是提供异步的、事件驱动的网络应用程序框架和工具。

    (3)Netty的目的是用以快速开发高性能、高可靠性的网络服务器和客户端程序。

    总而言之:  Netty 是一个基于 JAVA NIO 类库的异步通信框架,它的架构特点是:异步非阻塞、基于事件驱动、高性能、高可靠性和高可定制性。

Netty使用场景

    了解了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大数据、网络游戏、企业应用、电信软件等众多行业已经得到了成功商用。

传统NIO与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之旅……

以上是关于Netty学习系列-- 掀开你神秘的面纱的主要内容,如果未能解决你的问题,请参考以下文章

打开STEAM的神秘面纱

解开Redis的神秘面纱

干货 | 揭开AI的神秘面纱:机器学习和深度学习

为你揭开微服务架构的“神秘面纱”!

图文并茂|为你揭开微服务架构的“神秘面纱”!

图文并茂|为你揭开微服务架构的“神秘面纱”!