Skip to content

Commit

Permalink
ch20 最後のプロジェクト: マルチスレッドのWebサーバを構築するの和訳を最新版に更新
Browse files Browse the repository at this point in the history
  • Loading branch information
shinmili committed May 26, 2024
1 parent 262987a commit 0a149b8
Show file tree
Hide file tree
Showing 120 changed files with 1,880 additions and 3,084 deletions.
3 changes: 1 addition & 2 deletions listings/ch20-web-server/listing-20-01/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
[package]
name = "hello"
version = "0.1.0"
authors = ["Your Name <[email protected]>"]
edition = "2018"
edition = "2021"

[dependencies]
1 change: 1 addition & 0 deletions listings/ch20-web-server/listing-20-01/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ fn main() {
for stream in listener.incoming() {
let stream = stream.unwrap();

// 接続が確立しました!
println!("Connection established!");
}
}
3 changes: 1 addition & 2 deletions listings/ch20-web-server/listing-20-02/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
[package]
name = "hello"
version = "0.1.0"
authors = ["Your Name <[email protected]>"]
edition = "2018"
edition = "2021"

[dependencies]
18 changes: 11 additions & 7 deletions listings/ch20-web-server/listing-20-02/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use std::io::prelude::*;
use std::net::TcpListener;
use std::net::TcpStream;
use std::{
io::{prelude::*, BufReader},
net::{TcpListener, TcpStream},
};

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

fn handle_connection(mut stream: TcpStream) {
let mut buffer = [0; 1024];
let buf_reader = BufReader::new(&mut stream);
let http_request: Vec<_> = buf_reader
.lines()
.map(|result| result.unwrap())
.take_while(|line| !line.is_empty())
.collect();

stream.read(&mut buffer).unwrap();

println!("Request: {}", String::from_utf8_lossy(&buffer[..]));
println!("Request: {:#?}", http_request);
}
3 changes: 1 addition & 2 deletions listings/ch20-web-server/listing-20-03/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
[package]
name = "hello"
version = "0.1.0"
authors = ["Your Name <[email protected]>"]
edition = "2018"
edition = "2021"

[dependencies]
19 changes: 11 additions & 8 deletions listings/ch20-web-server/listing-20-03/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use std::io::prelude::*;
use std::net::TcpListener;
use std::net::TcpStream;
use std::{
io::{prelude::*, BufReader},
net::{TcpListener, TcpStream},
};

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

// ANCHOR: here
fn handle_connection(mut stream: TcpStream) {
let mut buffer = [0; 1024];

stream.read(&mut buffer).unwrap();
let buf_reader = BufReader::new(&mut stream);
let http_request: Vec<_> = buf_reader
.lines()
.map(|result| result.unwrap())
.take_while(|line| !line.is_empty())
.collect();

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

stream.write(response.as_bytes()).unwrap();
stream.flush().unwrap();
stream.write_all(response.as_bytes()).unwrap();
}
// ANCHOR_END: here
24 changes: 0 additions & 24 deletions listings/ch20-web-server/listing-20-04/src/main.rs

This file was deleted.

3 changes: 1 addition & 2 deletions listings/ch20-web-server/listing-20-05/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
[package]
name = "hello"
version = "0.1.0"
authors = ["Your Name <[email protected]>"]
edition = "2018"
edition = "2021"

[dependencies]
2 changes: 2 additions & 0 deletions listings/ch20-web-server/listing-20-05/hello.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
<title>Hello!</title>
</head>
<body>
<!-- <h1>こんにちは!</h1> -->
<h1>Hello!</h1>
<!-- <p>Rustからやあ</p> -->
<p>Hi from Rust</p>
</body>
</html>
32 changes: 17 additions & 15 deletions listings/ch20-web-server/listing-20-05/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
// ANCHOR: here
use std::fs;
use std::{
fs,
io::{prelude::*, BufReader},
net::{TcpListener, TcpStream},
};
// --snip--

// ANCHOR_END: here
use std::io::prelude::*;
use std::net::TcpListener;
use std::net::TcpStream;

fn main() {
let listener = TcpListener::bind("127.0.0.1:7878").unwrap();

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

// ANCHOR: here
fn handle_connection(mut stream: TcpStream) {
let mut buffer = [0; 1024];
stream.read(&mut buffer).unwrap();

let buf_reader = BufReader::new(&mut stream);
let http_request: Vec<_> = buf_reader
.lines()
.map(|result| result.unwrap())
.take_while(|line| !line.is_empty())
.collect();

let status_line = "HTTP/1.1 200 OK";
let contents = fs::read_to_string("hello.html").unwrap();
let length = contents.len();

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

stream.write(response.as_bytes()).unwrap();
stream.flush().unwrap();
stream.write_all(response.as_bytes()).unwrap();
}
// ANCHOR_END: here
3 changes: 1 addition & 2 deletions listings/ch20-web-server/listing-20-06/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
[package]
name = "hello"
version = "0.1.0"
authors = ["Your Name <[email protected]>"]
edition = "2018"
edition = "2021"

[dependencies]
28 changes: 13 additions & 15 deletions listings/ch20-web-server/listing-20-06/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
use std::fs;
use std::io::prelude::*;
use std::net::TcpListener;
use std::net::TcpStream;
use std::{
fs,
io::{prelude::*, BufReader},
net::{TcpListener, TcpStream},
};

fn main() {
let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
Expand All @@ -12,28 +13,25 @@ fn main() {
handle_connection(stream);
}
}

// ANCHOR: here
// --snip--

fn handle_connection(mut stream: TcpStream) {
let mut buffer = [0; 1024];
stream.read(&mut buffer).unwrap();

let get = b"GET / HTTP/1.1\r\n";
let buf_reader = BufReader::new(&mut stream);
let request_line = buf_reader.lines().next().unwrap().unwrap();

if buffer.starts_with(get) {
if request_line == "GET / HTTP/1.1" {
let status_line = "HTTP/1.1 200 OK";
let contents = fs::read_to_string("hello.html").unwrap();
let length = contents.len();

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

stream.write(response.as_bytes()).unwrap();
stream.flush().unwrap();
stream.write_all(response.as_bytes()).unwrap();
} else {
// 何か別の要求
// some other request
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
<title>Hello!</title>
</head>
<body>
<!-- <h1>おっと!</h1> -->
<h1>Oops!</h1>
<!-- <p>すみませんが、何を要求しているのか分かりません。</p> -->
<p>Sorry, I don't know what you're asking for.</p>
</body>
</html>
3 changes: 1 addition & 2 deletions listings/ch20-web-server/listing-20-07/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
[package]
name = "hello"
version = "0.1.0"
authors = ["Your Name <[email protected]>"]
edition = "2018"
edition = "2021"

[dependencies]
36 changes: 18 additions & 18 deletions listings/ch20-web-server/listing-20-07/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
use std::fs;
use std::io::prelude::*;
use std::net::TcpListener;
use std::net::TcpStream;
use std::{
fs,
io::{prelude::*, BufReader},
net::{TcpListener, TcpStream},
};

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

fn handle_connection(mut stream: TcpStream) {
let mut buffer = [0; 1024];
stream.read(&mut buffer).unwrap();
let buf_reader = BufReader::new(&mut stream);
let request_line = buf_reader.lines().next().unwrap().unwrap();

let get = b"GET / HTTP/1.1\r\n";

if buffer.starts_with(get) {
if request_line == "GET / HTTP/1.1" {
let status_line = "HTTP/1.1 200 OK";
let contents = fs::read_to_string("hello.html").unwrap();
let length = contents.len();

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

stream.write(response.as_bytes()).unwrap();
stream.flush().unwrap();
stream.write_all(response.as_bytes()).unwrap();
// ANCHOR: here
// --snip--
} else {
let status_line = "HTTP/1.1 404 NOT FOUND\r\n\r\n";
let status_line = "HTTP/1.1 404 NOT FOUND";
let contents = fs::read_to_string("404.html").unwrap();
let length = contents.len();

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

stream.write(response.as_bytes()).unwrap();
stream.flush().unwrap();
stream.write_all(response.as_bytes()).unwrap();
}
// ANCHOR_END: here
}
6 changes: 0 additions & 6 deletions listings/ch20-web-server/listing-20-08/Cargo.lock

This file was deleted.

7 changes: 0 additions & 7 deletions listings/ch20-web-server/listing-20-08/Cargo.toml

This file was deleted.

11 changes: 0 additions & 11 deletions listings/ch20-web-server/listing-20-08/hello.html

This file was deleted.

42 changes: 0 additions & 42 deletions listings/ch20-web-server/listing-20-08/src/main.rs

This file was deleted.

Loading

0 comments on commit 0a149b8

Please sign in to comment.