最终项目:构建多线程 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 背后的基本思想和技术。