0
点赞
收藏
分享

微信扫一扫

rust 构建多线程 web server

我们将要实现一个返回 ”hello” 的 web server,它在浏览器中看起来就如图例 20-1 所

示:

hello from rust

523

524 CHAPTER 20. 最后的项目: 构建多线程 WEB SERVER

图例 20-1: 我们最后将一起分享的项目

如下是我们将怎样构建此 web server 的计划:

1. 学习一些 TCP 与 HTTP 知识

2. 在套接字(socket)上监听 TCP 请求

3. 解析少量的 HTTP 请求

4. 创建一个合适的 HTTP 响应

5. 通过线程池改善 server 的吞吐量

不过在开始之前,需要提到一点细节:这里使用的方法并不是使用 Rust 构建 web server 最好的方法。

crates.io 上有很多可用于生产环境的 crate,它们提供了比我们所要编写的更为完整的 web server 和线

程池实现。

然而,本章的目的在于学习,而不是走捷径。因为 Rust 是一个系统编程语言,我们能够选择处理什么

层次的抽象,并能够选择比其他语言可能或可用的层次更低的层次。因此我们将自己编写一个基础的

HTTP server 和线程池,以便学习将来可能用到的 crate 背后的通用理念和技术。

构建单线程 web server

首先让我们创建一个可运行的单线程 web server,不过在开始之前,我们将快速了解一下构建 web

server 所涉及到的协议。这些协议的细节超出了本书的范畴,不过一个简单的概括会提供我们所需的信

息。

web server 中涉及到的两个主要协议是 超文本传输协议(Hypertext Transfer Protocol,HTTP)和 传输

控制协议(Transmission Control Protocol,TCP)。这两者都是 请求-响应(request−response)协议,也

就是说,有 客户端(client)来初始化请求,并有 服务端(server)监听请求并向客户端提供响应。请求

与响应的内容由协议本身定义。

TCP 是一个底层协议,它描述了信息如何从一个 server 到另一个的细节,不过其并不指定信息是什么。

HTTP 构建于 TCP 之上,它定义了请求和响应的内容。为此,技术上讲可将 HTTP 用于其他协议之上,不

过对于绝大部分情况,HTTP 通过 TCP 传输。我们将要做的就是处理 TCP 和 HTTP 请求与响应的原始字

节数据。

举报

相关推荐

0 条评论