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.