Uzstājas: Tagad pieņemsim dive uz sadales kodu
un to apskatīt kontekstā kurā kods tu rakstītu
tiks darbojas.
Beigās, dienā, jūs gatavojas īstenot
veselums web serveri.
Bet esam nodrošinājuši jūs ar skeletu
kods, kas ir dažas funkcijas, īpaši saistīti ar tīklu.
Pieņemsim to apskatīt.
>> Tātad, šeit uz augšu faila ir ķekars
par funkciju pārbaudītu makro prasībām.
Tagad tas ir tikai iezīme c, kur saskaņā ar ķekars cilvēks lapas
Jums ir definēt dažus šīs konstantes, lai būtu patiesība
vai būt pat īpašas skaitļi arī tā, ka Jums ir piekļuvi noteiktām funkcijām.
Pretējā gadījumā tie būs nedeklarētu un jums nebūs pieejams.
Tāpēc es esmu darījusi to, ko veidā lasīšanas cilvēks lapas.
Tagad lejā, it līnijas 15 līdz 17, mēs
ir visai ķekars limitu deklarēto.
>> Un mēs esam aizņēmušies šo no populārs web serveri sauc Apache.
Un tie ir tikai numuri, kas gatavojas
ir ierobežot kopējo skaitu baitu, kas ir atļauts
dažādos kontekstos par HTTP pieprasījumu ka pārlūks ir atļauts sūtīt man.
Tālāk, mēs definējam oktetus.
Tagad oktets ir tikai iedomātā veids kā pateikt baitu vai astoņi biti.
Izrādās vakardienas baitu bija ne vienmēr ir astoņi biti,
tāpēc okteta vienmēr ir astoņi biti.
Tātad šajā gadījumā mēs esam pieņēmusi kas ir izplatīts tīklu
pasaule zvanot astoņus baitus baits.
>> Šeit es esmu norādīts, ka okteti būs 512, lai līdzīgi kā kriminālistikas
kad mēs lasām ķekars bytes laikā, arī šeit,
mēs ejam, lai lasītu ķekars okteti vienlaicīgi.
Nākamais visu ķekars header failus.
Kā es zinu, lai iekļautu šo?
Nu es vienkārši izlasīju cilvēks lapas funkciju virknes
ka mēs izmantosim šajā distribūcijā kodu un iekļaut tiem
Man bija uzdots.
>> Un tagad mums ir datu tipu.
Mēs esam pasludināja par oktets būt char.
Un mēs redzēsim vēlāk, ka tas ir izmantota visā kodu.
Un mēs esam deklarētas viss ķekars prototipu,
un mēs staigāt ātri cauri katru no šīm funkcijām.
Visbeidzot, un, iespējams, svarīgi paturēt
prātā šajā brīdī stāsts ir tāds, ka tur
ir, faktiski visa ķekars globālo mainīgo
augšpusē faila, saknes, CFD, SPD, lūgums, failu un ķermeņa.
>> Tagad vispār, izmantojot tik daudz globāla mainīgie, vai globālie mainīgie vispār,
nav atpakaļ prakse.
Bet izrādās, mēs esam arī izmantojot tehniku, ko sauc signālu apstrāde vēlāk
kodu, kas ļauj mums noteikt, kad lietotājs hits kaut ko
piemēram, CTRL C un jāslēdz serveris graciozi.
Un, lai to izdarītu graciozi un patiesībā atbrīvotu atmiņu,
mums ir vajadzīga piekļuve šie globālie mainīgie.
>> Un tagad pieņemsim to apskatīt galvenais, kas vada visus ar šo programmu.
Pirmkārt, augšpusē šeit mēs ir kļūdas numurs mainīgo
kas, šķiet, nav ir veids, bet tas ir
tāpēc, ka tas ir faktiski definēts failā ar nosaukumu
kļūda errno.h kas ir iekļauta augstāk.
Ja jūs cilvēks errno faktiski skatīt definīciju par šo lietu,
jūs redzēsiet, ka tas ir īpašs globālo mainīgo, ka
ir noteikts visu ķekars funkciju nav rakstīts
mums, bet autori Linux un citas sistēmas, lai faktiski noteikt
numuru, lai šo mainīgo, kad kaut ko noiet greizi tā, ka jūs varat globāli
izdomāt, ko darīja noiet greizi.
>> Tagad lejā jūs redzēsiet jaunu paņēmiens varbūt izmantojot getopt,
funkcija, kas palīdz parsēt komandu argumentus, lai mēs to nedara
jāraizējas izšķērdēt laiku norādītas , kā parsēt kaut ko līdzīgu, 8080,
vai domuzīme p, vai domuzīme h, lai saņemtu palīdzību.
getopt būtībā tas, ka mums.
Skatīt man lapu vairāk.
>> Tālāk, mēs mazliet kļūdas pārbaudes, lai pārliecinātos, ka
ka porta numurs ir robežās norādīts diapazons spec.
Tālāk, mēs redzam zvanu funkcijai sāktu, kura definīcija mēs
apskatīt kādā brīdī, un kā tā nosaukums ierosina, tas sāk web serveri.
Te mums ir zvanu funkciju sauc signāls, kas saka:
ja un kad jūs dzirdat Control C no lietotāja tastatūra, iet uz priekšu un zvanu
funkcija, ko sauc kopējs, kas notiek, galu galā tīri lietas uz augšu un stop
serveris.
>> Zemāk tas ir tas, kas, šķiet, ir bezgalīga cilpa, pirmā līnija, kuras
efektīvi ir zvans uz funkciju sauc
reset, kas mēs paši īstenot vēlāk, lai
lai atbrīvotu kādu no mūsu pasaules valstīm.
Pēc tam ir līnija kods, kas nosacīti
ir pārbaudīt atgriešanos vērtība saistīts.
Tagad savienotas izskatās predikāta, kaut kas atgriež patiess vai nepatiess.
Un tas, bet tur ir kaut kas īpašs, kas savienots
jo tas ir bloķēšanas zvanu.
Tas tur sēdēt un gaidīt līdz lietotāja pārlūkprogrammā
mēģina izveidot savienojumu ar šo web serveri un tikai tad būs tas
atgriešanās patiess vai nepatiess, lai mēs turpinātu uz iekšpusi šī ja ​​paziņojums.
>> Kad tur, ievērosiet šo funkciju, lai funkcija sauc Parsēšanas, kuru mēs rakstījām,
kas parses visas okteti, visi no baitu nāk no pārlūka
ar serveri, lai mēs varētu ar roku Jūs atpakaļ galu galā vērtība uz vienu
Šo globālo mainīgo, ka uzglabātas visas baitu tikko
galvenes, kas pieprasījums, nevis ķermenis
ja tur bija tiešām organismam to.
>> Tagad lejā mēs sākam izanalizēt šos galvenes, lai iegūtu
apakškopa informācijas ka mums rūp.
Konkrēti, per specifikāciju, mēs vispirms
gribēja pieprasīt līnija, kas ir tikai, ka pirmā līnija, kas
cerams, saka kaut ko līdzīgu get slash vai kādu ceļu un pēc tam HTTP 1.1.
Mēs izmantojam šo metaforu par adatu siena kaudzē
meklēt īpaši chars vai adreses.
Un tiešām, tur ir vairāki funkcijas mūsu izplatīšanas kodu
ka jūs arī varētu atrast noderīgu , meklējot konkrētu vērtību.
>> Galu galā, mēs pārkopēt baiti par mainīgo sauc līniju,
kas paziņojums, arī mēs esam piešķirti uz skursteņa
Izdarot dinamiski lieluma masīvs.
Un mēs apzināti cenšamies lai izvairītos no zvana malloc
jo atkal, jo of Control C ir
potenciāls iezīme šīs programmas, mēs nevēlos, lai būtu šo kodu pēkšņi
pārtrauca lietotāja hitting Kontrole C, kura rezultāti
ir tā, ka es varētu ne mazākās iespējas par brīvu kaut ko es esmu malloced.
Tāpēc es cenšos izmantot tik daudz no skursteņa ir varu šeit.
>> Nākamā, visu ķekars to dos.
Specifikācija izklāstīt par tieši to, kas ir šeit gaidīts,
bet komentārus sniegt jums mājienu, kas ir priekšā.
Jums vispirms nepieciešams apstiprinātu pieprasījuma līniju
un pārliecinieties, ka tā izskatās specifikācijas gramatika, tā sakot,
saka, ka tā vajadzētu.
Pēc tam ir nepieciešams, lai iegūtu kaut ko sauc vaicājumu, sīkumi out
pēc jautājuma zīmes, piemēram, mēs redzējām ar mūsu Google piemēru
garāmejot HD parametru.
Tad mēs saķēdēt kopā sakne web serveri
ar ceļu, kas ir kas šis lūgums pirmā rinda
un veido pilnu ceļu failu mēs gribam meklēt.
>> Pēc tam, mēs ejam, lai pārliecinātos, ka ka fails pastāv un ir lasāms.
Un tad mēs ejam, lai iegūtu tās faila paplašinājums, html vai php,
vai kādu šāds pagarinājums, ka ir pie pašām beigām pieprasīto virkni.
Nākamā ir vesels ķekars koda mēs rakstījām
faktiski radītu PHP radīts saturu jums.
In Īsumā, šis kods notiek nosaukumu
faila jūs vēlaties PHP interpretēt.
Mums iet to ar kaut ko sauc cauruli PHP tulks.
Saņemt atpakaļ atbildi, it kā atbilde bija fails pats.
Un tad mēs atkārtot pār ka fails s baiti, velkot tos visus vienā bufera
lai mēs varētu galu galā izdrukāt tos.
>> Patiešām, visi šie aicina šeit dprintf
ļauj mums drukāt kaut ko sauc failu deskriptors, kas
ir tikai skaitlis kas apzīmē failu.
Ļoti līdzīgs garā, bet būtiski atšķiras no faila
zvaigzne rādītājs.
Paziņojums, kā jūs varat izmantot, piemēram, sintakse printf šeit, lai es varētu dinamiski
ievietot kaut ko līdzīgu garumā par vērtību HTTP header
sauc Content-garums.
Un galu galā es izmantoti funkcija tiesības faktiski rakstīt
organismam pieprasījumu.
>> Diemžēl, mēs tikai jāīsteno atbalsts dinamiski
ģenerē PHP faili.
Mēs neīstenoja atbalstu statiskā failus, piemēram, GIF un JPEG,
un CSS un HTML failus.
Tas, diemžēl, ir uzticēta jums reaģēt uz klienta mērķim
to darīt.
Tātad tur jūs atradīsiet, ka tur ir nav daudz iedvesma šajā blokā,
Bet, ja jūs nedaudz augstāk, kā mēs devāmies par tulkošanas PHP kodu,
funkcijas jūs izmantojat ir nedaudz atšķirīgs.
>> Patiesībā, jūs varat aizņemties daži no funkcionalitāti
varbūt no kriminālistikas Problēma komplekts, jo
beigās, dienā viss, kas jums ir nepieciešams, lai darīt, šeit ir, kad jūs zināt, ko fails atvērts
un, kad jūs zināt, tas ir tā sauktais MIME tipa vai satura tips,
jums ir nepieciešams, lai izlasītu šajos baitos un kaut kā iespļaut tos atpakaļ ārā.
>> Un tagad tūre šis faila citas funkcijas.
Up vispirms ir savienots, kas vienkārši atgriež patiess
kad tas beidzot dzird savienojums no lietotāja.
Nākamā ir kļūda.
Kļūda, tikmēr, kā funkcija mēs rakstīja rīkoties visas dažādu 400
un 500 HTTP statuss kodi, ka jūs varētu vēlēties
lai nosūtītu atpakaļ uz lietotāja, kopā ar standarta ziņojumu.
>> Nākamā ir slodze, īpaši gaļīgs funkcija, kuras mērķis dzīvē
ir nolasīt no faila zvaigzne Pointer saturs faila uz pasaules buferis
ka mēs deklarētā pasaulē Iepriekš [? galvenais. ?]
Tas ir mazliet sarežģīts, jo mēs lasīt baiti no lietas materiāliem
bet pārbaudīt katrā atkārtojuma vai mēs esam jau
hit beigām faila vai kaut kas cits ir nogājis greizi.
Un mēs izmantojam realloc, lai pārliecinātos, ka kāds buferis mēs izmantojam pieaug
un aug un aug un vienmēr uzturas pirms baitu skaitu
ka mums ir nepieciešams, lai ietilptu tur.
Handler, tikmēr, ir funkcija, kas izpaužas
sauc veidā, kam reģistrēta Control C kā signāls
ka mēs vēlamies, lai pārtvertu.
Ievērojiet šeit apdarinātājs ka tas galu galā
zvani apstāties, kas, protams, aptur web serveri.
Un diemžēl, lookup netiek īstenots.
Garā, tas ir diezgan vienkārša funkcija.
Ņemot vērā, faila paplašinājums, tai ir vajadzīga atgriezties tas ir tā sauktais MIME
tipa vai satura tips.
Un mēs norādīt specifikācijā ko tas kartēšana jābūt.
Bet jums ir nepieciešams tulkot tas galu galā c kodu.
>> Nākamā ir mūsu tikpat saturīgs funkcija sauc Parsēšanas, kuru dzīves jēgu
ir lasīt, nevis no faila, bet no tīkla savienojumu.
Konkrēti, lasot un analizējot HTTP pieprasījums, kas ir nāk no pārlūka
lai arī tā, ka serveri galu galā mēs varam apstrādāt
tikai pie sadalītājiem šajā pieprasījumā line un atgriezties tiem pie jums
veidā globālās buferi, mēs būtu deklarējuši iepriekš [? galvenais. ?]
>> Reset, tikmēr, ir funkcija, kas mēs definējam
kas izpaužas sauc iteratīvi iekšā Galvenā katru reizi, kad jūs gatavojaties
gatavi sākt klausīties par jaunu pieslēgumu
lai mēs vienmēr zinām stāvokli mūsu mainīgajiem
un tā, ka mēs esam arī atbrīvoja visas atmiņas, kas
iespējams, ir piešķirti iepriekšējais tīkla savienojuma.
Nākamā ir jāsāk, funkcija, kas mēs rakstījām
ka satur vienu veselumu no tīkla koda daudz
kas galu galā sāk web serveri.
>> Pagājušajā up ir funkcija sauc stop, kas
dara tieši to, ka to aptur web serveri.
Bet vispirms tas atbrīvo visas atmiņas kas joprojām ir iedalīta.
Bet tas galu galā prasa iziet pat atgriežoties kontroli
mūsu galveno funkciju.
Galu galā, kas ir viens no Svarīgākie metodes
, īstenojot šo tīmekļa serveris būs mazliet izmēģinājumu un kļūdu,
kam ir viena pārlūka loga atvēršanos pa labi un termināļa logu at
kreisi, serveri konsole logu, lai jūs
var redzēt ziņas, kas ir ir redzams uz ekrāna.
>> Bet vēl labāk būtu trešā logs, otro spailes logs,
kurā jūs izmantojat Telnet, izmantošanas par kuru tiek noteikts spec.
Un Telnet ir tikai ļoti vienkāršu tīkla programma
kas ļauj jums izlikties būt pārlūks vienā logā
bet runājot ar otru logu.
Tādā veidā jūs varat redzēt tieši tekstuālajā komandas
kas nāk atpakaļ no servera uz klienta
bez poking ap Chrome attīstītājs
instrumenti citādi clunkier interfeisu.