(1) Handle-connection, check response

1 parent 902a1e68
Showing with 37 additions and 1 deletions
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 4
[[package]]
name = "hello"
version = "0.1.0"
# Commit 1 Reflection notes
Dalam fungsi `handle_connection`, kita memproses request yang masuk dari browser. Berikut adalah penjelasan metode yang digunakan:
1. **`BufReader::new(&mut stream)`**: Kita membungkus `TcpStream` menggunakan `BufReader`. Ini bertujuan untuk menambahkan *buffering*, sehingga pembacaan data menjadi lebih efisien karena kita bisa memanggil fungsi seperti `.lines()` untuk membaca data baris per baris secara langsung, daripada membaca byte demi byte secara manual.
2. **`.lines()`**: Mengubah `BufReader` menjadi iterator yang mengembalikan setiap baris teks dari *stream*.
3. **`.map(|result| result.unwrap())`**: Karena setiap baris yang dibaca mengembalikan tipe `Result` (bisa sukses atau error), kita menggunakan `.map()` dan `.unwrap()` untuk mengekstrak nilai `String` dari `Result::Ok` secara langsung (mengasumsikan tidak ada error saat pembacaan demi kesederhanaan).
4. **`.take_while(|line| !line.is_empty())`**: HTTP request header selalu diakhiri dengan dua buah *newline* (baris kosong). Fungsi ini akan terus membaca baris dari stream *sampai* menemukan baris kosong tersebut, lalu berhenti. Ini mencegah program *hang* karena menunggu data yang tidak akan dikirim lagi oleh browser.
5. **`.collect()`**: Mengumpulkan semua baris teks yang sudah diproses di atas ke dalam sebuah koleksi vektor (`Vec<_>`), yang kemudian kita simpan ke variabel `http_request` untuk di-print.
\ No newline at end of file
use std::{ io::{ prelude::*, BufReader }, net::{ TcpListener, TcpStream } };
fn main() {
println!("Hello, world!");
let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
for stream in listener.incoming() {
let stream = stream.unwrap();
handle_connection(stream);
}
}
fn handle_connection(mut stream: TcpStream) {
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();
println!("Request: {:#?}", http_request);
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!