SPEAKER: Issa ejja adsa fil-kodiċi ta 'distribuzzjoni
u tagħti ħarsa lejn il-kuntest li fiha l-kodiċi tikteb
se jkun qed jopera.
Fl-aħħar tal-ġurnata, int ser jimplimentaw
l-intier ta 'l-web server.
Imma aħna għandna sakemm inti ma 'l-iskeletru
kodiċi li jkollhom xi funzjonalità, partikolarment relatati mal-netwerking.
Ejja tagħti ħarsa.
>> Allura up here lejn il-quċċata tal-fajl huwa mazz
karatteristika test rekwiżiti makro.
Issa din hija biss karatteristika ta 'c, fejn skond il-mazz ta 'paġni bniedem
ikollok biex jiddefinixxu xi wħud dawn kostanti biex ikunu vera
jew li jkun saħansitra numri speċifiċi hekk li ikollok aċċess għal ċerti funzjonijiet.
Inkella dawn ser ikunu mhux iddikjarat u int mhux se jkollhom aċċess.
So I ghamilt dan permezz tal-qari tal-paġni bniedem.
Issa stabbiliti hawn taħt, Linji 15 permezz 17, aħna
jkollhom mazz sħiħ ta 'limiti ddikjarati.
>> U aħna ħadthom mislufa dawn minn web server popolari imsejħa Apache.
U dawn huma biss numri li huma għaddejjin
li għatu l-għadd totali ta 'bytes li huma permessi
f'diversi kuntesti għat-talba HTTP li browser huwa permess li tibgħatli.
Sussegwentement, aħna jiddefinixxu octets.
Issa l-ottett huwa biss mod fancy ta 'tgħid byte, jew tmien bits.
Jinstabx fi yesteryear f'byte ma kienx qed neċessarjament tmienja bits,
hekk ottett huwa dejjem tmien bits.
Allura f'dan il-każ aħna ve adottati x'hemm komuni fil-netwerking
dinja ta 'sejħa tmien bytes ta ottett.
>> Hawnhekk stajt speċifikat li ottetti se jkun 512, b'tali mod li ħafna bħal fil-forensika
meta naqraw mazz ta bytes fi żmien, hawnhekk ukoll,
aħna qed tmur biex taqra mazz ta 'ottetti fi żmien.
Li jmiss mazz sħiħ ta 'fajls header.
Kif ma naf li tinkludi dawn?
Well I sempliċiment jaqra l-bniedem paġni għal numru ta 'funzjonijiet
li aħna ser tuża f'dan distribuzzjoni kodiċi u jinkludu fil-dawk
I kien struzzjonijiet biex.
>> U issa għandna tip ta 'data.
Imxejna ddikjarat bħala ottett li tkun char.
U aħna ser tara aktar tard dik thats użat madwar il-kodiċi.
U aħna ħadthom iddikjarata mazz sħiħ ta 'prototipi,
u aħna ser jimxu malajr permezz kull waħda minn dawk il-funzjonijiet.
Fl-aħħar nett, u forsi aktar importanti li wieħed iżomm
mind f'dan il-punt fil- l-istorja, hija li hemm
huma, fil-fatt kollu mazz ta 'varjabbli globali
fil-quċċata tal-fajl, għeruq, CFD, SFD, talba, fajl u l-korp.
>> Issa ġeneralment, jużaw tant globali varjazzjonijiet, jew varjazzjonijiet globali fil-livelli kollha,
mhuwiex il-prattika lura.
Iżda jirriżulta aħna wkoll qed tuża teknika msejħa tqandil sinjal aktar tard
fil-kodiċi, li jippermetti li jikxfu meta l-utent hits xi ħaġa
bħall CTRL C u mitfija l-server gracefully.
U sabiex tagħmel dan gracefully u fil-fatt b'xejn sa memorja,
għandna bżonn li jkollhom aċċess għall- dawn il-varjabbli globali.
>> U issa ejja tagħti ħarsa lejn prinċipali, li ssuq il-totalità ta 'dan il-programm.
L-ewwel nett, fil-quċċata here we ikollhom numru varjabbli żball
li jidher li ma jkollhom tip, iżda li
għaliex huwa attwalment definita fil-fajl imsejħa
errno.h żball li huwa inkluż ogħla sa.
Jekk inti tagħmel bniedem errno biex effettivament ara d-definizzjoni għal dan il-ħaġa,
tkun taf tara li dan huwa varjabbli globali speċjali li
titwaqqaf minn mazz sħiħ ta 'funzjonijiet mhux miktub
mill minna, iżda mill-awturi tal-Linux u sistemi oħra li attwalment stabbiliti
numru li dak il-varjabbli meta xi ħaġa tmur ħażin sabiex inti tista 'globalment
ċifra barra dak li għamilt tmur ħażin.
>> Issa stabbiliti hawn taħt inti ser tara ġdida teknika forsi jużaw getopt,
funzjoni li tgħin kmand parse argumenti linja tant li nagħmlu mhux
jkollhom li jolqot ħela ta 'ħin li jidhru kif parse xi ħaġa simili 8080,
jew p sing, jew h sing biex tikseb l-għajnuna.
getopt essenzjalment ma li għalina.
Ara l-paġna bniedem għal aktar.
>> Sussegwentement, nagħmlu daqsxejn ta 'żball verifika biex tagħmel żgur
li n-numru tal-port huwa fi ħdan il-firxa speċifikata fil-spec.
Sussegwentement, naraw sejħa għall-funzjoni tibda, li d-definizzjoni aħna ser
tħares lejn fil-mument, u bħala l-isem tagħha jissuġġerixxi, dan jibda l-web server.
Hawnhekk għandna sejħa għal funzjoni imsejħa sinjal li jgħid,
jekk u meta inti tisma 'Kontroll C minn keyboard-utent, imorru quddiem u sejħa
funzjoni msejħa handler li għaddej affarijiet li finalment tnaddaf u jieqfu
l-server.
>> Hawn taħt dan huwa dak li jidher li jkun hemm loop infinita, l-ewwel linja ta 'liema
effettivament huwa sejħa għal funzjoni msejħa
reset, li aħna lilna nfusna jimplimentaw aktar tard sabiex
biex tilliberalizza xi wħud mill-istati globali tagħna.
Wara li hija linja ta ' kodiċi li kondizzjonalment
qed jiċċekkja r-ritorn valur ta 'konnessi.
Jistenna Issa konnessi bħal relattivi, xi ħaġa li jirritorna vera jew falza.
U dan huwa minnu, iżda hemm xi ħaġa speċjali fil konnessi
f'dik huwa sejħa imblukkar.
Hija se joqogħdu hemm u stenna sakemm browser ta 'utent
tipprova li jgħaqqdu din il-web server u biss mbagħad ser ikun
ritorn vera jew falza sabiex inkunu jipproċedi għal ġewwa ta 'dan jekk id-dikjarazzjoni.
>> Ladarba hemm, avviż din il-funzjoni lil funzjoni msejħa parse, li aħna kiteb,
li parses kollha tal-ottetti, kollha ta 'l-bytes li jkunu ġejjin minn browser
lis-server, sabiex inkunu nistgħu idejn inti lura finalment valur lil wieħed
ta 'dawk varjabbli globali li ħwienet kollha ta 'l-bytes fi ftit
il headers ta 'dik talba, mhux il-ġisem
jekk kien hemm attwalment korp lilha.
>> Issa stabbiliti hawn taħt aħna jibdew parse dawk headers għall-estratt
subsett ta 'l-informazzjoni li aħna jimpurtahom.
Speċifikament, kull l- ispeċifikazzjoni, aħna l-ewwel
riedu li jitlob linja, li hija biss li ħafna ewwel linja li
nisperaw jgħid xi ħaġa bħal get mmejla jew xi triq u mbagħad HTTP 1.1.
Aħna qed jużaw dan metafora ta 'labra fil haystack
biex tfittex partikolari Chars jew indirizzi.
U fil-fatt, hemm numru ta ' funzjonijiet kodiċi tad-distribuzzjoni tagħna
li inti, wisq, tista 'ssib utli meta jkunu qed ifittxu għall-valuri partikolari.
>> Fl-aħħarnett, aħna kopja dawn bytes fi varjabbli msejħa linja,
li avviż, wisq, konna allokati fuq il-munzell
permezz ta 'firxa daqs dinamikament.
U aħna qed deliberatament jippruvaw biex jevitaw ssejjaħ malloc
għaliex darb'oħra, għaliex ta 'Kontroll C li
karatteristika potenzjal ta 'dan il-programm, aħna Ma rridx li jkollhom dan il-kodiċi f'daqqa
interrott mill-laqtu utent Kontroll C, ir-riżultat ta 'liema
huwa li jien ma jista 'jkollhom ċans għal xi ħaġa b'xejn stajt malloced.
Hekk jien jippruvaw jużaw kemm tal-munzell hu nista hawn.
>> Sussegwentement up, mazz sħiħ ta 'l dos.
L-ispeċifikazzjoni ser jesponu fuq eżattament x'hemm mistenni hawn,
iżda l-kummenti jtik ħjiel ta 'dak li jinsab quddiem.
Inti l-ewwel bżonn li jivvalida l-linja talba
u kun żgur li jidher qisu l- speċifikazzjonijiet grammatika, biex ngħidu hekk,
jgħid suppost.
Imbagħad għandek bżonn biex jiġi estratt xi ħaġa imsejjaħ il-mistoqsija, l-għalf out
wara kwistjoni mark, bħal rajna b'eżempju Google tagħna
fil-mogħdija fil parametru HD.
Aħna mbagħad concatenate flimkien l-għerq tal-web server
mal-passaġġ li fil li l-ewwel linja talba
u jiffurmaw il-traġitt sħiħ tat il-fajl irridu li tfittex.
>> Wara dan, aħna qed tmur biex tagħmel żgur li teżisti l-fajl u tinqara.
U allura aħna qed tmur biex jiġi estratt tagħha estensjoni fajl, il-Html jew il-PHP,
jew xi estensjoni bħal dan huwa fil- ħafna tarf tas-sekwenza mitluba.
Li jmiss up huwa kollu kemm hu mazz ta 'kodiċi we kiteb
li attwalment tiġġenera PHP kontenut għalik iġġenerat.
Fil-qosor, dan kodiċi għandha jkollha fl-isem
tal-fajl li inti tixtieq PHP biex tinterpreta.
Aħna tgħaddiha minn xi ħaġa imsejħa pajp fis interpretu PHP.
Terġa 'lura t-twegibiet kif għalkemm ir-rispons kienu file nnifsu.
U allura aħna jtenni fuq dik tal-fajl bytes, ġbid lilhom kollha fis buffer wieħed
sabiex inkunu nistgħu finalment tipprintjahom out.
>> Tabilħaqq, dawn kollha jitlob hawn biex dprintf
tippermetti magħna biex jistampaw xi ħaġa imsejħa deskrittur fajl, li
huwa biss integer li jirrappreżenta fajl.
Simili ħafna fl-ispirtu, imma fundamentalment differenti minn fajl
pointer star.
Avviż kif tista 'tuża sintassi bħal printf hawn hekk li nista dinamikament
daħħal xi ħaġa bħall-tul għall-valur ta 'header HTTP
imsejħa Kontenut Tul.
U finalment I użat il- dritt li attwalment jiktbu funzjoni
l-korp għat-talba.
>> Sfortunatament, aħna implimentati biss appoġġ għall dinamikament
fajls PHP ġġenerati.
Aħna ma jimplimentaw appoġġ għall fajls statiċi simili gifs, u jpegs,
u CSS u HTML fajls.
Dan, sfortunatament, titħalla lilek biex twieġeb għall-iskop klijent
dan li tagħmel.
Allura fil hemm inti ser issib li hemm mhux wisq ispirazzjoni f'dak blokk,
imma jekk inti ftit ogħla sa lejn kif aħna marru dwar interpretazzjoni kodiċi PHP,
l-funzjonijiet inti ser tuża huma ftit differenti.
>> Fil-fatt, inti tista 'tissellef ftit mill-funzjonalità
forsi mill-forensika sett problema, għaliex
fl-aħħar tal-ġurnata kollha li għandek bżonn biex nagħmlu hawnhekk huwa li ladarba inti taf liema fajl miftuħ
u ladarba inti taf huwa l-hekk imsejħa Tip MIME jew tip kontenut,
għandek bżonn biex jaqra f'dawk bytes u b'xi mod bżiq lura out.
>> U issa tour ta 'dan funzjonijiet oħra fajl tal.
Up ewwel hu mqabbad, li sempliċement prospetti vera
meta finalment jisma konnessjoni minn utent.
Li jmiss up huwa żball.
Error, sadanittant, bħala funzjoni aħna kiteb biex jimmaniġġjaw kollha ta 'l differenti 400
u l-istatus 500 HTTP kodiċijiet li inti tista 'tixtieq
li jibgħat lura lill-utent, flimkien ma 'messaġġ standard.
>> Li jmiss up huwa tagħbija, a partikularment funzjoni meaty, li l-iskop fil-ħajja
huwa li jaqra minn stilla fajl pointer l kontenut ta 'fajl ġo buffer globali
li aħna ddikjarat globalment hawn fuq [? prinċipali. ?]
Dan huwa daqsxejn kumpless għaliex aħna għandek taqra l-bytes mill-fajl
iżda ċċekkja fuq kull iterazzjoni jekk konna diġà
laqat l-aħħar tal-fajl jew xi ħaġa oħra marret ħażin.
U nużaw realloc biex tiżgura li ikun x'ikun buffer aħna qed jużaw qed jikber
u li qed jikber u li qed jikber u dejjem toqgħod qabel il-numru ta 'bytes
li għandna bżonn biex tajbin fil hemmhekk.
Handler, sadanittant, hija il-funzjoni li gets
imsejħa permezz ta 'wara Kontroll C reġistrat bħala sinjal
li aħna rridu li jinterċettaw.
Avviż hawn fil handler li finalment
sejħiet stop, li naturalment iwaqqaf il-web server.
U sfortunatament, Lookup ma jiġix implimentat.
Fl-ispirtu, dan huwa funzjoni pjuttost sempliċi.
Minħabba estensjoni fajl, jeħtieġ biex jirritorna huwa l-hekk imsejħa MIME
tip jew tip kontenut.
U aħna jispeċifikaw fl-ispeċifikazzjoni dak li l-immappjar għandu jkun.
Imma għandek bżonn biex tittraduċi finalment għall-kodiċi c.
>> Li jmiss up huwa funzjoni simili meaty tagħna imsejħa parse, l-iskop tagħhom fil-ħajja
huwa li jaqra, mhux minn fajl, iżda minn konnessjoni tan-netwerk.
Speċifikament, qari u parsing l Talba HTTP thats ġejjin minn browser
lis-server hekk li finalment nistgħu parse
fil biss l-intestaturi fit-talba line u r-ritorn dawk lilek
permezz ta 'buffer globali li aħna ddikjarati hawn fuq [? prinċipali. ?]
>> Irrisettja, sadanittant, hija funzjoni li niddefinixxu
li gets imsejħa iteratively ġewwa ta prinċipali kull darba int dwar
lest biex jibda jisma għal konnessjoni ġdida
sabiex inkunu dejjem nafu l-istat ta 'varjabbli tagħna
u hekk li konna wkoll ħelset kwalunkwe memorja li
seta 'kien allokat għal konnessjoni tan-netwerk preċedenti.
Li jmiss up jiġifieri tibda, il- funzjoni li aħna kiteb
li fih sħiħa lott ta 'kodiċi tan-netwerking
li finalment jibda l-web server.
>> Last up huwa l-funzjoni imsejħa stop, li
ma eżattament dan, iwaqqaf il-web server.
Iżda l-ewwel jillibera up kwalunkwe memorja li għadu ġie allokat.
Iżda huwa finalment tappella ħruġ anki mingħajr jirritornaw kontroll
funzjoni ewlenija tagħna.
Fl-aħħarnett, wieħed mill- F'ħafna tekniki importanti
meta jimplimentaw din il-web server huwa se tkun daqsxejn ta 'prova u żball,
li jkollu browser wieħed tieqa miftuħa fi dritt u tieqa terminal fi
xellug, il servers console tieqa, sabiex inti
tista 'tara l-messaġġi li huma qed jintwerew fuq l-iskrin.
>> Iżda aħjar xorta jkun terz tieqa, tieqa terminal tieni,
li tuża telnet, l-użu li għalihom huwa preskritt fil-spec.
U telnet huwa biss ħafna programm network sempliċi
li ihallik biex nippretendu li tkun browser tieqa waħda
filwaqt li tkellem lill-tieqa oħra.
Dan il-mod inti tista 'tara eżattament il-kmandi testwali
li huma ġejjin lura minn server klijent
mingħajr ma jkollhom poking madwar iżviluppatur chrome l
għodod fi altrimenti interface clunkier.