From d4c55aefcd2e1990fb3fdbad7c440e5bb72e23ab Mon Sep 17 00:00:00 2001 From: iscas-zac <92451907+iscas-zac@users.noreply.github.com> Date: Tue, 21 Mar 2023 11:17:52 +0800 Subject: [PATCH] Update web-server.md fix typos --- src/advance-practice1/web-server.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/advance-practice1/web-server.md b/src/advance-practice1/web-server.md index 9c83a4b2..3d8b2aa3 100644 --- a/src/advance-practice1/web-server.md +++ b/src/advance-practice1/web-server.md @@ -41,7 +41,7 @@ fn main() { `unwrap` 的使用是因为 `bind` 返回 `Result`,毕竟监听是有可能报错的,例如:如果要监听 `80` 端口往往需要管理员权限;监听了同样的端口,等等。 -`incoming` 会返回一个迭代器,它每一次迭代都会返回一个新的连接 `steam`(客户端发起,web服务器监听接收),因此,接下来要做的就是从 `steam` 中读取数据,然后返回处理后的结果。 +`incoming` 会返回一个迭代器,它每一次迭代都会返回一个新的连接 `stream`(客户端发起,web服务器监听接收),因此,接下来要做的就是从 `stream` 中读取数据,然后返回处理后的结果。 细心的同学可能会注意到,代码中对 `stream` 还进行了一次 `unwrap` 处理,原因在于我们并不是在迭代一个一个连接,而是在迭代处理一个一个请求建立连接的尝试,而这种尝试可能会失败!例如,操作系统的最大连接数限制。 @@ -98,7 +98,7 @@ fn handle_connection(mut stream: TcpStream) { - 引入 `std::io::prelude` 和 `std::io::BufReader` 是引入相应的特征和类型,帮助我们读取和写入数据 - `BufReader` 可以实现缓冲区读取,底层其实是基于 `std::io::Read` 实现 - 可以使用 `lines` 方法来获取一个迭代器,可以对传输的内容流进行按行迭代读取,要使用该方法,必须先引入 `std::io::BufRead` -- 最后使用 `collecto` 消费掉迭代器,最终客户端发来的请求数据被存到 `http_request` 这个动态数组中 +- 最后使用 `collect` 消费掉迭代器,最终客户端发来的请求数据被存到 `http_request` 这个动态数组中 大家可能会比较好奇,该如何判断客户端发来的 HTTP 数据是否读取完成,答案就在于客户端会在请求数据的结尾附上两个换行符,当我们检测到某一行字符串为空时,就意味着请求数据已经传输完毕,可以 `collect` 了。