From 3ef039447eb5174bcf7ffc42e3a11f39edcf6cbf Mon Sep 17 00:00:00 2001 From: Frankkai Date: Mon, 13 Mar 2023 11:17:39 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20typo=20=E5=9B=9E=E8=A7=A6=E5=8F=91->?= =?UTF-8?q?=E4=BC=9A=E8=A7=A6=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/advance-practice1/web-server.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/advance-practice1/web-server.md b/src/advance-practice1/web-server.md index 9c83a4b2..331f6354 100644 --- a/src/advance-practice1/web-server.md +++ b/src/advance-practice1/web-server.md @@ -57,7 +57,7 @@ Connection established! 无论浏览器怎么摆烂,我们的服务器还是成功打出了信息:TCP 连接已经成功建立。 -可能大家会疑问,为啥在浏览器访问一次,可能会在终端打印出多次请求建立的信息,难道不是应该一一对应吗?原因在于当 `stream` 超出作用域时,回触发 `drop` 的扫尾工作,其中包含了关闭连接。但是,浏览器可能会存在自动重试的情况,因此还会重新建立连接,最终打印了多次。 +可能大家会疑问,为啥在浏览器访问一次,可能会在终端打印出多次请求建立的信息,难道不是应该一一对应吗?原因在于当 `stream` 超出作用域时,会触发 `drop` 的扫尾工作,其中包含了关闭连接。但是,浏览器可能会存在自动重试的情况,因此还会重新建立连接,最终打印了多次。 由于 `listener.incoming` 会在当前阻塞式监听,也就是 `main` 线程会被阻塞,我们最后需要通过 `ctrl + c` 来结束程序进程。 From cc05988652f932afbb41c8336484c4b185f67e04 Mon Sep 17 00:00:00 2001 From: Frankkai Date: Mon, 13 Mar 2023 11:35:35 +0800 Subject: [PATCH 2/2] fix: typo collecto -> collect --- src/advance-practice1/web-server.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/advance-practice1/web-server.md b/src/advance-practice1/web-server.md index 331f6354..a15773bb 100644 --- a/src/advance-practice1/web-server.md +++ b/src/advance-practice1/web-server.md @@ -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` 了。