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.