ลำโพง: ตอนนี้ขอดำน้ำ เป็นรหัสกระจาย และดูที่บริบท ซึ่งรหัสที่คุณเขียน เป็นไปได้ในการดำเนินงาน ในตอนท้ายของวัน คุณกำลังจะดำเนินการ ความสมบูรณ์ของเว็บเซิร์ฟเวอร์ แต่เราได้ให้ คุณมีโครงกระดูก รหัสที่มีฟังก์ชันการทำงานบางอย่าง โดยเฉพาะอย่างยิ่งที่เกี่ยวข้องกับเครือข่าย ลองมาดู ดังนั้นที่นี่ไปที่ด้านบน ของไฟล์เป็นพวง คุณลักษณะความต้องการแมโครการทดสอบ ตอนนี้เป็นเพียงคุณลักษณะของ c โดย ตามพวงของหน้าคน คุณต้องกำหนดบางส่วนของ คงที่เหล่านี้จะเป็นจริง หรือจะเป็นตัวเลขที่ระบุแม้เพื่อให้ คุณมีการเข้าถึงฟังก์ชั่นบางอย่าง มิฉะนั้นพวกเขาจะไม่ได้ประกาศ และคุณจะไม่สามารถเข้าถึง ดังนั้นผมจึงได้กระทำเช่นนี้โดยวิธีการ การอ่านหน้าคน ตอนนี้ลงมาด้านล่างใน สาย 15 ผ่าน 17 เรา มีทั้งกลุ่มของข้อ จำกัด ประกาศ และเราได้ยืมเหล่านี้จาก เว็บเซิร์ฟเวอร์ที่นิยมเรียกว่าอาปาเช่ และเหล่านี้เป็นเพียง ตัวเลขที่จะไป ที่ฝาจำนวน ไบต์ที่ได้รับอนุญาต ในบริบทที่หลากหลายสำหรับการร้องขอ HTTP เบราว์เซอร์ที่ได้รับอนุญาตให้ส่งฉัน ต่อไปเรากำหนด octets ตอนนี้ออคเต็ตเป็นเพียงวิธีแฟนซี ที่บอกไบต์หรือแปดบิต จะเปิดออกในปีกลายไบต์ ก็ไม่จำเป็นต้องแปดบิต ดังนั้น octet อยู่เสมอแปดบิต ดังนั้นในกรณีนี้เราได้นำมาใช้ สิ่งที่พบได้บ่อยในเครือข่าย โลกของการเรียกแปดไบต์ octet นี่ฉันได้ระบุว่าจะ octets เป็น 512 เพื่อให้เหมือนในนิติ เมื่อเราอ่านพวงของ ไบต์ในเวลาที่นี่เกินไป เรากำลังจะอ่าน พวงของ octets ในเวลา ถัดไปทั้งกลุ่มของไฟล์ส่วนหัว ฉันไม่ทราบว่าจะรวมเหล่านี้หรือไม่ ดีฉันเพียงแค่อ่านคน หน้าสำหรับจำนวนของฟังก์ชั่น ที่เราจะใช้ในการจัดจำหน่ายนี้ รหัสและรวมอยู่ในคน ผมได้รับคำสั่งให้ และตอนนี้เรามีชนิดข้อมูล เราได้ประกาศ octet ที่จะเป็นถ่าน และเราจะได้เห็นต่อไปว่าที่ ใช้ตลอดรหัส และเราได้ประกาศให้เป็น ทั้งกลุ่มของต้นแบบ และเราจะเดินได้อย่างรวดเร็วผ่าน แต่ละฟังก์ชั่นเหล่านั้น สุดท้ายและบางทีอาจจะมากที่สุด สิ่งสำคัญที่จะเก็บไว้ใน ใจที่จุดในนี้ เรื่องก็คือว่ามี ในความเป็นจริงทั้งหมด พวงของตัวแปรทั่วโลก ที่ด้านบนของไฟล์ราก CFD, SFD ขอไฟล์และร่างกาย ตอนนี้โดยทั่วไปใช้จำนวนมากทั่วโลก ตัวแปรหรือตัวแปรระดับโลกที่ทุกคน ไม่ได้ปฏิบัติกลับ แต่มันกลับกลายเป็นเรายังใช้ เทคนิคที่เรียกว่าการจัดการสัญญาณในภายหลัง ในรหัสซึ่งช่วยให้เราสามารถ ตรวจสอบเมื่อผู้ใช้ฮิตบางสิ่งบางอย่าง เช่น CTRL ซีและปิดตัวลง เซิร์ฟเวอร์ได้อย่างสง่างาม และเพื่อที่จะทำเช่นนั้นได้อย่างสง่างาม และที่จริงฟรีถึงหน่วยความจำ เราจำเป็นต้องมีการเข้าถึง เหล่านี้ตัวแปรทั่วโลก และตอนนี้ลองมาดูที่หลักซึ่ง ไดรฟ์ทั้งหมดของโปรแกรมนี้ ครั้งแรกที่ด้านบนที่นี่เรา มีตัวแปรหมายเลขข้อผิดพลาด ที่ปรากฏไม่ได้ที่จะ มีชนิด แต่ที่ เพราะมันเป็นเรื่องจริง ที่กำหนดไว้ในไฟล์ที่เรียกว่า errno.h ผิดพลาดที่ จะรวมอยู่สูงขึ้นไป ถ้าคุณทำคน errno จริง ดูความหมายสำหรับสิ่งนี้ คุณจะเห็นว่านี่คือ ตัวแปรทั่วโลกพิเศษที่ ถูกกำหนดโดยทั้งกลุ่ม ฟังก์ชั่นไม่ได้เขียน โดยเรา แต่โดยผู้เขียนของลินุกซ์ และระบบอื่น ๆ ที่จะตั้งจริง จำนวนที่ตัวแปรเมื่อบางสิ่งบางอย่าง ผิดพลาดเพื่อให้คุณสามารถทั่วโลก คิดออกว่าไม่ผิดไป ตอนนี้ลงมาด้านล่างคุณจะเห็นใหม่ บางทีอาจจะเป็นเทคนิคที่ใช้ getopt, ฟังก์ชั่นที่ช่วยให้คำสั่งแจง อาร์กิวเมนต์บรรทัดเพื่อที่เราจะทำไม่ได้ ต้องกังวลการสูญเสียเวลาหา วิธีที่จะแยกบางอย่างเช่น 8080, หรือขีด p, หรือขีดชั่วโมงที่จะได้รับความช่วยเหลือ getopt เป็นหลักไม่ว่าสำหรับเรา ดูหน้าคนมานาน ต่อไปเราจะทำบิตของข้อผิดพลาด การตรวจสอบเพื่อให้แน่ใจว่า ที่หมายเลขพอร์ตที่อยู่ภายใน ช่วงที่ระบุในสเปค ต่อไปเราจะเห็นการเรียกร้องให้ฟังก์ชั่น เริ่มต้นที่มีความหมายเราจะ ดูในช่วงเวลาและเป็นชื่อของมัน แนะนำนี้จะเริ่มต้นเว็บเซิร์ฟเวอร์ ที่นี่เรามีการเรียกร้องให้ฟังก์ชั่น เรียกว่าสัญญาณที่บอกว่า ถ้าและเมื่อคุณได้ยินควบคุม C จาก แป้นพิมพ์ของผู้ใช้ไปข้างหน้าและเรียก ฟังก์ชั่นที่เรียกว่าการจัดการที่เกิด เพื่อสิ่งที่สะอาดที่สุดขึ้นและหยุด เซิร์ฟเวอร์ ด้านล่างนี้เป็นสิ่งที่ดูเหมือนจะเป็น ห่วงอนันต์บรรทัดแรกที่ ได้อย่างมีประสิทธิภาพคือการเรียกร้อง ฟังก์ชั่นที่เรียกว่า ตั้งค่าซึ่งตัวเราเอง ดำเนินการในภายหลังในการสั่งซื้อ เพื่อเพิ่มบางส่วนของรัฐทั่วโลกของเรา หลังจากนั้นเป็นสายของ รหัสที่มีเงื่อนไข คือการตรวจสอบกลับมา คุณค่าของการเชื่อมต่อ เชื่อมต่อตอนนี้ดูเหมือนว่าคำกริยา, บางสิ่งบางอย่างที่ส่งกลับจริงหรือเท็จ และมันไม่ แต่มี บางสิ่งบางอย่างที่พิเศษในการเชื่อมต่อ ในการที่จะปิดกั้นการโทร มันจะมีและนั่งรอสักครู่ จนกระทั่งเบราว์เซอร์ของผู้ใช้ พยายามที่จะเชื่อมต่อไปยังเว็บนี้ เซิร์ฟเวอร์และเพียงแล้วมันจะ กลับมาจริงหรือเท็จเพื่อที่เราจะดำเนินการต่อไป ภายในของคำว่านี้ เมื่อมีการแจ้งให้ทราบฟังก์ชันนี้เพื่อ ฟังก์ชั่นที่เรียกว่าแยกที่เราเขียน ซึ่งจะแยกวิเคราะห์ทุก octets ทั้งหมด ไบต์ที่มาจากเบราว์เซอร์ ไปยังเซิร์ฟเวอร์เพื่อให้เราสามารถส่ง คุณกลับมาในที่สุดค่าให้เป็นหนึ่ง ของตัวแปรระดับโลกที่ ร้านค้าทั้งหมดของไบต์ในเวลาเพียง ส่วนหัวที่ ขอไม่ร่างกาย ถ้ามีจริงร่างกายของมัน ตอนนี้ลงมาด้านล่างเราจะเริ่ม แยกส่วนหัวของผู้ที่จะดึง ย่อยของข้อมูล ที่เราดูแลเกี่ยวกับ โดยเฉพาะต่อ สเปคครั้งแรกที่เรา อยากจะขอสายซึ่งเป็น เพียงแค่ว่าสายแรกที่ หวังว่าสิ่งที่ต้องการได้รับ เฉือนหรือบางเส้นทางแล้ว HTTP 1.1 เรากำลังใช้อุปมานี้ ของเข็มในกองหญ้า ที่จะมองหาโดยเฉพาะอย่างยิ่ง ตัวอักษรหรือที่อยู่ และแน่นอนมีจำนวน ฟังก์ชั่นในรหัสจัดจำหน่ายของเรา ที่คุณเกินไปอาจพบว่าเป็นประโยชน์ เมื่อมองหาค่าโดยเฉพาะอย่างยิ่ง ในท้ายที่สุดเราคัดลอกไบต์เหล่านี้ เป็นตัวแปรที่เรียกว่าเส้น แจ้งให้ทราบที่เกินไปเราได้ จัดสรรในสแตก โดยวิธีการขนาดอาร์เรย์แบบไดนามิก และเรากำลังพยายามจงใจ เพื่อหลีกเลี่ยงการเรียก malloc เพราะอีกครั้งเพราะ ควบคุม C เป็น คุณลักษณะที่มีศักยภาพของโปรแกรมนี้เรา ไม่ต้องการที่จะมีรหัสนี้อย่างกระทันหัน ขัดจังหวะโดยการกดปุ่มของผู้ใช้ ควบคุม C, ผลจากการที่ คือว่าผมอาจจะไม่ได้มีโอกาส สำหรับสิ่งที่ฉันได้ฟรี malloced ดังนั้นฉันพยายามที่จะใช้เป็นอย่างมาก ของสแต็คคือผมสามารถที่นี่ ถัดไปขึ้นทั้งกลุ่มจะ dos สเปคจะอธิบาย กับสิ่งที่คาดหวังที่นี่ แต่ความคิดเห็นที่ให้คุณ คำใบ้ของสิ่งที่อยู่ข้างหน้า ขั้นแรกคุณจำเป็นที่จะต้อง ตรวจสอบสายการร้องขอ และให้แน่ใจว่ามันดูเหมือนว่า ข้อกำหนดไวยากรณ์, เพื่อที่จะพูด บอกว่ามันควรจะเป็น จากนั้นคุณต้องดึงบางสิ่งบางอย่าง เรียกว่าแบบสอบถามสิ่งที่ออกมา หลังเครื่องหมายคำถามเช่น เราเห็นตัวอย่างของ Google ในการผ่านในพารามิเตอร์ HD จากนั้นเราจะเชื่อมเข้าด้วยกัน รากของเว็บเซิร์ฟเวอร์ ด้วยเส้นทางที่อยู่ใน ว่าขอบรรทัดแรก และรูปแบบเส้นทางแบบเต็มของ ไฟล์ที่เราต้องการที่จะมองหา หลังจากนั้นเราจะตรวจสอบให้แน่ใจ ว่าไฟล์ที่มีอยู่และสามารถอ่านได้ และจากนั้นเราจะดึงมัน นามสกุลไฟล์, .html หรือ .php, หรือบางส่วนต่อขยายดังกล่าวว่าเป็นเรื่องที่ ท้ายสุดของสตริงที่มีการร้องขอ ถัดลงมาเป็นทั้ง พวงของรหัสที่เราเขียน ที่จริงการสร้าง PHP สร้างเนื้อหาสำหรับคุณ สั้นนี้ รหัสจะใช้เวลาในชื่อ ของไฟล์ที่คุณต้องการ PHP ในการตีความ เราผ่านมันด้วยสิ่งที่เรียกว่า ท่อเป็นล่ามของ PHP ได้รับการตอบสนองกลับมาราวกับว่า การตอบสนองเป็นไฟล์ตัวเอง แล้วเราย้ำกว่าของแฟ้มที่ ไบต์ดึงพวกเขาทั้งหมดเป็นหนึ่งในบัฟเฟอร์ เพื่อให้เราสามารถที่สุด พิมพ์ออก อันที่จริงสิ่งเหล่านี้ เรียกที่นี่เพื่อ dprintf ช่วยให้เราสามารถพิมพ์บางสิ่งบางอย่าง เรียกว่าอธิบายไฟล์ซึ่ง เป็นเพียงจำนวนเต็ม ที่แสดงถึงไฟล์ คล้ายกันมากในจิตวิญญาณ แต่ พื้นฐานที่แตกต่างจากไฟล์ ตัวชี้ดาว ขอให้สังเกตวิธีการที่คุณสามารถใช้ไวยากรณ์เช่น printf ที่นี่เพื่อที่ฉันสามารถแบบไดนามิก ใส่สิ่งที่ต้องการความยาว สำหรับมูลค่าของส่วนหัว HTTP ที่เรียกว่าความยาวของเนื้อหา และในที่สุดผมใช้ ฟังก์ชั่นที่เหมาะสมที่จะเป็นจริงเขียน ร่างกายที่จะร้องขอ แต่น่าเสียดายที่เราดำเนินการเท่านั้น การสนับสนุนสำหรับแบบไดนามิก สร้างไฟล์ PHP เราไม่ได้ดำเนินการสนับสนุน ไฟล์คงเหมือน GIFs, และ JPEG และ CSS และไฟล์ HTML ว่าโชคไม่ดีที่เหลืออยู่กับคุณ เพื่อตอบสนองต่อวัตถุประสงค์ของลูกค้า นี้จะทำอย่างไร ดังนั้นในที่นั่นคุณจะพบว่ามี ไม่ได้แรงบันดาลใจมากที่อยู่ในบล็อกว่า แต่ถ้าคุณสูงขึ้นเล็กน้อยขึ้นที่ว่า เราไปเกี่ยวกับการแปลความหมายของโค้ด PHP, ฟังก์ชั่นที่คุณจะใช้ มีความแตกต่างกันเล็กน้อย ในความเป็นจริงคุณสามารถยืม บางส่วนของฟังก์ชั่น บางทีอาจจะเป็นจากนิติเวช ชุดปัญหาเพราะ ในตอนท้ายของวันที่สิ่งที่คุณต้อง ทำนี่คือเมื่อคุณรู้ว่าสิ่งที่เปิดไฟล์ และเมื่อคุณรู้ว่ามันเรียกว่า ชนิดไมม์หรือประเภทเนื้อหา คุณจะต้องอ่านไบต์เหล่านั้น และอย่างใดคายพวกเขากลับออกมา และตอนนี้การท่องเที่ยวนี้ ไฟล์ของฟังก์ชั่นอื่น ๆ ขึ้นเป็นครั้งแรกมีการเชื่อมต่อ ซึ่งก็กลับจริง เมื่อในที่สุดมันก็ได้ยิน การเชื่อมต่อจากผู้ใช้ ถัดลงมาเป็นข้อผิดพลาด ข้อผิดพลาดในขณะที่เราเป็นฟังก์ชั่น เขียนในการจัดการทั้งหมดของที่แตกต่างกัน 400 และ 500 สถานะ HTTP รหัสที่คุณอาจต้องการ เพื่อส่งกลับไปยังผู้ใช้ พร้อมกับข้อความมาตรฐาน ถัดลงมาเป็นภาระโดยเฉพาะอย่างยิ่ง ฟังก์ชั่นมีเนื้อหาสาระที่มีจุดมุ่งหมายในชีวิต คือการอ่านจากดาวไฟล์ตัวชี้ เนื้อหาของไฟล์ลงในบัฟเฟอร์ทั่วโลก ที่เราประกาศไปทั่วโลก ด้านบน [? หลัก ?] นี้เป็นบิตซับซ้อนเพราะเรา ต้องอ่านไบต์จากไฟล์ แต่ตรวจสอบในแต่ละซ้ำ ไม่ว่าเราจะได้อยู่แล้ว ตีท้ายของแฟ้มหรือ อย่างอื่นที่ได้ไปผิด และเราจะใช้ realloc เพื่อให้แน่ใจว่า บัฟเฟอร์ที่เรากำลังใช้สิ่งที่มีการเจริญเติบโต และการเจริญเติบโตและการเจริญเติบโตและเสมอ การเข้าพักล่วงหน้าของจำนวนไบต์ ว่าเราต้องให้พอดีกับมี Handler ขณะที่เป็น ฟังก์ชั่นที่ได้รับ เรียกว่าโดยวิธีการของการมี ลงทะเบียน C ควบคุมเป็นสัญญาณ ว่าเราต้องการที่จะสกัดกั้น ขอให้สังเกตที่นี่ในการจัดการ ว่าในท้ายที่สุด โทรหยุดซึ่งแน่นอน หยุดเว็บเซิร์ฟเวอร์ และโชคร้ายที่การค้นหา ไม่ได้ดำเนินการ ในจิตวิญญาณนี้เป็น ฟังก์ชั่นที่ค่อนข้างง่าย ป.ร. ให้ไว้นามสกุลไฟล์จะต้อง ที่จะกลับมาก็เรียกว่าไมม์ ประเภทหรือชนิดของเนื้อหา และเราระบุในสเปค สิ่งที่ทำแผนที่ที่จะต้อง แต่คุณจำเป็นต้องแปล ในท้ายที่สุดมันจะรหัส C ถัดขึ้นไปเป็นหน้าที่ของเราที่มีเนื้อหาสาระในทำนองเดียวกัน ที่เรียกว่าแยกที่มีจุดมุ่งหมายในชีวิต คือการอ่านไม่ได้มาจากไฟล์ แต่จากการเชื่อมต่อเครือข่าย โดยเฉพาะการอ่านและการแยก การร้องขอ HTTP ที่มาจากเบราว์เซอร์ ไปยังเซิร์ฟเวอร์เพื่อให้ ในที่สุดเราสามารถแยก ที่เพียงส่วนหัวในคำขอ สายและกลับเหล่านั้นให้คุณ โดยวิธีการบัฟเฟอร์ระดับโลกที่ เราประกาศข้างต้น [? หลัก ?] รีเซ็ตขณะที่เป็น ฟังก์ชั่นที่เรากำหนด ที่ได้รับการเรียกซ้ำภายใน ของหลักเวลาคุณเกี่ยวกับทุก พร้อมที่จะเริ่มต้นการฟัง สำหรับการเชื่อมต่อใหม่ เพื่อที่เราจะรู้ดีเสมอ รัฐของตัวแปรของเรา และเพื่อให้เราได้ยัง ปลดปล่อยความทรงจำใด ๆ ที่ อาจได้รับการจัดสรรสำหรับ เชื่อมต่อเครือข่ายที่ก่อนหน้านี้ ถัดขึ้นไปเป็นจุดเริ่มต้นที่ ฟังก์ชั่นที่เราเขียน ที่มีทั้ง มากรหัสเครือข่าย ในท้ายที่สุดว่าจะเริ่มต้นเว็บเซิร์ฟเวอร์ ขึ้นล่าสุดเป็นฟังก์ชั่น เรียกว่าครบวงจรซึ่ง ไม่ตรงที่มัน หยุดเว็บเซิร์ฟเวอร์ แต่ก่อนที่มันอิสระหน่วยความจำใด ๆ ที่ยังคงได้รับการจัดสรร แต่ในท้ายที่สุดมันโทรออก โดยไม่ได้กลับมาควบคุม ฟังก์ชั่นหลักของเรา ท้ายที่สุดคนหนึ่งของ เทคนิคที่สำคัญที่สุด เมื่อใช้เว็บเซิร์ฟเวอร์นี้ จะเป็นบิตของการทดลองและข้อผิดพลาด มีเปิดหน้าต่างเบราว์เซอร์อย่างใดอย่างหนึ่ง ที่ด้านขวาและหน้าต่าง terminal ที่ ซ้าย, เซิร์ฟเวอร์คอนโซล หน้าต่างเพื่อให้คุณ สามารถเห็นข้อความที่มี ถูกแสดงบนหน้าจอ แต่ดีกว่ายังคงเป็นหนึ่งในสาม หน้าต่าง, หน้าต่าง terminal ที่สอง ในการที่คุณใช้ Telnet, การใช้งาน ที่มีการกำหนดไว้ในสเปค และ Telnet เป็นเพียงมาก โปรแกรมเครือข่ายง่าย ที่ช่วยให้คุณเพื่อหลอกว่า เป็นเบราว์เซอร์ในหน้าต่างเดียว ในขณะที่พูดคุยกับหน้าต่างอื่น ๆ วิธีที่คุณสามารถดูนี้ ว่าคำสั่งที่เกี่ยวกับใจ ที่จะกลับมา จากเซิร์ฟเวอร์ไปยังลูกค้า โดยไม่ต้องจิ้ม รอบการพัฒนาของโครเมี่ยม เครื่องมือในการเป็นอย่างอื่น อินเตอร์เฟซ clunkier