Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Project สุดท้าย — สร้าง Web Server แบบ Multithreaded

มันเป็นการเดินทางที่ยาวนาน แต่เรามาถึงจุดจบของหนังสือ ในบทนี้ เราจะ build อีกหนึ่ง project ด้วยกันเพื่อสาธิตแนวคิดบางอย่างที่เราครอบคลุมใน บทสุดท้าย รวมทั้งทบทวน lesson ก่อนหน้าบ้าง

สำหรับ project สุดท้ายของเรา เราจะทำ web server ที่บอก “Hello!” และดู เหมือน Figure 21-1 ใน web browser

นี่คือแผนของเราสำหรับ build web server:

  1. เรียนรู้เล็กน้อยเกี่ยวกับ TCP และ HTTP
  2. ฟัง TCP connection บน socket
  3. Parse คำขอ HTTP จำนวนเล็กน้อย
  4. สร้าง response HTTP ที่เหมาะสม
  5. ปรับปรุง throughput ของ server ของเราด้วย thread pool
Screenshot ของ web browser ที่เข้าชม address 127.0.0.1:8080 แสดงหน้า web ที่มีเนื้อหา text "Hello! Hi from Rust"

Figure 21-1: Project สุดท้ายที่เราจะแชร์

ก่อนเราเริ่ม เราควรกล่าวสองรายละเอียด ก่อนอื่น เมธอดที่เราจะใช้จะไม่ เป็นวิธีที่ดีที่สุดในการ build web server กับ Rust สมาชิก community publish จำนวนของ crate ระดับ production ใช้ได้ที่ crates.io ที่ให้ implementation web server และ thread pool ที่สมบูรณ์มากกว่าที่เราจะ build อย่างไรก็ตาม เจตนาของเรา ในบทนี้คือช่วยคุณเรียน ไม่ใช่รับเส้นทางที่ง่าย เพราะ Rust เป็นภาษา systems programming เราเลือกระดับของ abstraction ที่เราต้องการทำงานกับ ได้และไปยังระดับต่ำกว่าที่เป็นไปได้หรือ practical ในภาษาอื่น

ที่สอง เราจะไม่ใช้ async และ await ที่นี่ Build thread pool คือความ ท้าทายใหญ่พอในตัวเอง โดยไม่เพิ่ม build runtime async! อย่างไรก็ตาม เรา จะ note ว่า async และ await อาจ apply ให้ปัญหาบางอย่างเดียวกันที่เราจะ เห็นในบทนี้ได้ ในที่สุด ตามที่เราสังเกตกลับในบทที่ 17 runtime async หลายตัวใช้ thread pool สำหรับการจัดการงานของพวกเขา

ดังนั้นเราจะเขียน HTTP server พื้นฐานและ thread pool โดยมือเพื่อให้คุณ เรียนรู้ไอเดียทั่วไปและเทคนิคหลัง crate ที่คุณอาจใช้ในอนาคต