ลำโพง: ตอนนี้ขอดำน้ำ เป็นรหัสกระจาย
และดูที่บริบท ซึ่งรหัสที่คุณเขียน
เป็นไปได้ในการดำเนินงาน
ในตอนท้ายของวัน คุณกำลังจะดำเนินการ
ความสมบูรณ์ของเว็บเซิร์ฟเวอร์
แต่เราได้ให้ คุณมีโครงกระดูก
รหัสที่มีฟังก์ชันการทำงานบางอย่าง โดยเฉพาะอย่างยิ่งที่เกี่ยวข้องกับเครือข่าย
ลองมาดู
>> ดังนั้นที่นี่ไปที่ด้านบน ของไฟล์เป็นพวง
คุณลักษณะความต้องการแมโครการทดสอบ
ตอนนี้เป็นเพียงคุณลักษณะของ 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