最终项目:构建多线程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 是一种系统编程语言,我们可以选择我们想要工作的抽象层次,并且可以降到其他语言中不可能或不切实际的更低层次。

第二,我们在这里不会使用 async 和 await。构建线程池本身就是一个足够大的挑战,无需再添加构建异步运行时的复杂性!然而,我们将指出 async 和 await 如何可能适用于我们在本章中将遇到的一些相同问题。最终,正如我们在第 17 章中提到的,许多异步运行时使用线程池来管理它们的工作。

因此,我们将手动编写基本的HTTP服务器和线程池,这样你可以学习你将来可能使用的crates背后的一般思想和技术。