Netty

Netty 专栏导读

为什么学Netty

大家好,我是林斌,一名从业8年的技术老兵。Netty 自 2008 年诞生至今,也走过了 10 个年头。一款框架产品能够在 10 年的生命历程中不断演进,不断进化,没有随着时间而销声匿迹,反而被越来越多的人熟知、使用,自有其魅力所在。大体而言,Netty 已经确定了其在 Java 网络领域开发的霸主地位,正如同在企业开发中 Spring 的地位一般。

开发网络应用程序是一个复杂的系统工程,稍有疏忽便容易造成错误。而直接基于 Java 提供的原生 API 编写一个健壮的,高性能的网络应用是一个很大的挑战。

笔者早期所在的公司内,一个项目组因为觉得网络部分的交互内容比较简单,不想使用框架而尝试直接基于 NIO 编写网络交互层。由于技术人员对 NIO 也算相对熟悉,项目的网络交互层很快就开发完成,随后业务基于其上进行业务开发。但是很快噩梦接踵而来,网络交互层总是不能稳定,偶尔性的出现一个Bug 还难以排查。因为网络交互层面都是并发度很高的设计,因此出现 Bug 后,定位总是要很长的时间,还不能确保成功。甚至有些时候,由于现场信息不足,始终无法复现 Bug,部分的 Bug 就不了了之了。受困于网络交互层的不稳定性,业务开发的进展也不太顺利。

这个案例可以充分的反映开发一个健壮的、稳定的网络应用的挑战难度。并非不可能,只不过确实耗时耗力。毕竟 API 调用顺利,完成一个 Demo 做技术验证和工业生产级别的项目之间的差距着实很大,很多细节都需要时间来打磨。而真正做项目的时候这些时间成本的付出往往是不可接受的。

Netty 的存在帮助我们解决了这个问题,它是一个网络 IO 编程框架,将网络编程的复杂性隐藏起来,为开发者提供了简单易用的 API,即使只是初级工程师也能使用 Netty 开发出高质量的网络应用。协议支持,高性能,高可靠,高稳定,这些特性 Netty 通通都为开发者考虑到了,简单的几句代码便能运行起一个工业级的网络项目。这使得 Netty 成为了事实上的 Java 网络应用开发标准。因此,使用 Java 语言的开发者,掌握和熟练使用 Netty,就很有必要了;正如如今进行企业开发,掌握和熟练 Spring 一样。

该怎么学习Netty

Netty 的便捷和 Spring 一样,其复杂也如同Spring。简单易用,只是 Netty 提供给开发者的上层表象。如果需要洞悉Netty 的设计,需要的知识将不仅仅是 Netty 本身,还会包括网络 IO 相关,线程安全,并发设计等诸多方面。良好的,设计过的学习方法有助于降低开发者对 Netty 的掌握难度。

Netty是一个网络 IO 框架,那基础的学习便应该从网络 IO 知识介绍开始。在对网络 IO 的分类,以及不同模型之间区别和联系有了基本了解的情况下,后续的学习就不会显得盲目。

Netty 本身是基于 Java 中 NIO 接口能力进行封装而成的框架。既然如此,那么对 NIO 的学习和掌握也是不可避免的。而能够使用 NIO 的原生接口开发一个 Demo,会扫平在之后学习 Netty 的很多障碍。

任何框架的学习都应该从最基础的 HelloWord 开始,而后慢慢衍生到复杂的实际项目上。Netty 也是如此,在专栏的入门篇中,我们会使用 Netty 开发一个最简单的 echo 服务器程序。并且逐步提高对项目的要求严格度,使得最初的Demo到最后能够真正投入生产,而这个过程,也是最好的由易入难的过程。

在入门的阶段,最重要的就是扫平基础知识缺乏对后续学习的障碍。而通过对网络 IO 的介绍,NIO 原生接口的分析,Netty demo的讲解,读者将具备深入学习和应用 Netty 所需的相关基础知识。

掌握了基础知识之后,再也没有比实际上手,演练一个项目,能够得到更多的锻炼了。从无到有,根据业务需求,搭建一个完整的项目并使之运行正确,在这个过程中,理论联系实际互相对照,快速促进知识的吸收和理解。

可以熟练的使用框架进行业务的开发,仅仅只是学习刚开了一个头。只有深入到框架的内部,对一个结果的背后都了解了“为什么”,“是什么”,“怎么样”,才能算对框架实现了掌握。而到了这一步,深入的探究源码是最好的手段。不过 Netty 的源码复杂且庞大,在巨大的代码量面前一头扎进去,事倍功半,还容易让人沮丧。专栏不以类为单位进行源码分析。而是以 Netty 在运行过程中涉及到的主要的事项变化,功能支撑为单位,分析这些过程中涉及的类的源码,以及他们彼此之间的交互流程和数据流转。以功能为单位的分析,使得源码讲解不再孤立,关于类的交互,掌握起来也更好理解。

专栏的撰写思路

专栏整体上围绕三个部分进行展开:

第一部分:入门篇。这个部分阐述网络 IO 模型的分类以及如何使用 Java 原生接口进行开发。让读者建立起对网络 IO 开发的感性印象。其后会详细讲解 NIO 的相关知识,NIO 是后续学习的整体基石。在了解 NIO 的基础上,对 Netty 进行模型,API,组件方面的介绍,并且编写第一个 Netty 应用程序。通过这个例子,读者可以掌握对Netty的基本使用,达到初步使用 Netty 进行开发的能力。

第二部分:实战篇。结合第一部分的理论知识,本章节使用 Netty 开发两个实际项目中可能会涉及到项目,分别是在线IM 聊天和 HTTP 文件下载器。通过实战项目,讲解在实战中,对 Netty 的使用。并且通过实战,还会涉及诸如协议设计、数据存储、并发安全考量等等实战类知识。

第三部分:进阶篇。经过入门和实战的学习,读者对使用 Netty 开发高质量的项目已经没有问题。但是在遇到一些疑难杂症时,可能需要更多对 Netty 内部的了解;或者与项目深度结合时,希望能够了解到 Netty 的实现。进阶篇将从源码分析的角度入手,带领读者从源码的层级上分析整个 Netty 的实现。几个重点的组件,线程池,管道,启动器以及一些设计模式,线程模式等都会详细分析。

本专栏会包括 30 篇文章,其中开篇 1 篇,入门 9 篇,实战 3 篇,进阶 17 篇。

接下来,就让我们开始Netty的学习之旅吧。

上一篇
下一篇
内容互动
写评论
加载更多
评论文章