Netty导读

一、一些资讯

01 Netty4、5版本

现在稳定推荐使用的主流版本还是 Netty4,Netty5 中使用了 ForkJoinPool,增加了代码的复杂度,但是对性能的改善却不明显,所以这个版本不推荐使用,官网也没有提供下载链接。

Netty是一个高性能、异步事件驱动的NIO框架,基于JAVA NIO提供的API实现。它提供了对TCP、UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。 作为当前最流行的NIO框架,Netty在互联网领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,一些业界著名的开源组件也基于Netty的NIO框架构建。
Netty其实本质上就是Reactor模式的实现,Selector作为多路复用器,EventLoop作为转发器,Pipeline作为事件处理器。但是和一般的Reactor不同的是,Netty使用串行化实现,并在Pipeline中使用了责任链模式。

02 Netty Nio

Netty中的buffer相对有NIO中的buffer又做了一些优化,大大提高了性能。Netty 对 JDK 自带的 NIO 的 API 进行封装,解决上述问题,主要特点有:

  1. 设计优雅,适用于各种传输类型的统一 API 阻塞和非阻塞 Socket;基于灵活且可扩展的事件模型,可以清晰地分离关注点;高度可定制的线程模型 - 单线程,一个或多个线程池;真正的无连接数据报套接字支持(自 3.1 起)。
  2. 使用方便,详细记录的 Javadoc,用户指南和示例;没有其他依赖项,JDK 5(Netty 3.x)或 6(Netty 4.x)就足够了。
  3. 高性能,吞吐量更高,延迟更低;减少资源消耗;最小化不必要的内存复制。
  4. 安全,完整的 SSL/TLS 和 StartTLS 支持。
  5. 社区活跃,不断更新,社区活跃,版本迭代周期短,发现的 Bug 可以被及时修复,同时,更多的新功能会被加入。

03 常见的使用场景

  1. 互联网行业。在分布式系统中,各个节点之间需要远程服务调用,高性能的 RPC 框架必不可少,Netty 作为异步高性能的通信框架,往往作为基础通信组件被这些 RPC 框架使用。 典型的应用有:阿里分布式服务框架 Dubbo 的 RPC 框架使用 Dubbo 协议进行节点间通信,Dubbo 协议默认使用 Netty 作为基础通信组件,用于实现各进程节点之间的内部通信。
  2. 游戏行业。无论是手游服务端还是大型的网络游戏,Java 语言得到了越来越广泛的应用。Netty 作为高性能的基础通信组件,它本身提供了 TCP/UDP 和 HTTP 协议栈。 非常方便定制和开发私有协议栈,账号登录服务器,地图服务器之间可以方便的通过 Netty 进行高性能的通信。
  3. 大数据领域。经典的 Hadoop 的高性能通信和序列化组件 Avro 的 RPC 框架,默认采用 Netty 进行跨界点通信,它的 Netty Service 基于 Netty 框架二次封装实现。

二、阅读建议

01 Java多线程编程

作为异步事件驱动、高性能的NIO框架,Netty代码中大量运用了Java多线程编程技巧,熟练学握多线程编程知识是学握Netty的必备条件。
需要掌握的多线程编程相关知识包括:
(1) Java内存模型。
(2) 关键字synchronized。
(3) 读写锁。
(4) volatile的正确使用。
(5) CAS指令和原子类。
(6)JDK线程池及各种默认实现。

02 项目实践

完成 Netty 基础知识的学习之后,就可以在项目中使用 Netty 了,只有通过实践才能真正掌握 Netty,如果项目暂时用不到 Netty,可以学习一些开源的 RPC 或者服务框架,看这些框架是怎么集成并使用Netty的,例如:
(1) gRPC,主要用到了Netty的HTTP/2协议栈
(2) Vert.x,主要用到了Netty的NIO通信框架和HTTP协议栈,以及EventLoopReactive线程模型。
建议通过“源码阅读+调试”的方式来学习,因为 Netty 的很多处理都是异步的.单纯地靠阅读代码很难真正掌握消息的处理流程。

03 源码阅读策略

当前Netty的源码规模已经非常庞大,全部阅读并掌握需要很长时间,建议读者根据自己的需要选择性地阅读。
首先需要掌握 Netty的内核工作流程,主要包括客户端连接创建、客户端消息读写、服务端监听和客户端接入、服务端消息读写,涉及的核心类库如下。
(1) ByteBuf和各种子类。
(2) Channel、Unsafe及各种子类
(3)ChannelPipeline和ChannelHandler。
(4) EventLoop和EventLoopGroup及各种子类实现。
(5) Future和Promise及各种子类实现。
作为入门知识,Netty 客户端和服务端的创建流程需要熟练掌握,以服务端的创建流程为例,画出流程创建图,然后结合源码阅读,并进行调试,可以更高效地掌握相关知识点。

  • 18
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值