บทช่วยสอนนี้เป็นกระบวนการเรียนรู้ C++ เมื่อตอนที่ฉันยังเป็นนักเรียน หลังจากทำงาน ฉันไม่มีแรงที่จะเขียนส่วนที่เหลืออีกต่อไป เมื่อมองย้อนกลับไปในโค้ดในตอนนั้น มีข้อบกพร่องมากมายและแม้แต่ข้อบกพร่องก็สามารถทำได้อย่างอิสระ ปรับเปลี่ยน พัฒนา และดำเนินโครงการต่อไป หากต้องการห้องสมุดพื้นฐานภาษา C ที่สมบูรณ์แบบยิ่งขึ้น โปรดย้ายไปที่ wheelib
ผมขอเริ่มด้วยข้อสรุป: ไม่ว่าจะใช้ภาษาใดก็ตาม รากฐานของการพัฒนาแบ็กเอนด์ทั้งหมดคือการพัฒนาเซิร์ฟเวอร์ C/C++ สำหรับ Linux
เซิร์ฟเวอร์ที่ทำงานพร้อมกันสูงเกือบทั้งหมดทำงานในสภาพแวดล้อม Linux ผู้เขียนเคยเขียนเซิร์ฟเวอร์ใน Java และโหนดมาก่อน แต่สุดท้ายฉันก็พบว่าฉันเรียนรู้เพียงเทคโนโลยีและภาษาเท่านั้น แต่ไม่เข้าใจหลักการพื้นฐานที่ซ่อนอยู่ กระบวนการของคำขอ HTTP สาเหตุที่ทำให้เกิดการทำงานพร้อมกันสูง วิธีควบคุมการเชื่อมต่อ TCP วิธีจัดการกับตรรกะของการส่งข้อมูล ฯลฯ สามารถเข้าใจได้ในเชิงลึกโดยการเขียนโปรแกรมใน C/C++ เท่านั้น
บทช่วยสอนนี้เลียนแบบ "30 วันในการสร้างระบบปฏิบัติการของคุณเอง" และมุ่งเป้าไปที่มือใหม่ที่ไม่มีประสบการณ์ โดยจะสอนวิธีเริ่มต้นพัฒนาเซิร์ฟเวอร์ Linux ภายใน 30 วัน บทช่วยสอนนี้ใช้งานได้จริงมากกว่าและจะเน้นไปที่วิธีเขียนโค้ดโดยไม่ต้องใช้พื้นที่มากเกินไปเพื่ออธิบายหลักการพื้นฐานของคอมพิวเตอร์เบื้องหลัง จะมีการให้บทเฉพาะของหนังสือที่เกี่ยวข้องตามที่เกี่ยวข้อง แต่ไม่ได้หมายความว่าความรู้ทางทฤษฎีนี้ไม่สำคัญ จริงๆ แล้ว รากฐานทางทฤษฎีมีความสำคัญมาก หากปราศจากการสนับสนุนทางทฤษฎี การสร้างเซิร์ฟเวอร์ที่มีประสิทธิภาพสูงก็เป็นเรื่องไร้สาระ
บทช่วยสอนนี้หวังว่าผู้อ่าน:
หลังจากเสร็จสิ้นบทช่วยสอนนี้ คุณจะเข้าใจซอร์สโค้ด muduo ได้อย่างง่ายดาย
ปัญหาอย่างหนึ่งในการเรียนรู้ C/C++ คือคุณไม่สามารถสร้างสิ่งต่าง ๆ ได้จริงเมื่อคุณเรียนรู้ครั้งแรก ไม่มีการตอบรับและโปรแกรมทำงานในบรรทัดคำสั่งที่มืด ซึ่งแตกต่างจากการพัฒนาเว็บ คุณสามารถดูผลลัพธ์ของการเรียนรู้ของคุณได้ที่ เวลาใดก็ได้ โค้ดของบทช่วยสอนนี้อยู่ในโฟลเดอร์โค้ด หลังจากศึกษาทุกวัน คุณจะได้รับเซิร์ฟเวอร์ที่สามารถคอมไพล์และรันได้ และการพัฒนาซ้ำจะดำเนินต่อไป
มีโฟลเดอร์รหัสสำหรับแต่ละวันในโฟลเดอร์รหัส ป้อนโฟลเดอร์และใช้คำสั่ง make
เพื่อคอมไพล์ ไฟล์ปฏิบัติการสองไฟล์จะถูกสร้างขึ้น ป้อนคำสั่ง ./server
เพื่อดูผลลัพธ์การเรียนรู้ของวันนี้! จากนั้นสร้างเทอร์มินัลใหม่และป้อน ./client
เพื่อเรียกใช้ไคลเอ็นต์และโต้ตอบกับเซิร์ฟเวอร์
วัน01-เริ่มต้นด้วยซ็อกเก็ตที่ง่ายที่สุด
day02-อย่าปล่อยให้ข้อผิดพลาดเกิดขึ้น
day03-เพื่อให้เกิดการทำงานพร้อมกันสูง ต้องใช้ epoll
day04- มาดูคลาสแรกของเรากันดีกว่า
day05-epoll การใช้งานขั้นสูง-การเปิดตัวช่อง
day06-คลาสหลักที่ขับเคลื่อนด้วยเซิร์ฟเวอร์และเหตุการณ์ปรากฏขึ้น
day07-เพิ่มตัวรับไปยังเซิร์ฟเวอร์ของเรา
day08- ทุกอย่างเป็นคลาส แม้แต่การเชื่อมต่อ TCP ก็ไม่มีข้อยกเว้น
day09-บัฟเฟอร์-บทบาทสำคัญ
วันที่ 10 เข้าร่วมกลุ่มเธรดกับเซิร์ฟเวอร์
วันที่ 11-ปรับปรุงกลุ่มเธรดและเพิ่มโปรแกรมทดสอบอย่างง่าย
วันที่ 12-เขียนเซิร์ฟเวอร์ใหม่เป็นโหมดมัลติเธรดของ master-slave Reactor
วิศวกรรม day13-C++, การวิเคราะห์โค้ด, การเพิ่มประสิทธิภาพการทำงาน
day14-สนับสนุนการปรับแต่งตรรกะทางธุรกิจและปรับปรุงคลาสการเชื่อมต่อ
day15-macOS รองรับและปรับปรุงการปรับแต่งตรรกะทางธุรกิจ
วันที่ 16- ปรับโครงสร้างเซิร์ฟเวอร์ใหม่และใช้พอยน์เตอร์อัจฉริยะ
จับเวลา
ระบบบันทึกข้อมูล
รองรับโปรโตคอล HTTP
การทดสอบเว็บเบนช์
การดาวน์โหลดไฟล์ดำเนินการต่อที่จุดพัก
การจัดเก็บทรัพยากรแบบคงที่
-
โปรเจ็กต์ Wlgls/30daysCppWebServer พยายามเขียนส่วนต่อๆ ไปเพื่อใช้อ้างอิง
ความสามารถของฉันอยู่ในระดับปานกลางและระดับของฉันมีจำกัด หากคุณพบว่าบทช่วยสอนของฉันไม่ถูกต้องหรือควรค่าแก่การปรับปรุง โปรดแจ้งปัญหาหรือประชาสัมพันธ์โดยตรง
เรายินดีให้ทุกคนร่วมแบ่งปันโค้ดของคุณเองกับโปรเจ็กต์นี้ หากคุณมีโค้ดที่คุณคิดว่าดีกว่า โปรดส่งปัญหาหรือ PR โดยตรง ข้อเสนอแนะทั้งหมดจะได้รับการพิจารณา
หากต้องการสนับสนุนโค้ด โปรดไปที่โปรเจ็กต์ Pine ซึ่งเป็นไลบรารีเครือข่ายที่พัฒนาขึ้นในบทช่วยสอนนี้ และยังเป็นโค้ดเวอร์ชันล่าสุดอีกด้วย