SPEAKER: Nyt sukellus jakautumiseen koodi
ja katsomaan yhteydessä jossa koodin jonka kirjoitat
tulee olla toiminnassa.
Lopussa päivän, aiot toteuttaa
kokonaisuudessaan www-palvelin.
Mutta olemme antaneet sinulle luuranko
koodi, joka on joitakin toimintoja, erityisesti liittyvät verkostoitumiseen.
Katsotaanpa katsomaan.
>> Joten täällä päin alkuun Tiedoston on nippu
ominaisuus testata makro vaatimukset.
Nyt tämä on vain ominaisuus C, jolloin mukaan joukko man-sivuja
sinun täytyy määrittää joitakin näitä vakioita ollakseen totta
tai olla jopa yksittäisiä numeroita niin, että voit käyttää tiettyjä toimintoja.
Muuten he ovat pimeän ja sinulla ei ole pääsyä.
Joten olen tehnyt tätä kautta lukemasta man-sivuilta.
Nyt alhaalla, vuonna linjat 15 kautta 17, me
on koko joukko rajoituksia julisti.
>> Ja olemme lainanneet nämä maasta suosituin web-palvelinohjelmisto Apache-nimisen.
Ja nämä ovat vain numeroita, jotka ovat menossa
korkki kokonaismäärä tavua, jotka on sallittu
eri yhteyksissä, että HTTP-pyynnön että selain saa lähettää minulle.
Seuraavaksi määrittelemme oktettia.
Nyt oktetti on vain hieno tapa sanoa tavu, tai kahdeksan bittiä.
Osoittautuu vuonna menneen tavu ei välttämättä ollut kahdeksan bittiä,
joten kahdeksikkoa aina kahdeksan bittiä.
Joten tässä tapauksessa olemme hyväksytty mitä yleisiä verkostoitumisen
maailman kutsuvan kahdeksan tavua oktetti.
>> Täällä olen määritellyt, että oktetteja tulee olla 512, joten paljon kuin vuonna tutkintaan
kun luemme nippu tavua kerrallaan, tässäkin
aiomme lukea nippu oktetteja kerrallaan.
Seuraava läjän header-tiedostot.
Miten tiedän sisällyttää nämä?
No en yksinkertaisesti lukenut mies sivujen määrä toimintoja
että käytämme tässä jakelu koodi ja sisällyttää ne
Olin neuvottiin.
>> Ja nyt meillä on tietotyyppi.
Olemme julisti oktetista olla char.
Ja näemme myöhemmin se käytetään koko koodi.
Ja olemme julistettu koko joukko prototyyppejä,
ja me kävelemään nopeasti läpi jokainen näistä toiminnoista.
Lopuksi, ja ehkä kaikkein tärkeää pitää
mieleen tässä vaiheessa tarina, on se, että
ovat itse asiassa koko nippu yleismuuttujat
yläosassa tiedoston, root, CFD, selvityksen lopullisuudesta pyynnöstä, tiedostojen ja kehon.
>> Nyt yleensä käyttäen niin monia maailmanlaajuisia muuttujia, tai globaaleja muuttujia lainkaan,
ei takaisin käytäntöä.
Mutta näyttää siltä, ​​olemme myös käyttämällä tekniikkaa kutsutaan signaalin käsittelyä myöhemmin
koodissa, jonka avulla voimme tunnistaa, kun käyttäjä painaa jotain
kuten CTRL C ja sammuttaa palvelin sulavasti.
Ja jotta tehdä sulavasti ja todella vapauttaa muistia,
meidän on pääsy Näiden globaalien muuttujien.
>> Ja nyt katsotaanpa katsomaan tärkein, joka ajaa kokonaisuudessaan tämän ohjelman.
Ensinnäkin huipulla täällä on virhe numero muuttuja
että ei näytä on tyyppiä, mutta se
koska se on itse asiassa määritellään tiedosto nimeltä
virhe errno.h joka sisältyy ylempänä.
Jos et ihminen errno todella katso määritelmä tämän asian,
näet, että tämä on erityinen globaali muuttuja, joka
asetetaan läjän Toimintojen ole kirjoitettu
meille, vaan kirjoittajat Linux ja muita järjestelmiä osaa asettaa
numero, joka muuttuja kun jotain menee pieleen, niin että voit maailmanlaajuisesti
selvittää, mitä meni pieleen.
>> Nyt alhaalla näet uusi tekniikka ehkä käyttäen getopt,
toiminto, joka auttaa jäsentää komento argumentteja jotta emme
tarvitse vaivautua ajanhukkaa miettiminen miten jäsentää jotain 8080,
tai viiva p, tai viiva h saada apua.
getopt lähinnä tekee sen meille.
Katso man-sivulta.
>> Seuraavaksi teemme hieman virhe Varmistamme
että portin numero on sisällä määritelty alue spec.
Seuraavaksi näemme puhelu toiminto aloittaa, jonka määritelmä me
katsokaa hetken, ja sen nimi ehdottaa, tämä alkaa web-palvelin.
Täällä meillä on kutsu toiminto kutsutaan signaali, joka kertoo,
jos ja kun kuulet Ohjaus C käyttäjän näppäimistön, mennä eteenpäin ja soittaa
toiminto nimeltään käsittelijä, joka menee lopulta puhdas asioita ja lopettaa
palvelin.
>> Alla sitähän näyttää olevan päättymättömään silmukkaan, ensimmäinen rivi, joka
tehokkaasti on puhelu on toiminto nimeltään
reset, joka me itse toteuttaa myöhemmin, jotta
vapauttaa joitakin globaaleja.
Sen jälkeen on linja koodi, joka ehdollisesti
on tarkistaa paluu arvo yhdistettynä.
Nyt liitetty Näyttää predikaatti, jotain, joka palauttaa true tai false.
Ja se, mutta siellä jotain erityistä liitetyn
että se on esto puhelun.
Se istua siellä ja odota kunnes käyttäjän selaimen
yrittää muodostaa yhteyden tähän web palvelimen ja vasta sitten se
palauttaa true tai false, jotta voimme edetä sisäpuolelle tämä, jos lausuman.
>> Siellä huomaa tämä toiminto toiminto nimeltään Parse, jotka kirjoitimme,
joka jäsentää kaikki oktettien, kaikki Tavujen tulevan selaimen
palvelimelle, jotta voimme käsi takaisin lopulta arvon yhdelle
Näiden yleismuuttujat että tallentaa kaikki tavua vain
otsikot, jotka pyyntöä, ei kehon
jos siellä oli todella elin sitä.
>> Nyt alhaalla alamme jäsentää ne otsikot poimia
osajoukko tiedot että me välitämme.
Erityisesti kohden erittely, ensin
halusi pyytää linja, joka on vain, että ensimmäinen rivi, joka
toivottavasti kertoo jotain get slash tai jotkut polun ja sitten HTTP 1.1.
Olemme käyttää vertausta neulaa heinäsuovasta
etsiä erityisesti merkkiä tai osoitteita.
Ja todellakin, siellä on useita toiminnot meidän jakelu koodi
että sinäkin saattaa löytää hyödyllisiä kun etsit erityisen arvokkaaksi.
>> Loppujen lopuksi kopioida nämä tavut muuttujaan nimeltä linja,
joka huomaa, liian olemme jaetaan pinoon
Poiketen dynaamisesti kokoinen joukko.
Ja me yrittää tahallaan välttää soittamalla malloc
koska uudelleen, koska Control C on
potentiaalinen ominaisuus tässä ohjelmassa, me eivät halua olla tämän koodin yhtäkkiä
keskeyttää käyttäjän syönti Ohjaus C, jonka tulos
on, että voisin olla mahdollisuus ilmaiseksi jotain olen malloced.
Joten olen yrittänyt käyttää mahdollisimman paljon pinon on voin täällä.
>> Seuraavaksi, koko joukko ja dos.
Spesifikaation lisäperusteluja täsmälleen mitä odottaa täällä,
mutta kommentit antaa sinulle vihje siitä, mitä tuleman pitää.
Sinun on ensin vahvistaa pyynnön linja
ja varmista, että se näyttää tekniset kielioppi, niin sanoakseni,
sanoo sen pitäisi.
Sitten täytyy purkaa jotain kutsutaan kyselyn, tavaraa ulos
jälkeen kysymysmerkki, kuten näimme meidän Google esimerkiksi
ohimennen HD parametri.
Me liität yhteen juureen web-palvelimen
kanssa polku, joka on vuonna että pyyntö ensimmäinen rivi
ja muodostavat koko polun tiedosto haluamme etsiä.
>> Sen jälkeen me aiomme varmistaa että tiedosto on olemassa ja on luettavissa.
Ja sitten me aiomme purkaa sen tiedostopääte, .html tai Php,
tai jotain sellaista laajennus, joka on osoitteessa aivan lopussa merkkijonon pyydetty.
Seuraavana vuorossa on koko nippu koodi kirjoitimme
todella tuottaa PHP tuottamaa sisältöä sinulle.
Pähkinänkuoressa tämä koodi vie nimi
tiedoston haluat PHP tulkita.
Me kulkea sitä jotain kutsutaan putki osaksi PHP: n tulkki.
Saat takaisin vastauksen ikäänkuin vastaus oli itse tiedoston.
Ja sitten me kerrata yli että tiedoston tavua, vetämällä ne kaikki yhteen puskuriin
jotta voimme lopulta tulostaa ne.
>> Todellakin, kaikki nämä kehottaa tästä dprintf
voimme tulostaa jotain kutsutaan tiedosto avainsana, joka
on vain kokonaisluku joka edustaa tiedostoa.
Hyvin samankaltainen hengessä, mutta olennaisesti erilainen tiedosto
tähti osoitin.
Huomaa, miten voit käyttää syntaksia kuin printf täällä niin että voin dynaamisesti
aseta jotain pituus varten arvo HTTP-otsikon
nimeltään Content-Length.
Ja lopulta käytin toiminto oikeus itse kirjoittaa
elimen pyyntöön.
>> Valitettavasti vain täytäntöön tuki dynaamisesti
luotu PHP-tiedostoja.
Emme toteuttaa tuki staattisia tiedostoja, kuten gif, ja JPEG
ja CSS ja HTML-tiedostoja.
Että valitettavasti jää sinulle vastata asiakkaan tarkoitukseen
tätä tehdä.
Joten siellä huomaat, että siellä on ei paljon inspiraatiota sisällä että lohko,
mutta jos hieman ylempänä miten menimme noin tulkkaus PHP,
toiminnot voit käyttää ovat hieman erilaiset.
>> Itse voit lainata joitakin toimintoja
kenties rikosteknisen Harjoitus, koska
lopussa päivä kaikki mitä tarvitset tehdä tässä kun tiedät mitä tiedostoa auki
ja kun tiedät, että se on niin sanottu MIME-tyyppi tai sisällön tyyppi,
sinun täytyy lukea nämä tavut ja jotenkin sylkeä ne takaisin ulos.
>> Ja nyt kiertueen tämän tiedoston muita toimintoja.
Jopa ensimmäinen on kytketty, joka yksinkertaisesti palauttaa true
kun se lopulta kuulee yhteys käyttäjä.
Seuraavaksi on virhe.
Virhe puolestaan ​​funktiona me kirjoitti käsittelemään kaikki eri 400
ja 500 HTTP tila koodit, että saatat haluta
lähettää takaisin käyttäjälle, mukana vakioviesti.
>> Seuraavaksi on kuormitus, erityisesti lihaisa toiminto, jonka elämän tarkoitus
on lukea tiedostosta tähti osoitin tiedoston sisällön globaaliksi puskuriin
että me julisti maailmanlaajuisesti edellä [? tärkeimmät. ?]
Tämä on vähän monimutkainen, koska me täytyy lukea tavuja tiedosto
mutta tarkistaa jokaisen iteraation onko meillä jo
osuma tiedoston loppuun tai jotain muuta on mennyt pieleen.
Ja käytämme realloc varmistaa, että mitä puskuri käytämme kasvaa
ja kasvaa ja kasvaa ja aina edellä pysymiseen tavujen
että meidän sovi sinne.
Handler puolestaan ​​on toiminto, joka saa
kutsuma tapa ottaa rekisteröity Ohjaus C signaali
että haluamme siepata.
Huomaa täällä handler että se lopulta
kehottaa lopettamaan, mikä tietenkin pysäyttää web-palvelin.
Ja valitettavasti lookup ei ole toteutettu.
Hengessä, tämä on melko yksinkertainen funktio.
Koska tiedostopääte, se tarvitsee palauttaa sen ns MIME
tyyppi tai sisällön tyyppi.
Ja me täsmentää selityksessä mitä tuo kartoitus on oltava.
Mutta sinun täytyy kääntää se lopulta C-koodia.
>> Seuraavaksi on meidän samalla lihaisa toiminto nimeltään Parse, joiden elämän tarkoitus
on lukea, ei tiedostosta, mutta verkkoyhteys.
Erityisesti lukeminen ja jäsentämiseen HTTP-pyyntö, joka on peräisin selaimella
palvelimelle niin, että lopulta voimme jäsentää
juuri otsikot pyyntö line ja palautettava sinulle
Poiketen maailmanlaajuinen puskuri, me yllämainittujen [? tärkeimmät. ?]
>> Nollaa puolestaan ​​on toiminto, joka määritellään
että saa kutsutaan iteratiivisesti sisällä Tärkeimpien joka kerta olet noin
valmis aloittamaan kuuntelu Uuden yhteyden
niin että me aina tiedä hetkisiin muuttujien
ja niin, että olemme myös vapautti kaikki muisti,
ehkä on varattu edellinen verkkoyhteys.
Seuraavana euroon käynnisty, toiminto, kirjoitimme
joka sisältää koko paljon verkostoitumisen koodi
että lopulta alkaa web-palvelin.
>> Viime up on toiminto kutsutaan pysäkki, joka
juuri näin, se pysäyttää web-palvelin.
Mutta ensin se vapauttaa kaikki muisti että vielä on myönnetty.
Mutta se lopulta vaatii poistumista edes palaamassa ohjaus
meidän päätehtävä.
Lopulta yksi tärkeimmistä tekniikoista
toteuttavat tätä web-palvelin on olemaan hieman haparoiden,
ottaa yksi selainikkuna auki oikealla ja terminaalin ikkunasta
vasemmalle, palvelimet konsoli ikkuna, jotta voit
näkee viestejä näytetään ruudulla.
>> Mutta vielä parempi olisi kolmasosa ikkuna, toinen terminaali-ikkuna,
jossa voit käyttää Telnet, käyttö jolle on määrätty spec.
Ja Telnet on vain hyvin yksinkertainen verkko-ohjelma
että voit teeskennellä olla selaimen yhdessä ikkunassa
puhuessaan toisessa ikkunassa.
Näin voit nähdä täsmälleen tekstimuotoinen komennot
jotka ovat tulossa takaisin palvelimelta asiakkaalle
ilman tönäisi noin Chromen kehittäjä
työkaluja muuten clunkier käyttöliittymä.