Előadó: Most merülés az elosztó kódot és nézd meg, összefüggésben amelyben a kódot írsz fog működni. Végén a nap, fogsz végre a teljes egészében a webszerver. De már feltéve, Ön a csontváz kód, amely valamilyen funkciót, különösen a kapcsolódó hálózatok. Vessünk egy pillantást. Tehát itt teteje felé A fájl egy rakás A szolgáltatás tesztelése makro követelményeknek. Most ez csak egy eleme a C, ahol szerint egy csomó embert oldalak meg kell adnunk néhány ezek az állandók, hogy igaz legyen vagy még konkrét számokat, hogy akkor a hozzáférést bizonyos funkciókhoz. Ellenkező esetben akkor lesz a be nem jelentett és akkor nem férnek hozzá. Ezért csináltam ezt a útján Az olvasó a man oldalakat. Most lent, a vonalak 15 és 17, akkor Van egy csomó korlátok nyilvánította. És mi kölcsönzött ezeknek egy népszerű web szerver úgynevezett Apache. És ezek csak számok mennek tetejébe száma bájtok, amelyek jogosultak különböző összefüggésekben a HTTP request A böngésző, küldhet nekem. Ezután definiáljuk oktettnél. Most egy oktett csak egy divatos módon A mondván egy byte, vagy nyolc bit. Kiderült, hogy a múlt egy byte Nem feltétlenül nyolc bit, így oktettben mindig nyolc bit. Tehát ebben az esetben mi már elfogadott mi közös a hálózati világába hív nyolc byte egy oktett. Itt adtam meg, hogy oktettnél lesz 512, hogy ugyanúgy, mint a kriminalisztika amikor azt olvassuk egy csomó byte-os, itt is, fogunk olvasni a csomó oktett egy időben. Next egy csomó header fájlokat. Hogyan tudom, hogy ezeket a? Hát én egyszerűen csak olvasni a férfi oldalakon számos funkciót hogy fel fogjuk használni ebben az elosztó kódot, és tartalmazza azokat, Azt az utasítást kapta, hogy. És most van az adat típusát. Már nyilvánították oktetben egy char. És majd meglátjuk, hogy később ez használják szerte a kódot. És mi már nyilvánították csomó prototípusok, és megyünk keresztül gyorsan Minden ilyen funkciókat. Végül, és talán a legtöbb Fontos, hogy a bánja ezen a ponton a történet, hogy van vannak, valójában egy egész csomó globális változók a tetején a fájl, gyökér, CFD, SFD, kérésére, a fájl és a test. Most általában, a sok globális változók, illetve globális változók egyáltalán, nem a hátsó gyakorlat. De kiderül, mi is egy nevű technológia jelkezelés később a kódot, amely lehetővé teszi számunkra, hogy érzékeli, ha a felhasználó az valami mint a CTRL C és állítsa le A kiszolgáló kecsesen. És annak érdekében, hogy ezt, hogy kecsesen és valójában szabad memóriát, mi szükség van hozzáférése ezek a globális változók. És most vessünk egy pillantást a fő, amely hajtja a teljes egészében ezt a programot. Először is, a tetején itt Van egy hiba száma változó hogy a jelek szerint nem Van egy fajtája, de ez mert valójában meghatározott nevű fájlt error errno.h amely tartalmazza feljebb. Ha ezt az ember hibakod ténylegesen definícióját lásd e dolog, látni fogod, hogy ez egy speciális globális változó, van beállítva egy csomó A funkciók nem írt Az általunk, de a szerzők a Linux és más rendszerek állítása Egy szám, amely a változó amikor valami elromlik, így globálisan kitalálni, hogy mit csinált rosszul. Most lent megjelenik egy új technika talán használ getopt, olyan funkció, amely segít parse parancsot argumentumaiba, hogy mi nem kell bajlódnia időhúzás kitalálni hogyan lehet feldolgozni valamit, mint 8080, vagy kötőjel p, vagy gondolatjel h segítséget kérni. getopt lényegében ezt teszi számunkra. Lásd a man oldalt további. Ezután teszünk egy kis hiba Ellenőrizzük, hogy hogy a port száma belül A megadott tartományon a spec. Ezután megjelenik egy függvény hívása kezdeni, amelyek definíciója fogunk nézd meg egy pillanatra, és mint a neve sugallja, ez elindítja a webszervert. Itt van egy hívás, hogy egy függvény nevezett jelet, amely azt mondja, ha és amikor hallod kontroll C-re A felhasználó billentyűzet, megy előre, és hívja olyan függvény is kezelőt, amely folyik hogy végül tisztán a dolgokat, és hagyja abba a szerver. Az alábbiakban ez az, amit úgy tűnik, hogy egy végtelen ciklusba, az első sorban, amely hatékonyan egy hívást hogy olyan függvény is visszaállítása, amelyet mi magunk végrehajtja a későbbiekben annak érdekében, szabadítson fel a globális Államokban. Ezután egy sor kód, amely feltételesen ellenőrzi, a visszatérés értéke csatlakoztatott. Most csatlakozik néz ki, mint egy állítmány, valamit, ami visszaadja igaz vagy hamis. És igen, de van valami különleges csatlakoztatott hogy ez egy blokkoló hívás. Ez lesz ott ülni és várni amíg a felhasználó böngészőjének megpróbál csatlakozni ehhez a web szerver és csak ezt követően lesz vissza igaz vagy hamis, hogy mi járjunk a belsejében ez, ha a nyilatkozatot. Egyszer ott, észre ezt a funkciót a nevű függvény értelmezési, amit írtam, amely értelmezi az összes oktettre, minden A bájt érkező böngésző a szerverre, hogy mi is kézzel vissza végül egy értéket egy e globális változót tárolja a byte-ban csak fejlécének, hogy kérést, nem a test ha lenne valójában egy testet hozzá. Most lent elkezdünk elemezni azokat a fejlécek kivonat egy részhalmazát az információ hogy törődünk. Pontosabban, egy a mellett, az első akarta kérni vonal, amely a Csak, hogy az első sorban, hogy remélhetőleg mond valamit, mint get perjel, vagy valami útnak, majd HTTP 1.1. Mi ezzel a metafora Egy tűt a szénakazalban keresni különösen karakter vagy címeket. És valóban, van egy száma funkciók disztribúciós kódot hogy te is hasznosnak bizonyulhatnak ha keres különösen értékeket. Végső soron azt másolni ezeket a byte- egy változó nevű sort, amely észre is volt, most már adható, a stack útján egy dinamikusan méretű tömbben. És mi szándékosan próbálják Kerülendő hívja malloc mert újra, mert Ellenőrző C lenni potenciális ennek a programnak, amit Nem akarom, hogy ezt a kódot hirtelen a felhasználó által megszakítva ütő Kontroll C, melynek eredménye az, hogy talán nem lesz esélye ingyen valamit, amit malloced. Szóval próbálok a lehető legtöbb A verem tudok itt. Következik, egy csomó, hogy dos. A specifikáció fejti hogy pontosan mi várható itt, de a hozzászólások kapsz egy csipetnyi mi vár ránk. Először is ki kell érvényesíti a kérést vonalon és győződjön meg róla, hogy úgy néz ki, mint a specifikációk nyelvtan, hogy úgy mondjam, azt mondja, hogy kellene. Ezután csomagold ki valamit nevű lekérdezés, a cucc után egy kérdőjel, mint a láttuk a Google például futólag egy HD paramétert. Ezután összefűzni össze a gyökér a webkiszolgáló A path ez a a kérésnek első sorban és ezek képezik a teljes elérési útját A kívánt file keresni. Ezt követően fogunk győződjön meg róla, hogy a fájl létezik és olvasható. És akkor mi lesz kicsomagolni fájl kiterjesztését, a .html vagy a .php, vagy valami hasonló kiterjesztése ez a Nagyon végén a szöveg kért. Következik egy egész csomó kódot írtunk hogy valóban létre PHP generált tartalom az Ön számára. Dióhéjban ez a code veszi a nevét A kívánt fájlt PHP értelmezni. Elhaladunk azért valamivel úgynevezett a csövet a PHP interpreter. Menj vissza a válasz, mintha A válasz volt egy fájlt magát. És akkor mi végighaladni, hogy fájl bájt, húzza őket egy puffer hogy így végső soron nyomtassa ki őket. Valójában, az összes ilyen felszólítja ide dprintf lehetővé teszi, hogy nyomtatni valamit nevű fájl leíró, amely csak egy egész szám , ami egy fájl. Nagyon hasonló szellemben, de alapvetően különbözik egy fájlt csillagos pointer. Figyeljük meg, hogyan lehet használni, mint a szintaxis printf itt, így én is dinamikusan helyezze olyasmi, mint a hossza Az értéke egy HTTP fejléc úgynevezett Content-Length. És végül használtam funkciót jogot, hogy ténylegesen írni A testület a kérést. Sajnos csak végre támogatja a dinamikusan generált PHP fájlokat. Mi nem hajtotta végre támogatása statikus fájlokat, mint a gif, és JPEG, és CSS és HTML fájlokat. Hogy sajnos, marad meg hogy válaszoljon a kliens cél ennek köze. Szóval ott megtalálod, hogy van Nem sok inspirációt belül a blokk, de ha egy kicsit feljebb, hogy milyen mentünk a tolmácsolási PHP kódot, A funkciók fogsz használni egy kicsit más. Sőt, lehet kölcsönözni néhány, a funkcionalitás Talán a kriminalisztika problémát meg, mert A nap végére csak annyit kell nem itt van, ha tudod, hogy mit fájlt megnyitni és ha tudod, hogy az úgynevezett MIME-típus vagy a tartalom típusa, el kell olvasni a bájtok és valahogy köpni őket vissza. És most Ismerkedj meg az fájl egyéb funkciók. Első csatlakozik, amely egyszerűen igazat ad vissza amikor végre meghallja a kapcsolat egy felhasználótól. Következik a hibát. Hiba, eközben függvényében mi írta kezelni az összes különböző 400 és 500 HTTP státusz kódokat, hogy érdemes küld vissza a felhasználónak, valamint egy szabványos üzenet. Következik a terhelést, különösen húsos funkció, amelynek célja az életben van, hogy olvasni egy fájlt csillagos mutató A A fájl tartalma egy globális buffer hogy kijelentette világszerte a fenti [? fő. ?] Ez egy kicsit bonyolultabb, mert kell olvasni a bájt fájl de nézd meg az egyes iterációs hogy mi már hit a végén a fájl vagy valami más baj van. És az általunk használt realloc, hogy győződjön meg arról, hogy amit buffer mi használ növekszik és egyre csak nőtt, és mindig tartózkodó előtt a bájtok számát hogy meg kell, hogy beleférjen ott. Handler, eközben A funkció, hogy lesz nevű útján, amelynek bejegyzett kontroll C, mint egy jel hogy szeretnénk, hogy elkapjam. Figyeljük meg itt handler hogy végső soron hívások megállítani, ami persze megáll a webszerver. És sajnos, keresés nem hajtják végre. Ebben szellem, ez egy meglehetősen egyszerű funkció. Mivel a fájl kiterjesztését, szüksége vissza ez az úgynevezett MIME típusú vagy a tartalom típusát. És mi adja a specifikáció hogy mi mapping kell lennie. De meg kell lefordítani Végső soron a c-kódot. Következik a mi hasonlóan tartalmas funkció nevű parse, amelynek célja az életben az, hogy olvasni, nem egy fájlból, de a hálózati kapcsolat. Különösen, beolvasni és feldolgozni a HTTP kérés, hogy jött egy böngészőből hogy a szerver, hogy végső soron tudjuk feldolgozni éppen a fejlécét a kérelmet vonal és visszafordítására Önnek útján egy globális puffert tartalmaz, amely azt a fenti nyilatkozat [? fő. ?] Alaphelyzetbe, eközben egy funkciót, hogy mi határozza hogy lesz úgynevezett iteratív belül A fő minden alkalommal fogsz indulásra készen hallgat Egy új kapcsolat így mindig tudjuk, az állam a mi változók és így már azt is megszabadult minden memória Lehet osztottak Egy korábbi hálózati kapcsolat. A következő a sorban kezdeni, az funkció, amit írt amely tartalmaz egy egész Sok hálózati kód hogy végül elindítja a webszervert. Utolsó akár a funkciót nevű megállója, amely pontosan ezt teszi, akkor megáll a webszerver. De előbb felszabadul egy olyan memória hogy még kiosztásra került. De ez végül is kéri exit anélkül, hogy visszatér-szabályozás a fő funkciója. Végül, az egyik a legfontosabb technikák végrehajtása során webszerver lesz egy kis próbálgatással, amelynek egy böngésző ablakot nyitva A jobb oldalon és egy terminál ablakot balra, a szerverek konzol ablakot, így Láthatjuk az üzeneteket, amelyek jelenik meg a képernyőn. De még jobb lenne egy harmadik ablak, a második terminál ablak, amelyben a Telnet használatával, a használati amelyre írják a spec. És Telnet csak egy nagyon egyszerű hálózati program amely lehetővé teszi, hogy úgy tesznek, mintha egy böngészőt az egyik ablakban beszélgetés közben a másik ablakba. Így láthatjuk Pontosan a szöveges parancsok hogy jönnek vissza a szervertől a kliensek anélkül, hogy dugta körül Chrome fejlesztői eszközöket az egyébként clunkier felület.