小册上新 | 基于JDK21新特性的网络框架实战

网络编程是后端开发工程师绕不开的话题,HTTP服务器又是Web开发的核心之一。

得益于Spring等框架对其进行的良好封装,我们在日常开发业务时很少需要关注Tomcat服务器或其他Web服务器中的内部细节。

但想要进一步修炼自己的内功,深入网络编程可谓是一条必经之路

Java的网络编程领域中,Netty框架可以说是其中的佼佼者,但其源码的层级较深,逻辑也相对复杂,从源码入手学习网络编程会是一条非常坎坷的道路。

那我们为什么不从头开始,自己设计并实现一个完备的网络编程框架呢?

恰逢JDK21中推出了虚拟线程和堆外内存与Native方法调用等功能,并引入了非常多的新语法特性。这给我们调用操作系统API实现网络框架带来了非常多的便利。

于是,小册作者 benrush 决定利用这些功从头开始构建一个简洁的,在满足代码高可读性、整体高可用性的前提下,兼顾高并发低延迟需求的网络框架,尽可能代替Netty在需要自定义网络协议通信的项目中进行使用。

现在就有了这样一本小册。

本小册会使用许多从JDK8JDK21以来发布的新语法特性,从 0 开始设计并构建一个基于TCP协议实现的网络框架,带大家逐行完成代码的编写、调试,并最终通过压力测试验证该网络框架的性能。

具体来说,小册分为基础篇和实战篇。

其中,基础篇分为两大部分。

第一部分:第 1 节到第 5 节。这部分主要讲解整个实战项目的基础知识,我会着重介绍本次实战中使用到的JDK21虚拟线程和堆外内存管理的相关知识,方便日常使用JDK8进行开发的读者们快速的上手一些JDK新特性,这些特性也会在本次实战中使用到。同时,我会讲解一些简单的C语言知识,方便之前没有了解过C语言的读者理解。

第二部分:第 6 节到第 10 节。这部分主要讲解TCP协议、socket网络编程 、IO多路复用模型和Reactor线程模型,以及使用SSL/TLS层进行加密等相关知识。这部分主要是为我们后续网络框架实战开发打下理论基础,帮助大家了解如何去构建一个健壮的、功能强大的多线程网络框架。

而在实战篇中,我将带领大家手把手来完成整个网络框架。从设计到实现,再到最终实现并通过压力测试。

最后的最后,我们还会对整个构建的过程进行总结,并列出一些后续可优化的方向,以便大家能够继续延伸和完善。

作者介绍

benrush,物联网平台开发工程师。工作以来,一直从事物联网平台开发相关的工作,负责维护海量设备与物联网平台之间使用MQTTHTTP以及一系列自定义网络协议进行网络通信,确保消息传输时的高效性与稳定性,因此对于网络编程的领域有着比较深的理解。

平时热衷于使用Java语言新特性进行开发,目前正在基于Project Loom提供的虚拟线程与Project Panama提供的堆外内存访问 API 从头开发一款全新的开源微服务框架,该小册中的网络框架就属于其中的一部分。

你会学到什么?

Java 开发知识点:

  1. 利用虚拟线程的特性,用更低的资源消耗获取更高的并发度;
  2. 利用 Project Panama 提供的 API 管理堆外内存的周期,并利用 FFI 对 C 语言或其他语言构建的动态库进行函数调用;
  3. 设计一个多线程应用,保障整体线程安全,且高效完成业务逻辑;
  4. 将实现一个网络框架大任务拆分成多个子模块,同时保障对外提供 API 的易用性和整体代码的可读性。

实现具有以下特征的网络框架:

  1. 可基于 TCP 协议自定义网络协议并实现具体业务;
  2. 可正确管理多线程之间交互时的线程安全性,满足低延时和高并发的需求,且系统整体维持较低的负载;
  3. 可正确管理堆外内存的生命周期,确保不出现内存泄漏等问题;
  4. 可兼容 IPV4 和 IPV6 两种协议;
  5. 支持极简从裸 TCP 连接切换至使用 OPENSSL 库提供的 SSL/TLS 加密连接;
  6. 可在 Windows 系统、Linux 系统和 macOS 系统中跨平台使用,并提供一致的对外 API;
  7. 适配 JDK21 中推出的虚拟线程模型,在平台线程和虚拟线程之间无感切换;
  8. 在使用虚拟线程处理业务请求,返回简单 json 字符串的场景下,本网络框架在吞吐量和延时方面具备一定优势。

适宜人群

  1. 服务端开发,网络中间件开发,以及所有想要深入学习网络编程的相关从业者;
  2. 计算机专业相关的在校学生或是平时忙于业务开发,未曾深入研究过服务器底层原理的开发者;
  3. 想要快速上手JDK21中的新特性,并在实际工作中进行应用的Java开发者;
  4. 工作中涉及大量网络开发,但没仔细研究过底层原理,想要深入学习的开发者。

限时6折特惠

相关推荐
徐*红20 分钟前
java 线程池
java·开发语言
尚学教辅学习资料20 分钟前
基于SSM的养老院管理系统+LW示例参考
java·开发语言·java毕设·养老院
2401_8576363920 分钟前
计算机课程管理平台:Spring Boot与工程认证的结合
java·spring boot·后端
1 9 J22 分钟前
Java 上机实践4(类与对象)
java·开发语言·算法
Code apprenticeship23 分钟前
Java面试题(2)
java·开发语言
也无晴也无风雨1 小时前
深入剖析输入URL按下回车,浏览器做了什么
前端·后端·计算机网络
憨子周1 小时前
2M的带宽怎么怎么设置tcp滑动窗口以及连接池
java·网络·网络协议·tcp/ip
霖雨3 小时前
使用Visual Studio Code 快速新建Net项目
java·ide·windows·vscode·编辑器
SRY122404193 小时前
javaSE面试题
java·开发语言·面试
Fiercezm3 小时前
JUC学习
java