Pranešėjas: Dabar tegul neria skirstomajame kodas
ir pažvelgti į kontekstą išvaizdą , kurioje kodas rašote
vyksta, kad jis veikia.
Tuo dienos pabaigos, jūs ketinate įgyvendinti
iš interneto serverio visuma.
Tačiau mes teikiame Jūs su skeletas
kodas, kuris turi tam tikrą funkcionalumą, ypač susiję su tinklų.
Leiskite pažvelgti.
>> Taigi čia link viršaus failo yra krūva
apie funkciją išbandyti makro reikalavimus.
Dabar tai tik C, kuriuo funkcija pagal iš žinyno puslapių krūva
turite nustatyti kai Šios konstantos, kad būtų tiesa
arba būti net konkretūs skaičiai taip, kad jūs turite prieigą prie tam tikrų funkcijų.
Priešingu atveju jie bus neoficialus ir jūs neturite prieigos.
Taigi aš padariau tai būdu skaitymo vyras puslapius.
Dabar žemyn toliau, per 17 15 eilutes, mes
turi visa krūva ribų deklaruotų.
>> Ir mes pasiskolino tai iš populiarus interneto serveris vadinamas "Apache.
Ir tai yra tik numeriai, kurie ketina
apriboti skaičių baitų, kurie leido
įvairiuose kontekstuose dėl HTTP užklausa kad naršyklė yra leidžiama siųsti man.
Be to, mes apibrėžiame aštuonetų.
Dabar oktetas yra tik išgalvotas būdas sakydamas baitas, arba aštuonis bitus.
Pasirodo, į pasekėjai baitų nebūtinai aštuoni bitai,
taip oktetas visada aštuoni bitai.
Taigi šiuo atveju mes priėmė kas įprasta tinklų
pasaulis, iš kurios skambinama aštuoni baitai oktetas.
>> Čia aš nurodė, kad baitai bus būti 512, kad panašiai kaip ekspertizės
kai mes skaityti krūva baitų metu, čia taip pat,
mes ketiname skaityti krūva baitai vienu metu.
Kitas visa krūva header files.
Kaip aš žinau, įtraukti juos?
Na aš tiesiog perskaityti vyro puslapiai funkcijų skaičius
kad mes naudosime šiame paskirstymo kodas ir įtraukti į tuos
Aš buvo pavesta.
>> Ir dabar mes turime duomenų tipą.
Mes paskelbė aštuonetas bus char.
Ir mes pamatysime vėliau, kad tai naudojami visoje kodą.
Ir mes paskelbė visa krūva prototipų,
ir mes padėsime greitai per kiekviena iš šių funkcijų.
Galiausiai, ir ko gero svarbu turėti
mintis šiuo klausimu istorija, yra tai, kad
yra iš tikrųjų visa krūva globalių kintamųjų
tuo failo viršuje, šaknis, CFD, ABD, prašymas, failo ir kūno.
>> Dabar apskritai naudojant tiek daug pasaulio kintamieji, ar globalių kintamųjų ne visi,
nėra atgal praktika.
Tačiau paaiškėja, mes taip pat naudojant technika vadinama signalo apdorojimas vėliau
kodą, kuris leidžia mums aptikti, kai vartotojas hitai kažką
kaip CTRL C ir uždaryti serveris grakščiai.
Ir tam, kad padaryti, kad grakščiai ir iš tikrųjų atlaisvinti atminties,
mes turime turėti prieigą prie šie globalių kintamųjų.
>> O dabar leiskite pažvelgti pagrindinė išvaizdą, kuri varo šios programos visumą.
Pirma, viršuje čia mes turi klaidos skaičiaus rodiklis
kad, atrodo, turėti tipo, bet tai
nes tai iš tikrųjų apibrėžta failo pavadinimu
klaida errno.h kuris yra įtrauktas aukščiau.
Jei tai padarysite žmogui errno, kad iš tikrųjų matyti apibrėžimą už tai,
Jūs pamatysite, kad tai yra ypatingą pasaulio kintamasis,
nustato visa krūva funkcijų nėra parašyta
mus, bet iš Linux autorių ir kitas sistemas, kad iš tikrųjų nustatyti
skaičius, kad kintamojo kai kažką negerai, kad jūs galite pasaulyje
išsiaiškinti, kas tai padarė suklysti.
>> Dabar apačioje pamatysite naują technika, galbūt naudojant getopt,
funkcija, kuri padeda byloje vykdymo komandą eilutės argumentai, kad mes neturime
turi nerimauti eikvoti laiko suprasti , kaip apdoroti kažką panašaus 8080,
arba brūkšnys p, arba brūkšnys val gauti pagalbos.
getopt esmės tai daro už mus.
Žr vyro puslapį daugiau.
>> Be to, mes darome klaidų tiek tikrinti įsitikinti
kad prievado numeris yra per nurodyta asortimentą spec.
Be to, mes matome ryšį su funkcija pradėti, kurio apibrėžimas mes
pažvelgti į šiuo metu, ir kaip jos pavadinimas rodo, tai pradeda serverį.
Čia mes turime ryšį su funkcija vadinamas signalas, kuris sako,
jei ir kai išgirsite Valdymo C nuo vartotojo klaviatūra, eiti į priekį ir skambinti
funkcija vadinama prižiūrėtojas, kad vyksta galiausiai švarios things up ir sustabdyti
serveris.
>> Žemiau, kad yra tai, kas atrodo begalinis ciklas, pirmoji eilutė, kuri
efektyviai yra skambutis prie funkcijos vadinamos
naujo, o mes patys įgyvendinti vėliau, siekiant
atlaisvinti kai mūsų pasaulio valstybių.
Po to, kad yra iš linija kodas, kuris sąlyginai
tikrina grąžą vertė prijungtas.
Dabar prijungti atrodo predikato, kažkas, kad grąžina true arba false.
Ir tai daro, bet ten kažkas ypatinga prijungtas
tuo, kad jis blokavimas skambutis.
Jis bus ten sėdėti ir laukti, iki vartotojo naršyklėje
bando prisijungti prie šio interneto serverio ir tik tada jis
grąžina true arba false, kad mes pereisime su šio IF viduje.
>> Kažkada, pastebėti šią funkciją į funkcija vadinama parse, kurį mes rašė,
kuri analizuoja visus aštuonetų, visa iš baitų iš naršyklės
į serverį, kad galėtume perduoti Jūs vėl galiausiai vertės vieną
tų globalių kintamųjų, parduotuvės visi iš tik baitų
tos antraštės prašymas, o ne kūnas
jei buvo faktiškai kūno į jį.
>> Dabar apačioje mes pradedame išanalizuoti tuos antraštes išskleisti
informacijos poaibis kad mums rūpi.
Tiksliau, už specifikacija, pirmiausia
norėjo pareikalauti liniją, kuris yra tik, kad pats pirmas linija,
tikiuosi sako kažką panašaus į GET velniop ar kai kelias ir galiausiai HTTP 1.1.
Mes naudojant šią metaforą iš šieno kupetoje adatą
ieškoti ypač simbolių ar adresai.
Ir iš tiesų, ten yra numeris funkcijos mūsų platinimo kodą
kad jūs taip pat galite rasti naudingos, jei ieškote tikrų vertybių.
>> Galų gale, mes kopijuoti šiuos baitų į kintamojo vadinama linija,
kai pranešimas, taip pat, mes paskirstomos kamino
būdu dinamiškai rūšiuojama masyvo.
Ir mes sąmoningai bando išvengti skambina malloc
nes vėl, nes Kontrol C yra
galimas šios programos bruožas, mes nenoriu turėti šį kodą staiga
nutrauktas vartotojo pataikyti Valdymo C, iš kurių rezultatas
yra tai, kad aš galbūt neturėjo galimybės nemokamai kažką aš malloced.
Taigi aš bandau naudoti tiek, kiek iš kamino yra galiu čia.
>> Kita Aukštyn, visa krūva DOS.
Specifikacija bus išdėstyti apie ką manimi tikimasi čia
bet komentarus jums apie ką užuomina slypi priekį.
Jūs pirmiausia turite patvirtinti prašymo linija
ir įsitikinkite, kad ji atrodo specifikacijos gramatikos, taip sakant,
sako, kad ji turėtų būti.
Tada reikia ištraukti kažką vadinama užklausa, stuff
po klaustuku, kaip matėme mūsų Google pavyzdžiui
priimdamas į HD parametrą.
Mes tada Jungiant kartu iš interneto serverio šakninis
su keliu tai yra kad prašymas pirmoji eilutė
ir sudaro visą kelią failą norime ieškoti.
>> Vėliau mes ketiname įsitikinkite kad failas egzistuoja ir yra įskaitomas.
Ir tada mes ketiname išskleisti savo failo plėtinys, .html arba .php,
arba kai toks pratęsimas tai ne labai pabaiga eilutę prašoma.
Toliau, yra visa krūva kodas rašėme
faktiškai generuoti PHP generuoja turinį jums.
Trumpai tariant, tai kodas trunka vardu
Bylos norite PHP interpretuoti.
Mes perduoti jį kažką vadinama vamzdis į PHP interpretatorius.
Grįžkite atsakymo, nors atsakas buvo pats failas.
Ir tada mes pakartoti per tą failo baitų, traukiant juos visus į vieną buferinį tirpalą
kad mes galime galiausiai juos išspausdinti.
>> Iš tiesų, visi šie ragina Čia dprintf
leidžia mums spausdinti kažką vadinamas failo deskriptorius, kurie
yra tik sveikasis skaičius kuris atstovauja failą.
Labai panašus į dvasią, bet iš esmės skiriasi nuo failo
žvaigždučių žymeklis.
Atkreipkite dėmesį, kaip jūs galite naudoti sintaksę kaip printf čia, kad galėčiau dinamiškai
įterpti kažką panašaus ilgio dėl HTTP antraštės vertės
vadinamas Turinio ilgis.
Ir galiausiai aš funkcija teisė iš tikrųjų rašyti
į prašymą kūno.
>> Deja, mes tik įgyvendinti parama dinamiškai
generuojami PHP failus.
Mes neįgyvendino paramą statiniai failai, pavyzdžiui, Gif, ir jpeg,
ir CSS ir HTML failus.
Tai, deja, liko su jumis reaguoti į kliento tikslu
tai daryti.
Taigi ten jūs pamatysite, kad ten ne daug įkvėpimo per tą bloką,
Bet jei jūs šiek tiek aukščiau, kaip nuėjome apie aiškinant PHP kodą,
funkcijos jums naudoti yra šiek tiek kitoks.
>> Tiesą sakant, jums gali skolintis kai kurie iš funkcionalumo
galbūt iš ekspertizės problema rinkinys, nes
ne dienos pabaigoje viskas, ko jums reikia tai čia yra, kai jūs žinote, ką failo atidaryti
ir kai jūs žinote, tai vadinamoji MIME tipas ar turinio tipą
jūs turite perskaityti tų baitų ir kažkaip spjauti juos atgal.
>> Ir dabar tai kelionė failo kitas funkcijas.
Iki pirmą kartą prijungtas, kuris tiesiog grąžina true
kai ji pagaliau girdi jungtis iš vartotojo.
Toliau, yra klaida.
Klaida, tuo tarpu, kaip funkcija, mes parašė tvarkyti visus skirtingos 400
500 HTTP statusas kodai, kad jūs galbūt norėsite
siųsti atgal į vartotojo, kartu su standartiniu žinute.
>> Toliau, apkrova, ypač mėsiškas funkcija, kurios tikslas gyvenime
yra skaityti iš failo žvaigždė žymiklį turinys failą į pasaulio buferis
kad mes paskelbė visame pasaulyje virš [? Pagrindinis. ?]
Tai yra šiek tiek sudėtinga, nes mes turi skaityti baitų iš failo
bet patikrinti kiekvienos iteracijos ar mes jau ve
nukentėjo failo pabaigą arba kažkas nuėjo negerai.
Ir mes naudojame realloc įsitikinti, kad kokia buferis mes naudojame auga
ir auga ir auga, ir visada esančių į priekį nuo baitų skaičius
kad mes turime, kad tilptų ten.
Handler, tuo tarpu, yra funkcija, kuri gauna
vadinamas būdu, turintys registruotas Valdymo C kaip signalas
kad mes norime perimti.
Atkreipkite dėmesį, čia prižiūrėtojas kad ji galiausiai
ragina sustoti, kuris, žinoma, sustabdo serverį.
Ir, deja, peržvalgos nėra įgyvendinama.
Yra iš esmės, tai yra gana paprasta funkcija.
Atsižvelgiant į tai, failo plėtinys, ji turi grįžti tai vadinamasis MIME
tipo ar turinio tipą.
Ir mes nurodyti specifikacijos kas, kad žemėlapių turi būti.
Bet jūs turite išversti jis galiausiai c kodą.
>> Toliau, yra mūsų panašiai mėsiškas funkcija vadinamas parse, kurių gyvenimo tikslas
yra skaityti, o ne iš failo, bet iš tinklo jungties.
Tiksliau, skaitymo ir apdorojant HTTP užklausa Štai atėjo iš naršyklės
į taip, kad serveris galiausiai galime apdoroti
ne tik į prašymo antraštes linija ir grįžti tiems, jums
būdu pasaulinės buferyje, kad mes paskelbėme anksčiau [? Pagrindinis. ?]
>> Atstatyti, tuo tarpu, yra funkcija, kurią apibrėžia
kad jis pasireiškia vadinamas keletą kartų viduje Pagrindinio kiekvieną kartą jūs ketinate
pasiruošę pradėti klausytis naujam ryšium
kad mes visada žinome, mūsų kintamųjų būsena
ir taip, kad mes taip pat išlaisvino jokios atmintį,
galėjo būti skirta Ankstesnis tinklo ryšys.
Toliau, tai pradėti, funkcija, kurią parašė
kad yra visai daug tinklų kodas
kad galiausiai pradeda serverį.
>> Paskutinis iki yra funkcija vadinama sustojimo, kuris
būtent tai, kad sustabdo serverį.
Bet pirmiausia jis atlaisvina jokios atminties kad vis dar buvo skirta.
Bet galiausiai ragina išeiti net grąžinimo kontrolę
mūsų pagrindinė funkcija.
Galų gale, vienas iš Svarbiausi būdai
įgyvendinant šią žiniatinklio serveris yra bus bandymų ir klaidų tiek,
turintys vieną naršyklės langas atidarytas dešinėje ir terminalo langą
į kairę, serveriai konsolės langas, todėl, kad jūs
galite matyti pranešimus, kurie yra rodomas ekrane.
>> Bet dar geriau būtų trečioji langas, antroji terminalo langą,
kuriame jūs naudoti telnet, kad naudojimas dėl kurių yra nustatytas į spec.
Ir Telnet yra tik labai paprastas tinklo programa
kuri leidžia jums apsimesti būti viename lange naršyklė
kalbėdami su kitu langą.
Šiuo būdu jūs galite pamatyti tiksliai į teksto komandas
kad grįžta iš serverio klientui
be išnyra aplink Chrome "kūrėjas
įrankiai kitaip clunkier sąsaja.