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ä.