Skip to content

Commit 0a149b8

Browse files
committed
ch20 最後のプロジェクト: マルチスレッドのWebサーバを構築するの和訳を最新版に更新
rust-lang/book@19c40bf
1 parent 262987a commit 0a149b8

File tree

120 files changed

+1880
-3084
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

120 files changed

+1880
-3084
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
[package]
22
name = "hello"
33
version = "0.1.0"
4-
authors = ["Your Name <[email protected]>"]
5-
edition = "2018"
4+
edition = "2021"
65

76
[dependencies]

listings/ch20-web-server/listing-20-01/src/main.rs

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ fn main() {
66
for stream in listener.incoming() {
77
let stream = stream.unwrap();
88

9+
// 接続が確立しました!
910
println!("Connection established!");
1011
}
1112
}
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
[package]
22
name = "hello"
33
version = "0.1.0"
4-
authors = ["Your Name <[email protected]>"]
5-
edition = "2018"
4+
edition = "2021"
65

76
[dependencies]
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
use std::io::prelude::*;
2-
use std::net::TcpListener;
3-
use std::net::TcpStream;
1+
use std::{
2+
io::{prelude::*, BufReader},
3+
net::{TcpListener, TcpStream},
4+
};
45

56
fn main() {
67
let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
@@ -13,9 +14,12 @@ fn main() {
1314
}
1415

1516
fn handle_connection(mut stream: TcpStream) {
16-
let mut buffer = [0; 1024];
17+
let buf_reader = BufReader::new(&mut stream);
18+
let http_request: Vec<_> = buf_reader
19+
.lines()
20+
.map(|result| result.unwrap())
21+
.take_while(|line| !line.is_empty())
22+
.collect();
1723

18-
stream.read(&mut buffer).unwrap();
19-
20-
println!("Request: {}", String::from_utf8_lossy(&buffer[..]));
24+
println!("Request: {:#?}", http_request);
2125
}
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
[package]
22
name = "hello"
33
version = "0.1.0"
4-
authors = ["Your Name <[email protected]>"]
5-
edition = "2018"
4+
edition = "2021"
65

76
[dependencies]
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
use std::io::prelude::*;
2-
use std::net::TcpListener;
3-
use std::net::TcpStream;
1+
use std::{
2+
io::{prelude::*, BufReader},
3+
net::{TcpListener, TcpStream},
4+
};
45

56
fn main() {
67
let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
@@ -14,13 +15,15 @@ fn main() {
1415

1516
// ANCHOR: here
1617
fn handle_connection(mut stream: TcpStream) {
17-
let mut buffer = [0; 1024];
18-
19-
stream.read(&mut buffer).unwrap();
18+
let buf_reader = BufReader::new(&mut stream);
19+
let http_request: Vec<_> = buf_reader
20+
.lines()
21+
.map(|result| result.unwrap())
22+
.take_while(|line| !line.is_empty())
23+
.collect();
2024

2125
let response = "HTTP/1.1 200 OK\r\n\r\n";
2226

23-
stream.write(response.as_bytes()).unwrap();
24-
stream.flush().unwrap();
27+
stream.write_all(response.as_bytes()).unwrap();
2528
}
2629
// ANCHOR_END: here

listings/ch20-web-server/listing-20-04/src/main.rs

-24
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
[package]
22
name = "hello"
33
version = "0.1.0"
4-
authors = ["Your Name <[email protected]>"]
5-
edition = "2018"
4+
edition = "2021"
65

76
[dependencies]

listings/ch20-web-server/listing-20-05/hello.html

+2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
<title>Hello!</title>
66
</head>
77
<body>
8+
<!-- <h1>こんにちは!</h1> -->
89
<h1>Hello!</h1>
10+
<!-- <p>Rustからやあ</p> -->
911
<p>Hi from Rust</p>
1012
</body>
1113
</html>
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
// ANCHOR: here
2-
use std::fs;
2+
use std::{
3+
fs,
4+
io::{prelude::*, BufReader},
5+
net::{TcpListener, TcpStream},
6+
};
37
// --snip--
48

59
// ANCHOR_END: here
6-
use std::io::prelude::*;
7-
use std::net::TcpListener;
8-
use std::net::TcpStream;
9-
1010
fn main() {
1111
let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
1212

@@ -19,18 +19,20 @@ fn main() {
1919

2020
// ANCHOR: here
2121
fn handle_connection(mut stream: TcpStream) {
22-
let mut buffer = [0; 1024];
23-
stream.read(&mut buffer).unwrap();
24-
22+
let buf_reader = BufReader::new(&mut stream);
23+
let http_request: Vec<_> = buf_reader
24+
.lines()
25+
.map(|result| result.unwrap())
26+
.take_while(|line| !line.is_empty())
27+
.collect();
28+
29+
let status_line = "HTTP/1.1 200 OK";
2530
let contents = fs::read_to_string("hello.html").unwrap();
31+
let length = contents.len();
2632

27-
let response = format!(
28-
"HTTP/1.1 200 OK\r\nContent-Length: {}\r\n\r\n{}",
29-
contents.len(),
30-
contents
31-
);
33+
let response =
34+
format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
3235

33-
stream.write(response.as_bytes()).unwrap();
34-
stream.flush().unwrap();
36+
stream.write_all(response.as_bytes()).unwrap();
3537
}
3638
// ANCHOR_END: here
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
[package]
22
name = "hello"
33
version = "0.1.0"
4-
authors = ["Your Name <[email protected]>"]
5-
edition = "2018"
4+
edition = "2021"
65

76
[dependencies]

listings/ch20-web-server/listing-20-06/src/main.rs

+13-15
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
use std::fs;
2-
use std::io::prelude::*;
3-
use std::net::TcpListener;
4-
use std::net::TcpStream;
1+
use std::{
2+
fs,
3+
io::{prelude::*, BufReader},
4+
net::{TcpListener, TcpStream},
5+
};
56

67
fn main() {
78
let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
@@ -12,28 +13,25 @@ fn main() {
1213
handle_connection(stream);
1314
}
1415
}
15-
1616
// ANCHOR: here
1717
// --snip--
1818

1919
fn handle_connection(mut stream: TcpStream) {
20-
let mut buffer = [0; 1024];
21-
stream.read(&mut buffer).unwrap();
22-
23-
let get = b"GET / HTTP/1.1\r\n";
20+
let buf_reader = BufReader::new(&mut stream);
21+
let request_line = buf_reader.lines().next().unwrap().unwrap();
2422

25-
if buffer.starts_with(get) {
23+
if request_line == "GET / HTTP/1.1" {
24+
let status_line = "HTTP/1.1 200 OK";
2625
let contents = fs::read_to_string("hello.html").unwrap();
26+
let length = contents.len();
2727

2828
let response = format!(
29-
"HTTP/1.1 200 OK\r\nContent-Length: {}\r\n\r\n{}",
30-
contents.len(),
31-
contents
29+
"{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}"
3230
);
3331

34-
stream.write(response.as_bytes()).unwrap();
35-
stream.flush().unwrap();
32+
stream.write_all(response.as_bytes()).unwrap();
3633
} else {
34+
// 何か別の要求
3735
// some other request
3836
}
3937
}

listings/ch20-web-server/no-listing-07-define-message-enum/404.html renamed to listings/ch20-web-server/listing-20-07/404.html

+2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
<title>Hello!</title>
66
</head>
77
<body>
8+
<!-- <h1>おっと!</h1> -->
89
<h1>Oops!</h1>
10+
<!-- <p>すみませんが、何を要求しているのか分かりません。</p> -->
911
<p>Sorry, I don't know what you're asking for.</p>
1012
</body>
1113
</html>
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
[package]
22
name = "hello"
33
version = "0.1.0"
4-
authors = ["Your Name <[email protected]>"]
5-
edition = "2018"
4+
edition = "2021"
65

76
[dependencies]
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
use std::fs;
2-
use std::io::prelude::*;
3-
use std::net::TcpListener;
4-
use std::net::TcpStream;
1+
use std::{
2+
fs,
3+
io::{prelude::*, BufReader},
4+
net::{TcpListener, TcpStream},
5+
};
56

67
fn main() {
78
let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
@@ -14,32 +15,31 @@ fn main() {
1415
}
1516

1617
fn handle_connection(mut stream: TcpStream) {
17-
let mut buffer = [0; 1024];
18-
stream.read(&mut buffer).unwrap();
18+
let buf_reader = BufReader::new(&mut stream);
19+
let request_line = buf_reader.lines().next().unwrap().unwrap();
1920

20-
let get = b"GET / HTTP/1.1\r\n";
21-
22-
if buffer.starts_with(get) {
21+
if request_line == "GET / HTTP/1.1" {
22+
let status_line = "HTTP/1.1 200 OK";
2323
let contents = fs::read_to_string("hello.html").unwrap();
24+
let length = contents.len();
2425

2526
let response = format!(
26-
"HTTP/1.1 200 OK\r\nContent-Length: {}\r\n\r\n{}",
27-
contents.len(),
28-
contents
27+
"{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}"
2928
);
3029

31-
stream.write(response.as_bytes()).unwrap();
32-
stream.flush().unwrap();
30+
stream.write_all(response.as_bytes()).unwrap();
3331
// ANCHOR: here
3432
// --snip--
3533
} else {
36-
let status_line = "HTTP/1.1 404 NOT FOUND\r\n\r\n";
34+
let status_line = "HTTP/1.1 404 NOT FOUND";
3735
let contents = fs::read_to_string("404.html").unwrap();
36+
let length = contents.len();
3837

39-
let response = format!("{}{}", status_line, contents);
38+
let response = format!(
39+
"{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}"
40+
);
4041

41-
stream.write(response.as_bytes()).unwrap();
42-
stream.flush().unwrap();
42+
stream.write_all(response.as_bytes()).unwrap();
4343
}
4444
// ANCHOR_END: here
4545
}

listings/ch20-web-server/listing-20-08/Cargo.lock

-6
This file was deleted.

listings/ch20-web-server/listing-20-08/Cargo.toml

-7
This file was deleted.

listings/ch20-web-server/listing-20-08/hello.html

-11
This file was deleted.

listings/ch20-web-server/listing-20-08/src/main.rs

-42
This file was deleted.

0 commit comments

Comments
 (0)