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.