mirror of
https://github.com/gnu4cn/rust-lang-zh_CN.git
synced 2026-08-19 04:33:27 +08:00
Updated 'src/Ch21_Final_Project_Building_a_Multithreaded_Web_Server.md'.
This commit is contained in:
@@ -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>
|
||||

|
||||
|
||||
*图 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 服务器和线程池,以便咱们可以了解今后咱们可能用到的库背后的一般思路和技术。
|
||||
|
||||
Reference in New Issue
Block a user