拿下Netty这座城,从现在开始!
你好,我是彤哥,我花了八个月的时间终于把Netty写完了。
其实,我刚学习 Netty 的时候,也是很迷茫的,直到有一天,一个同事收到了阿里的 offer,他要去阿里做中台了,临走前他偷偷地告诉我,多看看 Netty,特别是源码。
之后,我把市面上有关 Netty 的书籍和博客几乎全部看了一遍,并跟着书中的示例边看边练,但是,最后,我发现,在 Netty 的知识方面,我只是从一个学徒变成了一个熟练工,对 Netty 的理解还是谈不上有多深刻,因为很多书籍或者博客对 Netty 的讲解都停留在使用的角度,对于核心知识和底层原理,讲解得很少,或者说是很不全面。
所以,我决定自己动手,把 Netty 的源码撸一遍,没多久,我就发现,我不仅在 Netty 方面的知识飞速增长,对于 Java 底层的很多原理也理解得更透彻了,得益于此,我后面进入了国内某互联网游戏公司担任平台架构的设计与实现。
这是我自己学习 Netty 的经历,现在,你可以想想你的情况。
是不是一直想学习 Java 网络编程,却不知道怎么入门?
是不是看完《Netty 实战》,还是只会写入门级的示例?
是不是学习其他开源框架,一深入到通信层就无所适从?
是不是面试过程中,提及 Netty,只能简单地说说请求的执行流程?对于更底层的线程池、对象池、内存池却一问三不知?
如果你是这种情况,其实你并不孤独,这不是你一个人遇到的问题,在工作中,我喜欢与人交流,发现很多同学,不管新人,还是老人,对 Netty 的掌握都停留在表面。
还是上面那位牛人,他去阿里后,遇到的第一个挑战是他的领导让他一个星期内学习完 Dubbo,并做成 PPT 分享给全组人员,对于从来没学习过 Dubbo 的他,你可能会说,这太难了,几乎不可能完成。然而,他学习 Dubbo 只花了五天时间,剩余两天做成 PPT,汇报时,领导给了个完美。
我觉得这其中他对 Netty 的深入理解占了很大的比例。后面,他跟我说,其实,Java 领域学来学去就那么些东西,最重要的还是掌握底层核心知识,这些核心知识掌握了,学习其他东西真的能事半功倍,这也是他能快速学习并获得成功的秘诀。
那么,作为 Java 开发者,应该掌握哪些底层核心知识呢?
无外乎就是反射、代理、多线程这些东西,当然,还有 NIO,那么,如何快速地学习并掌握这些知识呢?
我认为通过源码是一种不错的途径,不管是 Java 本身的源码,还是开源框架的源码。
而 Netty 作为 Java 网络编程领域的事实标准,无疑是最合适的。
通过上图,可以看到,在 Java 中,很多大家熟悉的框架都在使用 Netty,而且,这些框架遍布 Java 的各个领域,包括但不仅限于大数据、RPC、消息队列、搜索引擎、数据库等。
所以,我想做一个关于 Netty 的课程,希望通过这个课程能够让你真正掌握到 Netty 的底层核心知识。
那么,我将怎么设计这个课程呢?
我根据自己学习和使用 Netty 的经验,将整个课程分成六个模块来讲解:
基础知识,介绍 Netty 的发展历史,并学习 Java 网络编程的基础知识,打好基础,方能事半功倍;
源码剖析 —— 数据流向,从数据流向的角度剖析源码,包含服务启动、接收数据、关闭连接等,快速掌握 Netty 应用运行的基本流程,这一部分源码可以使用泛读的技巧,快速阅读,了解大致流程;
源码剖析 —— 核心知识,从核心知识的角度剖析源码,包含内存池、对象池、线程池等,深入底层,掌握核心要点,这一部分源码需要精读,对每一个知识点死磕到底;
项目实战,从软件开发生命周期的角度,介绍如何使用 Netty 开发一个生产级的游戏项目;
实战进阶,对实战项目进行不断调优,使其更稳定、更快速、更安全、更可靠,并介绍如何快速排查生产问题;
课程总结,对整个课程做一个总结和回顾。
我很感激当年偷偷告诉我要看 Netty 的那位同事,那无疑是我人生中非常重要的转折点。
没有那位同事的悄悄话,可能就没有今天的我,希望这个专栏也能成为你的人生的一个转折点。
我希望通过这个专栏,不仅能够帮你学习到 Netty 的底层核心知识,更能加深对 Java 底层核心知识的理解,帮你拿下 Netty 这座城,度过职场和人生的重要时刻,come on!
如果你觉得彤哥的源码写得还不错,可以看看这部Netty专栏:
识别二维码或点击阅读原文可查看试读章节。