Updated 'src/Ch21_Final_Project_Building_a_Multithreaded_Web_Server.md'.

This commit is contained in:
Hector PENG
2026-04-26 14:21:49 +08:00
parent b2af919b22
commit faa956212b

View File

@@ -1,27 +1,25 @@
# 最项目:构建多线程的 Web 服务器
# 最项目:构建多线程的 Web 服务器
这是一个漫长的旅程,但我们已经到了本书的结尾。在本章中,们将一起构建又一个项目,来演示们在最后这些章中,曾涉及的一些概念,同时回顾一些较早的内容。
这是一个漫长的旅程,但我们已经到了本书的尾声。在这一章中,们将一起构建又一个项目,来演示们在最后几章中涉及的一些概念,并回顾之前的课程内容。
对于这个最后的项目,们将构造一个讲出 “你好”,且在浏览器中看起来如图 20-1 那样的一个 web 浏览器
对于我们的最终项目,们将构造一个 web 服务器,他会在 web 浏览器中显示 “你好!”,看起来如图 20-1 那样。
以下是我们构建 web 服务器的计划:
1. 了解一些有关 TCP 与 HTTP 的知识;
2. 监听套接字上的 TCP 连接;
3. 解析少量 HTTP 请求;
4. 创建正确的 HTTP 响应;
5. 通过线程池提升服务器的吞吐量。
<a name="f_20-1"></a>
![咱们最后一起做的项目](images/20-01.png)
*图 20-1:咱们最后一起做的项目*
**图 20-1**:我们最后一个合作项目
以下是构建这个 web 服务器的计划:
1. 学习一点有关 TCP 与 HTTP 方面的知识;
2. 在某个套接字上监听 TCP 连接;
3. 解析少数几个 HTTP 请求;
4. 创建出某种恰当的 HTTP 响应;
5. 运用线程池,提升咱们服务器的吞吐量。
在咱们开始动手前,咱们应注意到一个情况:咱们将运用的方法,将不会是在 Rust 下构建 web 服务器的最佳方法。在 [crates.io](https://crates.io/) 上,一些社区成员已经发布了数个,适合用于生产环境,提供了更完整功能的 web 服务器,以及咱们将要构建的线程池实现的代码箱。但是,本章中咱们的意图,是要帮助咱们学习掌握,而非走那样的捷径。由于 Rust 是门系统编程语言,因此咱们可以选择咱们打算着手的抽象层次,并可以触及到相比其他语言中,可行的或可操作的更低级别。因此咱们将亲自编写这个基本的 HTTP 服务器与线程池,如此咱们便可以学习这些代码箱之后的,今后可能会用到的一些一般概念与技巧。
在开始之前,我们需要说明两点。我们将使用的方法并非用 Rust 构建 web 服务器的最佳方式。社区成员已在 [crates.io](https://crates.io/) 上发布许多可用于生产环境的代码箱,他们提供了比我们构建的更完善的 web 服务器和线程池实现。然而,这一章中我们的目的是要帮助咱们学习,而非走捷径。正因为 Rust 是一门系统编程语言,所以我们可以自有选择想要的抽象级别,并能够深入到比其他语言所能达到或实际可行的更底层。
其次,我们不会在这里使用异步和等待。构建线程池本身已经是一项不小的挑战,无需再额外构建异步运行时!不过,我们会指出异步和等待可能会如何应用于,我们将在本章中看到的一些同样问题。最终,正如我们在第 17 章中提到的,许多异步运行时都使用线程池来管理其工作。
因此,我们将手动编写基本的 HTTP 服务器和线程池,以便咱们可以了解今后咱们可能用到的库背后的一般思路和技术。