Netty源码解析系列

Hello,Netty

Posted by 疯狂创客圈 on July 12, 2020

1. Netty为什么火得屌炸天?

1.1. Netty是什么?

Netty是JBOSS提供的一个Java开源框架NIO框架,用以快速开发高并发、高可用、高可靠性的网络服务器程序,和也能开发高可用、高可靠客户端程序。

1.2. Netty火到什么程度呢?

Netty已经得到成百上千的分布式中间件、开源项目、商业项目的应用。比如火爆的kafka、RocketMQ等消息中间件。如火热火热的ElasticSearch开源搜索引擎,都使用了Netty。如大数据处理Hadoop的RPC框架Avro以及主流的分布式通信框架Dubbo,都使用了Netty。

应该来说,使用Netty的火爆项目,已经有点数不过来了……….

1.3. Netty为什么这么火?

Netty提供异步的、事件驱动的网络应用程序框架和工具,相比JDK原生NIO,Netty提供了相对十分简单易用的API,非常适合网络编程。Netty是完全基于NIO实现的,所以Netty是异步的。

作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。

Netty的优点可以总结如下

1、API使用简单,开发门槛低;

2、功能强大,预置了多种编解码功能,支持多种主流协议;

3、定制能力强,可以通过ChannelHandler对通信框架进行灵活地扩展;

4、性能高,通过与其他业界主流的NIO框架对比,Netty的综合性能最优;

5、成熟、稳定,Netty修复了已经发现的所有JDK NIO BUG,业务开发人员不需要再为NIO的BUG而烦恼;

6、社区活跃,版本迭代周期短,发现的BUG可以被及时修复,同时,更多的新功能会加入;

2. Netty是面试的必杀器吗?

Netty 是互联网中间件领域使用最广泛最核心的网络通信框架。几乎所有互联网中间件或者大数据领域均离不开 Netty,掌握 Netty 是作为一名初中级工程师迈向高级工程师最重要的技能之一。

目前来说,主要的互联网公司,比如阿里、腾讯、美团、新浪、淘宝等,在高级工程师的面试过程中,也经常会问一些高性能通讯框架的方面的问题,还会问一些“你有没有读过什么著名框架的源代码?”等类似的问题。

如果掌握了Netty 相关的技术问题,更进一步说,如果你能全面地阅读和掌握 Netty源码,相信面试大公司时,底气十足,成功在握。

闲话少说,进入正题。

代码研究之前,第一步就是要准备环境。

3. 获取源码的注意事项

本系列博客中,以就拿github上的4.0分支进行。源码的获取有两种方式,一种是直接下载,一种是git clone。如果通过直接下载zip文件的方式获取4.0分支的代码的话,在编译的时候,有可能报错。

建议通过git的方式获取,命令如下:

git clone -b netty-4.0.33.Final –single-branch git@github.com:netty/netty.git

在git命令之前,如果是在windows环境,建议执行一条git换行符配置指令,命令如下:

git config –global core.autocrlf true

为什么呢?

git上提交代码的人用的系统不一样。有的人用windows,有的人用linux,两个系统对换行符的使用不一样,windows下是/r/n,但是linux下换行是/n。使用git config指令配置之后,git会自动屏蔽换行符的差异。如果没有上面的指令,编译代码是,可能会有line endings的错误。

Netty框架源代码解析系列

基础篇

JAVA NIO 简介

Java NIO Buffer

Java NIO Channel

知必会篇

Java NIO Selector

Reactor模式

反应器模式 vs 观察者模式

反应器模式 vs 生产者消费者模式

提升篇

Netty环境搭建

EventLoop

ChannelHandler

Pipeline模式

Pipeline inbound

Pipeline outbound

源码之下无秘密

内力大增篇

Future Promise 模式

Netty ByteBuf API 图解

ByteBuf的分配、释放和如何避免内存泄露

  • 作者:疯狂创客圈

  • 链接:https://www.cnblogs.com/crazymakercircle/p/9904544.html

  • 来源:博客园

  • 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。