1 00:00:00,000 --> 00:00:09,647 2 00:00:09,647 --> 00:00:11,730 SPEAKER: Nüüd sukelduda jagamisvõrku koodi 3 00:00:11,730 --> 00:00:14,470 ja kui heita pilk kontekstis kus koodi kirjutada 4 00:00:14,470 --> 00:00:15,780 läheb tööle. 5 00:00:15,780 --> 00:00:17,350 Lõpus päeval, sa lähed, et rakendada 6 00:00:17,350 --> 00:00:18,710 kogu veebiserver. 7 00:00:18,710 --> 00:00:20,460 Aga me oleme andnud Teile skelett 8 00:00:20,460 --> 00:00:24,090 kood, mis on teatud funktsioone, Eriti võrgustikega seotud. 9 00:00:24,090 --> 00:00:25,390 Võtame pilk. 10 00:00:25,390 --> 00:00:27,560 >> Nii siin ülaosa suunas faili on kamp 11 00:00:27,560 --> 00:00:30,020 funktsiooni testida makro nõuetele. 12 00:00:30,020 --> 00:00:33,570 Nüüd see on lihtsalt omadus c, mille kohaselt vastavalt kamp man-lehekülgi 13 00:00:33,570 --> 00:00:36,410 teil määratleda mõned neid konstante, et olla tõsi 14 00:00:36,410 --> 00:00:39,920 või olla isegi konkreetsed numbrid, et teil on teatud funktsioone. 15 00:00:39,920 --> 00:00:42,470 Vastasel juhul saad deklareerimata ja sa ei pääse. 16 00:00:42,470 --> 00:00:45,340 Nii et ma olen seda teinud teel lugemine man-lehekülgi. 17 00:00:45,340 --> 00:00:48,410 Nüüd allapoole, in read 15 kuni 17, siis 18 00:00:48,410 --> 00:00:50,550 on terve hunnik piirid deklareeritud. 19 00:00:50,550 --> 00:00:53,370 >> Ja me oleme laenanud neid alates populaarne web server nimega Apache. 20 00:00:53,370 --> 00:00:54,650 Ja need on vaid numbrid, mis hakkavad 21 00:00:54,650 --> 00:00:56,810 kork koguarv baitide et on lubatud 22 00:00:56,810 --> 00:01:01,930 erinevates kontekstides HTTP taotluse et brauser on lubatud saata mulle. 23 00:01:01,930 --> 00:01:04,310 Edasi me defineerime oktetti. 24 00:01:04,310 --> 00:01:07,790 Nüüd oktett on lihtsalt fancy viis öelda bait, või kaheksa bitti. 25 00:01:07,790 --> 00:01:10,720 Selgub ka Läinud bait ei pruugi kaheksa bitti, 26 00:01:10,720 --> 00:01:12,339 nii oktett on alati kaheksa bitti. 27 00:01:12,339 --> 00:01:14,880 Nii et kui me oleme vastu Mis on levinud võrgustiku 28 00:01:14,880 --> 00:01:17,410 maailma kutsudes kaheksa baiti oktett. 29 00:01:17,410 --> 00:01:21,840 >> Siin ma olen täpsustada, et oktetti hakkab 512, nii et palju nagu kohtuekspertiisi 30 00:01:21,840 --> 00:01:24,170 kui loeme kamp baiti ajal ka siin 31 00:01:24,170 --> 00:01:27,390 me ei kavatse lugeda hunnik oktetti korraga. 32 00:01:27,390 --> 00:01:28,922 Järgmine terve hunnik päisefailiga. 33 00:01:28,922 --> 00:01:30,255 Kuidas ma tean, et lisada need on? 34 00:01:30,255 --> 00:01:32,730 Noh ma lihtsalt lugeda mees lehekülgede arv funktsioonid 35 00:01:32,730 --> 00:01:35,620 et me kasutame selles jaotus kood ja lisada need 36 00:01:35,620 --> 00:01:37,390 Ma tehti ülesandeks. 37 00:01:37,390 --> 00:01:39,090 >> Ja nüüd on meil andmetüüp. 38 00:01:39,090 --> 00:01:41,470 Oleme kuulutanud oktett olema char. 39 00:01:41,470 --> 00:01:44,040 Ja me näeme hiljem, et see on kasutatakse kogu koodi. 40 00:01:44,040 --> 00:01:45,670 Ja me oleme kuulutanud terve hulk prototüüpe, 41 00:01:45,670 --> 00:01:47,961 ja me käime kiiresti läbi kõik need funktsioonid. 42 00:01:47,961 --> 00:01:50,400 Lõpuks ja võib-olla kõige oluline meeles 43 00:01:50,400 --> 00:01:52,520 pahanda siinkohal lugu on see, et seal 44 00:01:52,520 --> 00:01:54,520 on tegelikult kogu hunnik globaalsed muutujad 45 00:01:54,520 --> 00:02:00,430 ülaosas faili root, CFD, SFD, taotluse faili ja keha. 46 00:02:00,430 --> 00:02:03,960 >> Nüüd üldiselt, kasutades nii palju globaalse muutujate või globaalseid muutujaid üldse 47 00:02:03,960 --> 00:02:05,280 ei ole tagasi praktikas. 48 00:02:05,280 --> 00:02:09,090 Aga selgub, et me ka kasutades tehnikat nimega signaali käitlemise hiljem 49 00:02:09,090 --> 00:02:11,930 kood, mis võimaldab meil tuvastada, kui kasutaja tabab midagi 50 00:02:11,930 --> 00:02:15,080 nagu CTRL C ja sulgeda server nõtkelt. 51 00:02:15,080 --> 00:02:18,240 Ja selleks, et seda teha nõtkelt ja tegelikult vaba mälu, 52 00:02:18,240 --> 00:02:20,800 me peame olema juurdepääs Selliste globaalsete muutujate. 53 00:02:20,800 --> 00:02:24,510 >> Ja nüüd võtame pilk peamine, mis ajab kogu see programm. 54 00:02:24,510 --> 00:02:27,720 Esiteks ülaosas siin on viga number muutuja 55 00:02:27,720 --> 00:02:29,570 et ilmselt ei on tüüp, kuid see on 56 00:02:29,570 --> 00:02:31,500 sest see on tegelikult määratletud fail nimega 57 00:02:31,500 --> 00:02:34,800 viga errno.h mis sisaldub kõrgemal. 58 00:02:34,800 --> 00:02:38,780 Kui sa inimesele errno tegelikult vaata definitsiooni see asi, 59 00:02:38,780 --> 00:02:41,230 näete, et see on eriline globaalse muutuja, mis 60 00:02:41,230 --> 00:02:43,350 määrab terve hunnik funktsioone ei kirjutanud 61 00:02:43,350 --> 00:02:48,730 Meie poolt, kuid autorite poolt Linux ja muude süsteemide tegelikult loodud 62 00:02:48,730 --> 00:02:52,400 number muutuja, kui midagi läheb valesti, nii et saate kogu maailmas 63 00:02:52,400 --> 00:02:54,830 aru saada, mida tegid valesti minna. 64 00:02:54,830 --> 00:02:58,540 >> Nüüd allapoole näete uus tehnikat kasutades võib-olla getopt, 65 00:02:58,540 --> 00:03:01,790 funktsioon, mis aitab sõeluda käsk argumente nii, et meil ei ole 66 00:03:01,790 --> 00:03:05,540 pea vaeva raisata aega figuring kuidas sõeluda midagi 8080, 67 00:03:05,540 --> 00:03:08,350 või sidekriips p või sidekriips h abi saada. 68 00:03:08,350 --> 00:03:10,300 getopt sisuliselt teeb seda meie eest. 69 00:03:10,300 --> 00:03:11,750 Vaata mees lehel rohkem. 70 00:03:11,750 --> 00:03:13,960 >> Järgmine, mida me teeme natuke viga kontrollides veenduda 71 00:03:13,960 --> 00:03:17,420 et port number kuulub määratud vahemik spec. 72 00:03:17,420 --> 00:03:20,240 Seejärel näeme kõne funktsioon alustada, mille määratlust me 73 00:03:20,240 --> 00:03:24,040 vaadata ühe hetkega, ja nagu nimigi ütleb, see hakkab veebiserver. 74 00:03:24,040 --> 00:03:26,960 Siin on meil kõne funktsioon nimetatakse signaali, mis ütleb, 75 00:03:26,960 --> 00:03:30,750 kas ja kui sa kuuled kontroll C alates kasutaja klaviatuur, edasi minna ja helistada 76 00:03:30,750 --> 00:03:34,650 funktsiooni nimetatakse handler et läheb lõpuks puhas asju ja lõpetage 77 00:03:34,650 --> 00:03:35,500 server. 78 00:03:35,500 --> 00:03:39,470 >> Selle all on see, mis tundub olevat lõputu silmuse, esimene rida, mis 79 00:03:39,470 --> 00:03:41,660 tegelikult on kõne funktsioon, mida nimetatakse 80 00:03:41,660 --> 00:03:45,110 nullitud, mis me ise rakendama hiljem, et 81 00:03:45,110 --> 00:03:47,470 vabastamiseks mõned meie globaalse riikides. 82 00:03:47,470 --> 00:03:50,480 Pärast seda on rida kood, mis tinglikult 83 00:03:50,480 --> 00:03:52,576 kontrollib tagastamise väärtus ühendatud. 84 00:03:52,576 --> 00:03:55,700 Nüüd ühendatud näeb välja nagu predikaat, midagi, mis tagastab tõene või väär. 85 00:03:55,700 --> 00:03:58,040 Ja see juhtub, kuid seal on midagi erilist ühendatud 86 00:03:58,040 --> 00:03:59,960 et see blokeerimine kõne. 87 00:03:59,960 --> 00:04:03,180 See seal istuda ja oodata kuni kasutaja brauser 88 00:04:03,180 --> 00:04:05,860 püüab ühendada see web server ja alles siis algab see 89 00:04:05,860 --> 00:04:10,160 tagasi õige või vale, nii et me lähtume sisemusse seda, kui avalduse. 90 00:04:10,160 --> 00:04:13,870 >> Seal märkate seda funktsiooni funktsiooni nimetatakse sõeluda, mida me kirjutas, 91 00:04:13,870 --> 00:04:17,230 mis sõelub kõik oktetti, kõik baitide pärit brauseris 92 00:04:17,230 --> 00:04:21,010 serverisse, et saaksime käsi sulle tagasi lõpuks väärtust ühe 93 00:04:21,010 --> 00:04:24,420 Nende globaalsed muutujad, mis kauplustes kõik baiti lihtsalt 94 00:04:24,420 --> 00:04:26,630 päised, et taotluse, ei keha 95 00:04:26,630 --> 00:04:28,920 kui ei oleks tegelikult keha ta. 96 00:04:28,920 --> 00:04:32,980 >> Nüüd allapoole hakkame sõeluda need pealkirjad ekstrakti 97 00:04:32,980 --> 00:04:35,490 alamhulga informatsiooni et me hoolime. 98 00:04:35,490 --> 00:04:37,740 Täpsemalt kohta spetsifikatsioon, me esimest korda 99 00:04:37,740 --> 00:04:40,580 tahtsin küsida line, mis on lihtsalt, et kõige esimene rida, mis 100 00:04:40,580 --> 00:04:45,710 loodetavasti ütleb midagi get kaldkriips või mõned teed ja siis HTTP 1.1. 101 00:04:45,710 --> 00:04:48,150 Me kasutame seda metafoori nõela heinakuhjas 102 00:04:48,150 --> 00:04:50,370 otsida eelkõige süütab või aadressid. 103 00:04:50,370 --> 00:04:53,120 Ja tõepoolest, seal on mitmeid funktsioone meie jaotus koodi 104 00:04:53,120 --> 00:04:56,930 et sinagi võid leida kasulik otsides eriti väärtusi. 105 00:04:56,930 --> 00:05:00,630 >> Lõppkokkuvõttes me kopeerida need baidid muutuvaks nimetatakse joont, 106 00:05:00,630 --> 00:05:03,510 mis märkate ka, me oleme jaotatakse stack 107 00:05:03,510 --> 00:05:05,890 teel dünaamiliselt muutuva suuruse massiivi. 108 00:05:05,890 --> 00:05:08,350 Ja me teadlikult püüdnud vältida helistaja malloc 109 00:05:08,350 --> 00:05:11,100 kuna jälle sest Control C on 110 00:05:11,100 --> 00:05:14,630 potentsiaali tunnuseks see programmist, siis ei taha olla see kood äkki 111 00:05:14,630 --> 00:05:17,479 katkestatud kasutaja poolt pihta Kontroll C, mille tulemusena 112 00:05:17,479 --> 00:05:20,270 on see, et ma ei pruugi olla võimalus tasuta midagi, mida ma olen malloced. 113 00:05:20,270 --> 00:05:23,660 Nii et ma olen püüdnud kasutada võimalikult palju pinu on suudan siin. 114 00:05:23,660 --> 00:05:26,040 >> Next up, terve hunnik DOS. 115 00:05:26,040 --> 00:05:28,930 Kirjeldus, selgitama kohta, millised täpselt on siin oodata, 116 00:05:28,930 --> 00:05:31,800 kuid Kommentaarid teile vihje, mis ees ootab. 117 00:05:31,800 --> 00:05:33,830 Esmalt tuleb kinnitab taotluse line 118 00:05:33,830 --> 00:05:37,760 ja veenduge, et see näeb välja nagu kirjeldused grammatika, nii et rääkida, 119 00:05:37,760 --> 00:05:38,541 ütleb, et ta peaks. 120 00:05:38,541 --> 00:05:41,290 Seejärel tuleb eraldada midagi nimetatakse päringu kraami välja 121 00:05:41,290 --> 00:05:44,200 pärast küsimärk, nagu nägime meie Google näiteks 122 00:05:44,200 --> 00:05:46,320 möödaminnes HD parameeter. 123 00:05:46,320 --> 00:05:49,050 Siis concatenate kokku Juur veebiserver 124 00:05:49,050 --> 00:05:52,520 koos tee, mis on in et taotluse esimesel real 125 00:05:52,520 --> 00:05:56,010 ja moodustavad täieliku tee file tahame otsida. 126 00:05:56,010 --> 00:06:00,300 >> Seejärel läheme veenduda et fail on olemas ja loetav. 127 00:06:00,300 --> 00:06:05,100 Ja siis me läheme eraldama faililaiendi, .html või Php 128 00:06:05,100 --> 00:06:09,920 või midagi sellist pikendamist see on väga stringi lõpust taotletakse. 129 00:06:09,920 --> 00:06:11,940 Järgmisena on tervikuna hunnik koodi kandsime 130 00:06:11,940 --> 00:06:15,800 tegelikult luua PHP loodud sisu eest. 131 00:06:15,800 --> 00:06:18,010 Lühidalt, see kood võtab nimel 132 00:06:18,010 --> 00:06:20,250 Faili soovite PHP tõlgendada. 133 00:06:20,250 --> 00:06:24,630 Võtame seda midagi, mida nimetatakse toru PHP tõlk. 134 00:06:24,630 --> 00:06:28,060 Tule tagasi vastuse, nagu oleks Vastuseks oli fail ise. 135 00:06:28,060 --> 00:06:32,110 Ja siis me Käi et faili baiti, tõmmates need kõik ühte puhver 136 00:06:32,110 --> 00:06:34,180 et saaksime lõpuks prindi neid välja. 137 00:06:34,180 --> 00:06:37,230 >> Tõepoolest, kõik need kutsub siia dprintf 138 00:06:37,230 --> 00:06:40,110 võimaldab meil printida midagi nimetatakse failipideme, mis 139 00:06:40,110 --> 00:06:42,350 on lihtsalt täisarv mis tähistab faili. 140 00:06:42,350 --> 00:06:45,360 Väga sarnase sisuga, kuid põhimõtteliselt erinev faili 141 00:06:45,360 --> 00:06:46,620 star pointer. 142 00:06:46,620 --> 00:06:50,260 Pane tähele, kuidas saate süntaks, nagu printf siin nii et ma ei saa dünaamiliselt 143 00:06:50,260 --> 00:06:54,000 lisada midagi pikkus jaoks väärtus HTTP päis 144 00:06:54,000 --> 00:06:55,270 nimetatakse Content-Length. 145 00:06:55,270 --> 00:06:57,990 Ja lõpuks ma kasutasin funktsioon õigus tegelikult kirjutada 146 00:06:57,990 --> 00:07:00,040 keha taotluse. 147 00:07:00,040 --> 00:07:03,750 >> Kahjuks ainult ellu toetust dünaamiliselt 148 00:07:03,750 --> 00:07:05,350 loodud PHP faile. 149 00:07:05,350 --> 00:07:08,520 Me ei rakendanud toetust staatilisi faile nagu GIF ja JPEG, 150 00:07:08,520 --> 00:07:10,660 ja CSS ja HTML faile. 151 00:07:10,660 --> 00:07:14,450 See kahjuks jäetakse teil reageerida kliendi eesmärk 152 00:07:14,450 --> 00:07:15,090 Selle teha. 153 00:07:15,090 --> 00:07:20,050 Nii et seal leiad, et seal on ei ole palju inspiratsiooni jooksul, et blokaad, 154 00:07:20,050 --> 00:07:23,520 aga kui sa natuke kõrgemal kuidas läksime suulise tõlke PHP koodi 155 00:07:23,520 --> 00:07:25,520 funktsioone saate kasutada on veidi erinev. 156 00:07:25,520 --> 00:07:27,561 >> Tegelikult saab laenata mõned funktsioonid 157 00:07:27,561 --> 00:07:29,620 võib-olla kohtuekspertiisi Ülesanded, sest 158 00:07:29,620 --> 00:07:32,860 lõpus päeval kõik, mida vaja teha siin on, kui sa tead, mida fail avatud 159 00:07:32,860 --> 00:07:35,690 ja kui sa tead, et see on nn MIME tüübi või sisu tüüp, 160 00:07:35,690 --> 00:07:39,040 sa pead lugema neid baiti ja kuidagi sülitada neid tagasi viia. 161 00:07:39,040 --> 00:07:41,190 >> Ja nüüd tour selle faili teisi funktsioone. 162 00:07:41,190 --> 00:07:43,820 Up esimene on ühendatud, mis lihtsalt tagastab true 163 00:07:43,820 --> 00:07:47,350 kui see lõpuks kuuleb ühendus kasutaja. 164 00:07:47,350 --> 00:07:48,786 Järgmisena on viga. 165 00:07:48,786 --> 00:07:52,296 Error, vahepeal funktsioonina me kirjutas käsitseda kõiki erinevaid 400 166 00:07:52,296 --> 00:07:55,360 500 HTTP staatuse koodid, et te võiksite 167 00:07:55,360 --> 00:07:58,500 saata kasutajale tagasi, koos standard sõnum. 168 00:07:58,500 --> 00:08:01,950 >> Järgmisena on koormus, eriti tuumakas funktsioon, mille eesmärk elus 169 00:08:01,950 --> 00:08:06,920 on lugeda faili star pointer sisu faili globaalset puhver 170 00:08:06,920 --> 00:08:09,000 et me deklareeritud maailmas Eespool [? Peamised. ?] 171 00:08:09,000 --> 00:08:12,649 See on natuke keeruline, kuna me on lugeda baiti failist 172 00:08:12,649 --> 00:08:14,690 aga vaadake iga iteratsiooni kas me oleme juba 173 00:08:14,690 --> 00:08:17,600 tabas faili lõppu või midagi on valesti läinud. 174 00:08:17,600 --> 00:08:21,210 Ja me kasutame RealLOC veenduda, et olenemata puhver me kasutame kasvab 175 00:08:21,210 --> 00:08:24,440 ja kasvab ja kasvab ja alati viibib ees baitide arv 176 00:08:24,440 --> 00:08:25,675 et me peame sobi sinna. 177 00:08:25,675 --> 00:08:27,550 Handler, vahepeal on funktsioon, mis saab 178 00:08:27,550 --> 00:08:30,630 nimetatakse teel võttes Registreeritud Kontroll C signaalina 179 00:08:30,630 --> 00:08:32,140 et me tahame peatada. 180 00:08:32,140 --> 00:08:34,070 Pange tähele, siin handler et lõppkokkuvõttes 181 00:08:34,070 --> 00:08:36,780 kõned lõpetada, mis muidugi peatub veebiserver. 182 00:08:36,780 --> 00:08:39,750 Ja kahjuks lookup ei rakendata. 183 00:08:39,750 --> 00:08:41,940 Vaimus, see on üsna lihtne ülesanne. 184 00:08:41,940 --> 00:08:44,900 Arvestades faililaiendi, mida ta vajab tagasi see nn MIME 185 00:08:44,900 --> 00:08:46,320 tüüpi või sisu tüüp. 186 00:08:46,320 --> 00:08:49,260 Ja me täpsustada spetsifikatsioon mida see kaardistamine peab olema. 187 00:08:49,260 --> 00:08:52,330 Aga sa pead tõlkima see lõppkokkuvõttes c koodi. 188 00:08:52,330 --> 00:08:56,490 >> Järgmisena on meie samamoodi tuumakas funktsiooni nimetatakse sõeluda, mille eesmärk elus 189 00:08:56,490 --> 00:08:59,350 on lugeda, mitte faili vaid võrguühendust. 190 00:08:59,350 --> 00:09:03,510 Täpsemalt, lugemine ja sõelumine HTTP taotluse, mis on pärit brauseris 191 00:09:03,510 --> 00:09:05,940 serveriga et lõpuks saame sõeluda 192 00:09:05,940 --> 00:09:09,530 just päised taotluse line ja tagasi need teile 193 00:09:09,530 --> 00:09:12,720 teel globaalse puhver, mis me Ülalmainitud [? Peamised. ?] 194 00:09:12,720 --> 00:09:14,880 >> Taasta vahepeal on funktsioon, mis me defineerime 195 00:09:14,880 --> 00:09:18,730 mis saab nimetatakse korduvalt sees Peamiste iga kord, kui parasjagu 196 00:09:18,730 --> 00:09:20,799 valmis kuulama hakata uue liitumise 197 00:09:20,799 --> 00:09:22,840 nii et me alati teada, riik meie muutujad 198 00:09:22,840 --> 00:09:24,870 ja nii, et me oleme ka vabanenud tahes mälu 199 00:09:24,870 --> 00:09:28,070 oleks võinud eraldatud Eelmise võrguühenduse. 200 00:09:28,070 --> 00:09:30,060 Järgmisena on alustada, funktsioon, mis me kirjutasime 201 00:09:30,060 --> 00:09:31,920 mis sisaldab kogu palju networking koodi 202 00:09:31,920 --> 00:09:34,420 et lõpuks hakkab veebiserver. 203 00:09:34,420 --> 00:09:36,680 >> Viimati üles on funktsioon nimetatakse stop, mis 204 00:09:36,680 --> 00:09:38,770 teeb täpselt seda, see peatub veebiserver. 205 00:09:38,770 --> 00:09:42,270 Aga kõigepealt see vabastab tahes mälu et ikka on eraldatud. 206 00:09:42,270 --> 00:09:45,850 Aga see lõppkokkuvõttes nõuab väljapääsu isegi tagastamise kontrolli 207 00:09:45,850 --> 00:09:47,480 meie peamine ülesanne. 208 00:09:47,480 --> 00:09:49,480 Lõppkokkuvõttes üks Kõige olulisem tehnikaid 209 00:09:49,480 --> 00:09:52,680 rakendamisel seda veebiserver saab olema natuke katse-eksituse meetodil, 210 00:09:52,680 --> 00:09:55,886 millel on üks brauseriaknas avatud paremal ja terminali aknas 211 00:09:55,886 --> 00:09:57,760 vasakule, serverid konsooli aken, nii et sa 212 00:09:57,760 --> 00:10:00,420 näete sõnumeid, mis on kuvatakse ekraanil. 213 00:10:00,420 --> 00:10:04,170 >> Aga veel parem oleks kolmanda aken, teise terminali aknas 214 00:10:04,170 --> 00:10:07,135 kus te kasutate Telnet, kasutamine mille eest on ette nähtud spec. 215 00:10:07,135 --> 00:10:09,640 Ja Telnet on lihtsalt väga Simple Network programmi 216 00:10:09,640 --> 00:10:12,660 mis võimaldab teil teeselda olla brauseri ühes aknas 217 00:10:12,660 --> 00:10:14,540 rääkimise ajal teine ​​aken. 218 00:10:14,540 --> 00:10:16,830 Nii näed täpselt tekstikäske 219 00:10:16,830 --> 00:10:18,700 et tulevad tagasi serverilt kliendile 220 00:10:18,700 --> 00:10:20,810 ilma et peaks poking ümber chrome arendaja 221 00:10:20,810 --> 00:10:24,010 tööriistad teisiti clunkier liides. 222 00:10:24,010 --> 00:10:29,099