你会学到什么?
在本次实战课程中,你会学到以下Java
开发知识点:
- 如何利用虚拟线程的特性,用更低的资源消耗获取更高的并发度;
- 如何利用
Project Panama
提供的API
管理堆外内存的周期,并利用FFI
对C
语言或其他语言构建的动态库调用函数; - 如何在
Java
中设计一个多线程应用,在保障整体线程安全的前提下,高效完成业务逻辑; - 如何分层次,将实现一个网络框架的大任务拆分成多个子模块进行设计与实现,同时保障对外提供
API
的易用性和整体代码良好的可读性。
在本次实战中,我们最终构建的网络框架具有以下特征:
- 可基于
TCP
协议自定义网络协议并实现具体业务,我们会在实战部分实现一个简单的 HTTP1.1 协议返回 json 字符串用于测试; - 可正确管理多线程之间交互时的线程安全性,满足低延时和高并发的需求,且系统整体维持较低的负载;
- 可正确管理堆外内存的生命周期,确保不出现内存泄漏等问题;
- 可兼容
IPV4
和IPV6
两种协议; - 支持极简从裸
TCP
连接切换至使用OPENSSL
库提供的SSL/TLS
加密连接,也就是仅需修改数行代码即可将HTTP
协议升级为HTTPS
协议; - 可在
Windows
系统、Linux
系统和macOS
系统中跨平台使用,并提供一致的对外API
; - 该网络框架应该能非常好的适配在
JDK21
中正式推出的虚拟线程模型,能够在平台线程和虚拟线程之间无感切换; - 在最终的压力测试部分中,在同样使用虚拟线程处理业务请求,返回简单
json
字符串的场景下,相比使用Spring Boot
框架和Netty
框架构建的HTTP
与HTTPS
服务器,我们本次构建的网络框架在吞吐量和延时方面都具备一定优势。
课程简介
网络编程是后端开发工程师绕不开的话题,HTTP
服务器又是Web
开发的核心之一。得益于Spring
等框架对其进行的良好封装,我们在日常开发业务时很少需要关注Tomcat
服务器或其他Web
服务器中的内部细节,但想要进一步修炼自己的内功,深入网络编程可谓是一条必经之路。
在Java
的网络编程领域中,Netty
框架可以说是其中的佼佼者,但其源码的层级较深,逻辑也相对复杂,从源码入手学习网络编程会是一条非常坎坷的道路。那我们为什么不从头开始,自己设计并实现一个完备的网络编程框架呢?
恰逢JDK21
中推出了虚拟线程和堆外内存与Native
方法调用等功能,并引入了非常多的新语法特性,这给我们调用操作系统API
实现网络框架带来了非常多的便利。
于是我决定利用这些功从头开始构建一个简洁的,能够在满足代码高可读性、整体高可用性的前提下,兼顾高并发低延迟需求的网络框架,尽可能代替Netty
在需要自定义网络协议通信的项目中使用。
在构建该网络框架时,我将设计时的心得体会,开发中所有知识点,以及对于该框架未来可改进部分的一些思考,一起凝聚成了本小册中的内容。我希望并相信所有阅读完本小册的读者都能做到从零到一实现自己的网络栈,不再惧怕网络编程中的任何难点,同时也欢迎大家和我一起参与到对该开源项目的建设中来。
在本小册中,我会使用许多从JDK8
至JDK21
以来发布的新语法特性,从 0 开始设计并构建一个基于TCP
协议实现的网络框架,手把手带领读者逐行完成代码的编写、调试,并最终通过压力测试验证该网络框架的性能。
小册从整体内容上可以划分为基础篇和实战篇。
其中,基础篇分为两大部分。
第一部分:第 1 节到第 5 节。这部分主要讲解整个实战项目的基础知识,我会着重介绍本次实战中使用到的JDK21
虚拟线程和堆外内存管理的相关知识,方便日常使用JDK8
开发的读者们快速的上手一些JDK
新特性,这些特性也会在本次实战中使用到。同时,我会讲解一些简单的C
语言知识,方便之前没有了解过C
语言的读者理解。
第二部分:第 6 节到第 10 节。这部分主要讲解TCP
协议、socket
网络编程 、IO
多路复用模型和Reactor
线程模型,以及使用SSL/TLS
层加密等相关知识。这部分主要是为我们后续网络框架实战开发打下理论基础,帮助大家了解如何去构建一个健壮的、功能强大的多线程网络框架。
而在实战篇中,我将带领大家手把手来完成整个网络框架,从设计到实现,并最终通过压力测试。
最后的最后,我们还会总结整个构建的过程,并列出一些后续可优化的方向,以便大家能够继续延伸和完善。
课程目录
1、基础篇:项目总览
2、基础篇:开发环境介绍与Java发展前瞻
3、基础篇:理解虚拟线程
4、基础篇:探究FFI与堆外内存管理
5、基础篇:简明C语言基础
6、基础篇:TCP协议与socket编程基础(上)
7、基础篇:TCP协议与socket编程基础(下)
8、基础篇:IO多路复用模型详解
9、基础篇:Reactor线程模型与Java多线程编程体系
10、基础篇:使用SSL/TLS协议进行加密通讯
11、实战篇:搭建项目结构
12、实战篇:构建堆外内存访问模型
13、实战篇:构建堆外内存读写模型(上)
14、实战篇:构建堆外内存读写模型(下)
15、实战篇:自顶而下设计网络API
16、实战篇:构建多路复用模型
17、实战篇:设计读写模型
18、实战篇:设计Sentry与Protocol的细节
19、实战篇:实现Native调用模型
20、实战篇:实现TCP连接的建立模型
21、实战篇:实现时间轮
22、实战篇:实现Protocol的写模型
23、实战篇:实现Protocol的读模型
24、实战篇:实现TCP协议和SSL/TLS加密的读写模型
25、实战篇:实现优雅停机
26、实战篇:整合虚拟线程
27、实战篇:对网络框架进行功能测试
28、实战篇:实现HTTP与HTTPS服务器
29、实战篇:对HTTP与HTTPS服务器进行性能测试
30、实战篇:项目总结
作者简介
benrush,物联网平台开发工程师。工作以来,一直从事物联网平台开发相关的工作,负责维护海量设备与物联网平台之间使用MQTT
、HTTP
以及一系列自定义网络协议进行网络通信,确保消息传输时的高效性与稳定性,因此对于网络编程的领域有着比较深的理解。
平时热衷于使用Java
语言新特性开发,目前正在基于Project Loom
提供的虚拟线程与Project Panama
提供的堆外内存访问 API 从头开发一款全新的开源微服务框架,该小册中的网络框架就属于其中的一部分。