阅读量100w+的Netty源码 底层原理完整体系首著 学完可以自己动手写“微信”
在介绍本书内容之前,先来谈一谈这本书的形成过程。
本书的形成过程
大概在 16 年左右,我开始负责一个长连的项目,核心技术是 Netty,由于之前从未了解过这项技术,于是想先找找有没有相关的资料。
我学习一项技术的习惯是先找找看有没有这方面的书籍,当时找了一些博客和一本书来啃,一段时间之后发现这些内容对我的帮助不是很大,反而把我搞的稀里糊涂。
接手到的长连项目是之前一位同事写的,代码写的很漂亮,后来花了一些时间去研究这个项目是如何使用 Netty 的,加上之前或多或少耳濡目染的那些资料,勉强算是入门了。
项目需求在升级,比如后续需要一些加密,协议升级类的需求,我当时的 Netty 知识储备将很快无法支持我升级该项目,于是,我开始一段 Netty 的探索之旅。
在 我的源码阅读经历这篇文章中,我提到,在毕业的前两年,我花了很多时间去研究 IntelliJ IDEA 高效编程及调试的一些技巧,有了这些基础,接下来研究 Netty 还是相对比较轻松的。当时,每次上班前和下班后,我都会花 2 ~ 3 个小时的时间去阅读 Netty 的源码,整个过程是非常愉悦的,因为Netty 的源码和 Spring 的源码一样,写得非常优雅,给人带来美的享受。
一段时间之后,我的 Netty 知识储备已足够应对项目的复杂程度了,很多技术需求也可以通过比较优雅的方式来实现,但是有个问题想不通,既然 Netty 是作为互联网领域非常受欢迎的中间件,为什么相关的资料却凤毛棱角?
当时正值单身的黄金时期,有大把的时间可以用来干自己喜欢的事情,于是,我每个周末都会约上基友--波波一起去上海图书馆,去干啥呢?去写源码分析文章。
刚开始非常自信,认为凭借着前期对 Netty 的研究,写个文章不是啥难事,但是实际写作过程中发现,要比我想象中难太多了,有很多问题我不知道该如何解决。比如:我每次都该写些啥?每篇文章的结构如何组织?我怎么写才能够让读者能够容易读懂?经过一段时间的摸索,我找到了答案。
我当时列个详细的目录,决定每周写一个主题。为了确保不让读者困扰,尽管每周对要写的主题已非常熟悉,我还是会花大量的时间去反复研究这个主题,弄清楚每一个细节。然后到了周末,我会花上一天的时间,完全站在读者的角度,去构思和雕琢每一篇文章。周末写完之后,工作日再花上几个小时的时间去校对,最终发表。
坚持了大半年的时间之后,整个 Netty 底层的体系:包括 Netty 源码的分析,以及线上问题的排查思路,已经搭建起来了。下面是一些文章的截图,从阅读量及得到的奖赏来看,还是比较受到读者欢迎的。
有了 Netty 这一系列的积累,后续慕课找到我,最终在该平台上录制了 Netty 源码分析的视频课程:「Java读源码之Netty深入剖析」。掘金也找到我,最后在该平台上出了一本电子书 「Netty 入门与实战:仿写微信 IM 即时通讯系统」。后来多位编辑找到我,想合作出版一本高效实战的实体书,我选择了董老师,才有了今天的实体书:《跟闪电侠学 Netty:Netty 即时聊天实战与底层原理》。
写这本书,我没有从头开始写。一方面是时间方面确实不太够,另外一方面,我的每一篇博客,专栏的每个章节,每一个视频,都花了很长时间精心打磨,雕琢,并根据读者的反馈进行迭代,力争做到对读者负责。在博文视点出版社编辑老师的帮助下,我将掘金小册中作为入门部分,将我的源码分析博文作为进阶部分,两者合并并整理润色,成就了当前的这一本实体书。
为什么你可能需要阅读这本书?
2016 年左右,关于 Netty 的书籍还仅有一两本,目前市面上 Netty 相关的书已经比较多了,为什么你可能需要阅读这本书呢?
对于初学者来说,本书和市面上其他的书不同,采用了基于一个实战项目的形式,由浅入深地,体系化地讲授 Netty 各个知识点。
本书前半部分开篇提出了一个目标:构建一个完整的单机版即时聊天项目。在后续的每个章节中,读者都可以通过书中的内容逐渐完善该项目,最后一个章节结束之后,单机版的聊天项目也就完成了。
对于进阶者来说,本书的后半部分,完全站在读者的角度来分析 Netty 的每个组件,读者在阅读过程中会有一种在探索未知事物和破案推理的感觉。此外,书中还会穿插讲一些源码的阅读技巧,帮助大家降低阅读代码的门槛。
在入门部分,如果读者觉得当前章节较为简单,想立即去深入了解本章节相关的知识点,很容易跳转到后半部分的对应的源码部分进行阅读。比如,入门部分第四章节的“服务端启动流程”和进阶部分的“服务端启动流程解析”是入门与进阶的关系,入门部分第十三章节的“拆包/粘包理论与解决方案”与进阶部分的“编码原理解析”是入门与进阶的关系,读者可以做到不仅知其然,而知其所以然。
我一直认为,对读者比较友好的一本好书,应该是能够让读者一口气读完,并意犹未尽的,希望本书能够实现这个目标。
这本书的目录结构
读者可以根据本书的目录,大体了解本书的内容。
结束语
写作会耗费大量的脑力体力,最后带来的物质回报其实也不会太多,但是,如果这本书能够帮助到很多在技术的道路上默默前行的朋友,给我带来的那份满足感将远远超过物质回报,希望在技术的道路上,与大家一起砥砺前行。