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

经过漫长的学习旅程,我们终于来到了本书的最后。在这一章中,我们将一起完成另一个项目,展示最后几章讨论的一些概念,同时回顾更早学过的内容。

最后这个项目是一个 Web 服务器:它会返回“Hello!”,在浏览器中的效果如图 21-1 所示。

构建这个服务器的计划如下:

  1. 了解一些 TCP 和 HTTP 知识。
  2. 通过套接字监听 TCP 连接。
  3. 解析少量 HTTP 请求。
  4. 构造正确的 HTTP 响应。
  5. 使用线程池提高服务器的吞吐量。
查看图 21-1 的官方真实浏览器截图
图 21-1:我们将共同完成的最终项目。原图展示浏览器访问 127.0.0.1:8080,页面内容为“Hello! Hi from Rust”。

开始之前,需要说明两件事。首先,这里使用的方法并非用 Rust 构建 Web 服务器的最佳方案。社区已经发布了许多可用于生产环境的 crate,你可以在 crates.io 上找到它们。它们提供的 Web 服务器和线程池实现比我们将要编写的更完整。不过,本章的目的是帮助你学习。Rust 是系统编程语言,因此我们可以选择想要使用的抽象层级;也可以进入比其他语言所允许或适合的更低层级。

其次,这里不会使用 async 和 await。构建线程池本身已经足够有挑战,再加上编写异步运行时,任务就太多了!不过,我们仍会指出,async 和 await 如何用于本章遇到的某些相同问题。正如第 17 章讨论过的,许多异步运行时会使用线程池来管理工作。

因此,我们将手工编写基本的 HTTP 服务器和线程池,让你理解以后可能使用的 crate 背后的通用思想与技术。


来源:The Rust Project Developers,The Rust Programming Language:Final Project: Building a Multithreaded Web Server。本文对应这一引言页,作中文翻译和版式整理;原图以官方链接保留。仓库 COPYRIGHT 允许选择 Apache License 2.0 或 MIT License;此改编采用 MIT License,保留以下完整通知。

Copyright (c) 2010 The Rust Project Developers

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容