最终项目:构建多线程Web服务器
这是一个漫长的旅程,但我们已经到达了本文档网站的结尾。在本章中,我们将一起构建最后一个项目,以演示我们在最后几章中涵盖的一些概念,以及回顾一些早期的课程。
对于我们的最终项目,我们将制作一个在Web浏览器中显示"hello"的Web服务器,如图21-1所示。
图21-1:我们的最终共享项目
以下是我们构建Web服务器的计划:
- 了解一些关于
TCP
和HTTP
的知识。 - 在
socket
上监听TCP
连接。 - 解析少量
HTTP
请求。 - 创建适当的
HTTP
响应。 - 使用线程池改善我们服务器的吞吐量。
在我们开始之前,我们应该提到两个细节。首先,我们将使用的方法不会是用Rust构建Web服务器的最佳方式。社区成员已经在crates.io
上发布了许多生产就绪的crate
,它们提供了比我们将构建的更完整的Web服务器和线程池实现。然而,我们在本章中的意图是帮助你学习,而不是走捷径。因为Rust是一种系统编程语言,我们可以选择我们想要使用的抽象级别,并且可以达到在其他语言中不可能或不实用的更低级别。
其次,我们在这里不会使用async
和await
。构建线程池本身就是一个足够大的挑战,而不用添加构建异步运行时!但是,我们将注意到async
和await
如何适用于我们在本章中将看到的一些相同问题。最终,正如我们在第17章中提到的,许多异步运行时使用线程池来管理它们的工作。
因此,我们将手动编写基本的HTTP
服务器和线程池,以便你可以学习你将来可能使用的crate
背后的一般思想和技术。