Merge pull request #492 from HuaHuaY/patch-1

Update ch20-01-single-threaded.md
pull/493/head
KaiserY 4 years ago committed by GitHub
commit 3535caae12
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -87,7 +87,7 @@ fn main() {
} }
fn handle_connection(mut stream: TcpStream) { fn handle_connection(mut stream: TcpStream) {
let mut buffer = [0; 512]; let mut buffer = [0; 1024];
stream.read(&mut buffer).unwrap(); stream.read(&mut buffer).unwrap();
@ -101,7 +101,7 @@ fn handle_connection(mut stream: TcpStream) {
`handle_connection` 中,`stream` 参数是可变的。这是因为 `TcpStream` 实例在内部记录了所返回的数据。它可能读取了多于我们请求的数据并保存它们以备下一次请求数据。因此它需要是 `mut` 的因为其内部状态可能会改变;通常我们认为 “读取” 不需要可变性,不过在这个例子中则需要 `mut` 关键字。 `handle_connection` 中,`stream` 参数是可变的。这是因为 `TcpStream` 实例在内部记录了所返回的数据。它可能读取了多于我们请求的数据并保存它们以备下一次请求数据。因此它需要是 `mut` 的因为其内部状态可能会改变;通常我们认为 “读取” 不需要可变性,不过在这个例子中则需要 `mut` 关键字。
接下来,需要实际读取流。这里分两步进行:首先,在栈上声明一个 `buffer` 来存放读取到的数据。这里创建了一个 512 字节的缓冲区,它足以存放基本请求的数据并满足本章的目的需要。如果希望处理任意大小的请求,缓冲区管理将更为复杂,不过现在一切从简。接着将缓冲区传递给 `stream.read` ,它会从 `TcpStream` 中读取字节并放入缓冲区中。 接下来,需要实际读取流。这里分两步进行:首先,在栈上声明一个 `buffer` 来存放读取到的数据。这里创建了一个 1024 字节的缓冲区,它足以存放基本请求的数据并满足本章的目的需要。如果希望处理任意大小的请求,缓冲区管理将更为复杂,不过现在一切从简。接着将缓冲区传递给 `stream.read` ,它会从 `TcpStream` 中读取字节并放入缓冲区中。
接下来将缓冲区中的字节转换为字符串并打印出来。`String::from_utf8_lossy` 函数获取一个 `&[u8]` 并产生一个 `String`。函数名的 “lossy” 部分来源于当其遇到无效的 UTF-8 序列时的行为:它使用 `<60>``U+FFFD REPLACEMENT CHARACTER`,来代替无效序列。你可能会在缓冲区的剩余部分看到这些替代字符,因为他们没有被请求数据填满。 接下来将缓冲区中的字节转换为字符串并打印出来。`String::from_utf8_lossy` 函数获取一个 `&[u8]` 并产生一个 `String`。函数名的 “lossy” 部分来源于当其遇到无效的 UTF-8 序列时的行为:它使用 `<60>``U+FFFD REPLACEMENT CHARACTER`,来代替无效序列。你可能会在缓冲区的剩余部分看到这些替代字符,因为他们没有被请求数据填满。
@ -178,7 +178,7 @@ HTTP/1.1 200 OK\r\n\r\n
# use std::io::prelude::*; # use std::io::prelude::*;
# use std::net::TcpStream; # use std::net::TcpStream;
fn handle_connection(mut stream: TcpStream) { fn handle_connection(mut stream: TcpStream) {
let mut buffer = [0; 512]; let mut buffer = [0; 1024];
stream.read(&mut buffer).unwrap(); stream.read(&mut buffer).unwrap();
@ -230,12 +230,16 @@ use std::fs;
// --snip-- // --snip--
fn handle_connection(mut stream: TcpStream) { fn handle_connection(mut stream: TcpStream) {
let mut buffer = [0; 512]; let mut buffer = [0; 1024];
stream.read(&mut buffer).unwrap(); stream.read(&mut buffer).unwrap();
let contents = fs::read_to_string("hello.html").unwrap(); let contents = fs::read_to_string("hello.html").unwrap();
let response = format!("HTTP/1.1 200 OK\r\n\r\n{}", contents); let response = format!(
"HTTP/1.1 200 OK\r\nContent-Length: {}\r\n\r\n{}",
contents.len(),
contents
);
stream.write(response.as_bytes()).unwrap(); stream.write(response.as_bytes()).unwrap();
stream.flush().unwrap(); stream.flush().unwrap();
@ -265,7 +269,7 @@ fn handle_connection(mut stream: TcpStream) {
// --snip-- // --snip--
fn handle_connection(mut stream: TcpStream) { fn handle_connection(mut stream: TcpStream) {
let mut buffer = [0; 512]; let mut buffer = [0; 1024];
stream.read(&mut buffer).unwrap(); stream.read(&mut buffer).unwrap();
let get = b"GET / HTTP/1.1\r\n"; let get = b"GET / HTTP/1.1\r\n";
@ -273,7 +277,11 @@ fn handle_connection(mut stream: TcpStream) {
if buffer.starts_with(get) { if buffer.starts_with(get) {
let contents = fs::read_to_string("hello.html").unwrap(); let contents = fs::read_to_string("hello.html").unwrap();
let response = format!("HTTP/1.1 200 OK\r\n\r\n{}", contents); let response = format!(
"HTTP/1.1 200 OK\r\nContent-Length: {}\r\n\r\n{}",
contents.len(),
contents
);
stream.write(response.as_bytes()).unwrap(); stream.write(response.as_bytes()).unwrap();
stream.flush().unwrap(); stream.flush().unwrap();
@ -352,7 +360,7 @@ fn handle_connection(mut stream: TcpStream) {
// --snip-- // --snip--
fn handle_connection(mut stream: TcpStream) { fn handle_connection(mut stream: TcpStream) {
# let mut buffer = [0; 512]; # let mut buffer = [0; 1024];
# stream.read(&mut buffer).unwrap(); # stream.read(&mut buffer).unwrap();
# #
# let get = b"GET / HTTP/1.1\r\n"; # let get = b"GET / HTTP/1.1\r\n";

@ -314,7 +314,7 @@ fn main() {
} }
fn handle_connection(mut stream: TcpStream) { fn handle_connection(mut stream: TcpStream) {
let mut buffer = [0; 512]; let mut buffer = [0; 1024];
stream.read(&mut buffer).unwrap(); stream.read(&mut buffer).unwrap();
let get = b"GET / HTTP/1.1\r\n"; let get = b"GET / HTTP/1.1\r\n";

Loading…
Cancel
Save