# 最后项目：构建一个多线程的 Web 服务器

**Final Project: Building a Multithreaded Web Server**


这是一个漫长的旅程，但我们已经到达了本书的结尾。在本章中，咱们将一起构建又一个项目，来演示咱们在最后这些章中，曾涉及到的一些概念，同时回顾一些较早的内容。

对于这个最后的项目，咱们将构造一个讲出 “你好”，且在浏览器中看起来如图 20-1 那样的一个 web 浏览器。


![咱们最后一起做的项目](images/20-01.png)

*图 20-1：咱们最后一起做的项目*

以下是构建这个 web 服务器的计划：

1. 学习一点有关 TCP 与 HTTP 方面的知识；

2. 在某个套接字上监听 TCP 连接；

3. 解析少数几个 HTTP 请求；

4. 创建出某种恰当的 HTTP 响应；

5. 运用线程池，提升咱们服务器的吞吐量。


在咱们开始动手前，咱们应注意到一个情况：咱们将运用的方法，将不会是在 Rust 下构建 web 服务器的最佳方法。在 [crates.io](https://crates.io/) 上，一些社区成员已经发布了数个，适合用于生产环境，提供了更完整功能的 web 服务器，以及咱们将要构建的线程池实现的代码箱。但是，本章中咱们的意图，是要帮助咱们学习掌握，而非走那样的捷径。由于 Rust 是门系统编程语言，因此咱们可以选择咱们打算着手的抽象层次，并可以触及到相比其他语言中，可行的或可操作的更低级别。因此咱们将亲自编写这个基本的 HTTP 服务器与线程池，如此咱们便可以学习这些代码箱之后的，今后可能会用到的一些一般概念与技巧。
