SPEAKER: Nüüd sukelduda jagamisvõrku koodi ja kui heita pilk kontekstis kus koodi kirjutada läheb tööle. Lõpus päeval, sa lähed, et rakendada kogu veebiserver. Aga me oleme andnud Teile skelett kood, mis on teatud funktsioone, Eriti võrgustikega seotud. Võtame pilk. Nii siin ülaosa suunas faili on kamp funktsiooni testida makro nõuetele. Nüüd see on lihtsalt omadus c, mille kohaselt vastavalt kamp man-lehekülgi teil määratleda mõned neid konstante, et olla tõsi või olla isegi konkreetsed numbrid, et teil on teatud funktsioone. Vastasel juhul saad deklareerimata ja sa ei pääse. Nii et ma olen seda teinud teel lugemine man-lehekülgi. Nüüd allapoole, in read 15 kuni 17, siis on terve hunnik piirid deklareeritud. Ja me oleme laenanud neid alates populaarne web server nimega Apache. Ja need on vaid numbrid, mis hakkavad kork koguarv baitide et on lubatud erinevates kontekstides HTTP taotluse et brauser on lubatud saata mulle. Edasi me defineerime oktetti. Nüüd oktett on lihtsalt fancy viis öelda bait, või kaheksa bitti. Selgub ka Läinud bait ei pruugi kaheksa bitti, nii oktett on alati kaheksa bitti. Nii et kui me oleme vastu Mis on levinud võrgustiku maailma kutsudes kaheksa baiti oktett. Siin ma olen täpsustada, et oktetti hakkab 512, nii et palju nagu kohtuekspertiisi kui loeme kamp baiti ajal ka siin me ei kavatse lugeda hunnik oktetti korraga. Järgmine terve hunnik päisefailiga. Kuidas ma tean, et lisada need on? Noh ma lihtsalt lugeda mees lehekülgede arv funktsioonid et me kasutame selles jaotus kood ja lisada need Ma tehti ülesandeks. Ja nüüd on meil andmetüüp. Oleme kuulutanud oktett olema char. Ja me näeme hiljem, et see on kasutatakse kogu koodi. Ja me oleme kuulutanud terve hulk prototüüpe, ja me käime kiiresti läbi kõik need funktsioonid. Lõpuks ja võib-olla kõige oluline meeles pahanda siinkohal lugu on see, et seal on tegelikult kogu hunnik globaalsed muutujad ülaosas faili root, CFD, SFD, taotluse faili ja keha. Nüüd üldiselt, kasutades nii palju globaalse muutujate või globaalseid muutujaid üldse ei ole tagasi praktikas. Aga selgub, et me ka kasutades tehnikat nimega signaali käitlemise hiljem kood, mis võimaldab meil tuvastada, kui kasutaja tabab midagi nagu CTRL C ja sulgeda server nõtkelt. Ja selleks, et seda teha nõtkelt ja tegelikult vaba mälu, me peame olema juurdepääs Selliste globaalsete muutujate. Ja nüüd võtame pilk peamine, mis ajab kogu see programm. Esiteks ülaosas siin on viga number muutuja et ilmselt ei on tüüp, kuid see on sest see on tegelikult määratletud fail nimega viga errno.h mis sisaldub kõrgemal. Kui sa inimesele errno tegelikult vaata definitsiooni see asi, näete, et see on eriline globaalse muutuja, mis määrab terve hunnik funktsioone ei kirjutanud Meie poolt, kuid autorite poolt Linux ja muude süsteemide tegelikult loodud number muutuja, kui midagi läheb valesti, nii et saate kogu maailmas aru saada, mida tegid valesti minna. Nüüd allapoole näete uus tehnikat kasutades võib-olla getopt, funktsioon, mis aitab sõeluda käsk argumente nii, et meil ei ole pea vaeva raisata aega figuring kuidas sõeluda midagi 8080, või sidekriips p või sidekriips h abi saada. getopt sisuliselt teeb seda meie eest. Vaata mees lehel rohkem. Järgmine, mida me teeme natuke viga kontrollides veenduda et port number kuulub määratud vahemik spec. Seejärel näeme kõne funktsioon alustada, mille määratlust me vaadata ühe hetkega, ja nagu nimigi ütleb, see hakkab veebiserver. Siin on meil kõne funktsioon nimetatakse signaali, mis ütleb, kas ja kui sa kuuled kontroll C alates kasutaja klaviatuur, edasi minna ja helistada funktsiooni nimetatakse handler et läheb lõpuks puhas asju ja lõpetage server. Selle all on see, mis tundub olevat lõputu silmuse, esimene rida, mis tegelikult on kõne funktsioon, mida nimetatakse nullitud, mis me ise rakendama hiljem, et vabastamiseks mõned meie globaalse riikides. Pärast seda on rida kood, mis tinglikult kontrollib tagastamise väärtus ühendatud. Nüüd ühendatud näeb välja nagu predikaat, midagi, mis tagastab tõene või väär. Ja see juhtub, kuid seal on midagi erilist ühendatud et see blokeerimine kõne. See seal istuda ja oodata kuni kasutaja brauser püüab ühendada see web server ja alles siis algab see tagasi õige või vale, nii et me lähtume sisemusse seda, kui avalduse. Seal märkate seda funktsiooni funktsiooni nimetatakse sõeluda, mida me kirjutas, mis sõelub kõik oktetti, kõik baitide pärit brauseris serverisse, et saaksime käsi sulle tagasi lõpuks väärtust ühe Nende globaalsed muutujad, mis kauplustes kõik baiti lihtsalt päised, et taotluse, ei keha kui ei oleks tegelikult keha ta. Nüüd allapoole hakkame sõeluda need pealkirjad ekstrakti alamhulga informatsiooni et me hoolime. Täpsemalt kohta spetsifikatsioon, me esimest korda tahtsin küsida line, mis on lihtsalt, et kõige esimene rida, mis loodetavasti ütleb midagi get kaldkriips või mõned teed ja siis HTTP 1.1. Me kasutame seda metafoori nõela heinakuhjas otsida eelkõige süütab või aadressid. Ja tõepoolest, seal on mitmeid funktsioone meie jaotus koodi et sinagi võid leida kasulik otsides eriti väärtusi. Lõppkokkuvõttes me kopeerida need baidid muutuvaks nimetatakse joont, mis märkate ka, me oleme jaotatakse stack teel dünaamiliselt muutuva suuruse massiivi. Ja me teadlikult püüdnud vältida helistaja malloc kuna jälle sest Control C on potentsiaali tunnuseks see programmist, siis ei taha olla see kood äkki katkestatud kasutaja poolt pihta Kontroll C, mille tulemusena on see, et ma ei pruugi olla võimalus tasuta midagi, mida ma olen malloced. Nii et ma olen püüdnud kasutada võimalikult palju pinu on suudan siin. Next up, terve hunnik DOS. Kirjeldus, selgitama kohta, millised täpselt on siin oodata, kuid Kommentaarid teile vihje, mis ees ootab. Esmalt tuleb kinnitab taotluse line ja veenduge, et see näeb välja nagu kirjeldused grammatika, nii et rääkida, ütleb, et ta peaks. Seejärel tuleb eraldada midagi nimetatakse päringu kraami välja pärast küsimärk, nagu nägime meie Google näiteks möödaminnes HD parameeter. Siis concatenate kokku Juur veebiserver koos tee, mis on in et taotluse esimesel real ja moodustavad täieliku tee file tahame otsida. Seejärel läheme veenduda et fail on olemas ja loetav. Ja siis me läheme eraldama faililaiendi, .html või Php või midagi sellist pikendamist see on väga stringi lõpust taotletakse. Järgmisena on tervikuna hunnik koodi kandsime tegelikult luua PHP loodud sisu eest. Lühidalt, see kood võtab nimel Faili soovite PHP tõlgendada. Võtame seda midagi, mida nimetatakse toru PHP tõlk. Tule tagasi vastuse, nagu oleks Vastuseks oli fail ise. Ja siis me Käi et faili baiti, tõmmates need kõik ühte puhver et saaksime lõpuks prindi neid välja. Tõepoolest, kõik need kutsub siia dprintf võimaldab meil printida midagi nimetatakse failipideme, mis on lihtsalt täisarv mis tähistab faili. Väga sarnase sisuga, kuid põhimõtteliselt erinev faili star pointer. Pane tähele, kuidas saate süntaks, nagu printf siin nii et ma ei saa dünaamiliselt lisada midagi pikkus jaoks väärtus HTTP päis nimetatakse Content-Length. Ja lõpuks ma kasutasin funktsioon õigus tegelikult kirjutada keha taotluse. Kahjuks ainult ellu toetust dünaamiliselt loodud PHP faile. Me ei rakendanud toetust staatilisi faile nagu GIF ja JPEG, ja CSS ja HTML faile. See kahjuks jäetakse teil reageerida kliendi eesmärk Selle teha. Nii et seal leiad, et seal on ei ole palju inspiratsiooni jooksul, et blokaad, aga kui sa natuke kõrgemal kuidas läksime suulise tõlke PHP koodi funktsioone saate kasutada on veidi erinev. Tegelikult saab laenata mõned funktsioonid võib-olla kohtuekspertiisi Ülesanded, sest lõpus päeval kõik, mida vaja teha siin on, kui sa tead, mida fail avatud ja kui sa tead, et see on nn MIME tüübi või sisu tüüp, sa pead lugema neid baiti ja kuidagi sülitada neid tagasi viia. Ja nüüd tour selle faili teisi funktsioone. Up esimene on ühendatud, mis lihtsalt tagastab true kui see lõpuks kuuleb ühendus kasutaja. Järgmisena on viga. Error, vahepeal funktsioonina me kirjutas käsitseda kõiki erinevaid 400 500 HTTP staatuse koodid, et te võiksite saata kasutajale tagasi, koos standard sõnum. Järgmisena on koormus, eriti tuumakas funktsioon, mille eesmärk elus on lugeda faili star pointer sisu faili globaalset puhver et me deklareeritud maailmas Eespool [? Peamised. ?] See on natuke keeruline, kuna me on lugeda baiti failist aga vaadake iga iteratsiooni kas me oleme juba tabas faili lõppu või midagi on valesti läinud. Ja me kasutame RealLOC veenduda, et olenemata puhver me kasutame kasvab ja kasvab ja kasvab ja alati viibib ees baitide arv et me peame sobi sinna. Handler, vahepeal on funktsioon, mis saab nimetatakse teel võttes Registreeritud Kontroll C signaalina et me tahame peatada. Pange tähele, siin handler et lõppkokkuvõttes kõned lõpetada, mis muidugi peatub veebiserver. Ja kahjuks lookup ei rakendata. Vaimus, see on üsna lihtne ülesanne. Arvestades faililaiendi, mida ta vajab tagasi see nn MIME tüüpi või sisu tüüp. Ja me täpsustada spetsifikatsioon mida see kaardistamine peab olema. Aga sa pead tõlkima see lõppkokkuvõttes c koodi. Järgmisena on meie samamoodi tuumakas funktsiooni nimetatakse sõeluda, mille eesmärk elus on lugeda, mitte faili vaid võrguühendust. Täpsemalt, lugemine ja sõelumine HTTP taotluse, mis on pärit brauseris serveriga et lõpuks saame sõeluda just päised taotluse line ja tagasi need teile teel globaalse puhver, mis me Ülalmainitud [? Peamised. ?] Taasta vahepeal on funktsioon, mis me defineerime mis saab nimetatakse korduvalt sees Peamiste iga kord, kui parasjagu valmis kuulama hakata uue liitumise nii et me alati teada, riik meie muutujad ja nii, et me oleme ka vabanenud tahes mälu oleks võinud eraldatud Eelmise võrguühenduse. Järgmisena on alustada, funktsioon, mis me kirjutasime mis sisaldab kogu palju networking koodi et lõpuks hakkab veebiserver. Viimati üles on funktsioon nimetatakse stop, mis teeb täpselt seda, see peatub veebiserver. Aga kõigepealt see vabastab tahes mälu et ikka on eraldatud. Aga see lõppkokkuvõttes nõuab väljapääsu isegi tagastamise kontrolli meie peamine ülesanne. Lõppkokkuvõttes üks Kõige olulisem tehnikaid rakendamisel seda veebiserver saab olema natuke katse-eksituse meetodil, millel on üks brauseriaknas avatud paremal ja terminali aknas vasakule, serverid konsooli aken, nii et sa näete sõnumeid, mis on kuvatakse ekraanil. Aga veel parem oleks kolmanda aken, teise terminali aknas kus te kasutate Telnet, kasutamine mille eest on ette nähtud spec. Ja Telnet on lihtsalt väga Simple Network programmi mis võimaldab teil teeselda olla brauseri ühes aknas rääkimise ajal teine ​​aken. Nii näed täpselt tekstikäske et tulevad tagasi serverilt kliendile ilma et peaks poking ümber chrome arendaja tööriistad teisiti clunkier liides.