最终项目:构建多线程 Web 服务器

这是一段漫长的旅程,但我们已经到达了本书的结尾。在本章中,我们将一起构建最后一个项目,以演示我们在最后几章中涵盖的一些概念,并回顾一些早期的课程。

注意: 本章没有测验,因为它只是一个实践演练。

对于我们的最终项目,我们将创建一个 Web 服务器,它会显示 “hello” 并在 Web 浏览器中看起来像图 20-1。

hello from rust

图 20-1:我们的最终共享项目

以下是我们构建 Web 服务器的计划

  1. 了解一些关于 TCP 和 HTTP 的知识。
  2. 监听套接字上的 TCP 连接。
  3. 解析少量的 HTTP 请求。
  4. 创建正确的 HTTP 响应。
  5. 使用线程池提高我们服务器的吞吐量。

在我们开始之前,我们应该提到一个细节:我们使用的方法不是用 Rust 构建 Web 服务器的最佳方式。社区成员已经在 crates.io 上发布了许多生产就绪的 crate,它们提供了比我们将构建的更完整的 Web 服务器和线程池实现。然而,我们在本章中的目的是帮助您学习,而不是走简单的捷径。由于 Rust 是一种系统编程语言,我们可以选择我们想要使用的抽象级别,并且可以比其他语言中可能或实际的级别更低。因此,我们将手动编写基本的 HTTP 服务器和线程池,以便您可以了解您将来可能使用的 crate 背后的通用思想和技术。