Merge pull request #1170 from FrankKai/main

fix: typo 回触发->会触发
pull/1196/head
Sunface 2 years ago committed by GitHub
commit 1e1a7fa65b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -57,7 +57,7 @@ Connection established!
无论浏览器怎么摆烂我们的服务器还是成功打出了信息TCP 连接已经成功建立。 无论浏览器怎么摆烂我们的服务器还是成功打出了信息TCP 连接已经成功建立。
可能大家会疑问,为啥在浏览器访问一次,可能会在终端打印出多次请求建立的信息,难道不是应该一一对应吗?原因在于当 `stream` 超出作用域时,触发 `drop` 的扫尾工作,其中包含了关闭连接。但是,浏览器可能会存在自动重试的情况,因此还会重新建立连接,最终打印了多次。 可能大家会疑问,为啥在浏览器访问一次,可能会在终端打印出多次请求建立的信息,难道不是应该一一对应吗?原因在于当 `stream` 超出作用域时,触发 `drop` 的扫尾工作,其中包含了关闭连接。但是,浏览器可能会存在自动重试的情况,因此还会重新建立连接,最终打印了多次。
由于 `listener.incoming` 会在当前阻塞式监听,也就是 `main` 线程会被阻塞,我们最后需要通过 `ctrl + c` 来结束程序进程。 由于 `listener.incoming` 会在当前阻塞式监听,也就是 `main` 线程会被阻塞,我们最后需要通过 `ctrl + c` 来结束程序进程。
@ -98,7 +98,7 @@ fn handle_connection(mut stream: TcpStream) {
- 引入 `std::io::prelude``std::io::BufReader` 是引入相应的特征和类型,帮助我们读取和写入数据 - 引入 `std::io::prelude``std::io::BufReader` 是引入相应的特征和类型,帮助我们读取和写入数据
- `BufReader` 可以实现缓冲区读取,底层其实是基于 `std::io::Read` 实现 - `BufReader` 可以实现缓冲区读取,底层其实是基于 `std::io::Read` 实现
- 可以使用 `lines` 方法来获取一个迭代器,可以对传输的内容流进行按行迭代读取,要使用该方法,必须先引入 `std::io::BufRead` - 可以使用 `lines` 方法来获取一个迭代器,可以对传输的内容流进行按行迭代读取,要使用该方法,必须先引入 `std::io::BufRead`
- 最后使用 `collecto` 消费掉迭代器,最终客户端发来的请求数据被存到 `http_request` 这个动态数组中 - 最后使用 `collect` 消费掉迭代器,最终客户端发来的请求数据被存到 `http_request` 这个动态数组中
大家可能会比较好奇,该如何判断客户端发来的 HTTP 数据是否读取完成,答案就在于客户端会在请求数据的结尾附上两个换行符,当我们检测到某一行字符串为空时,就意味着请求数据已经传输完毕,可以 `collect` 了。 大家可能会比较好奇,该如何判断客户端发来的 HTTP 数据是否读取完成,答案就在于客户端会在请求数据的结尾附上两个换行符,当我们检测到某一行字符串为空时,就意味着请求数据已经传输完毕,可以 `collect` 了。

Loading…
Cancel
Save