Говорник: Сега ајде да нуркаат во дистрибуција код
и да ги разгледаме во контекст во кои кодот го пишувам
се случува да биде оперативен.
На крајот на денот, си оди за да се спроведе
целината на веб сервер.
Но, ние се предвидени ти со скелет
код, кои имаат некои функционалност, особено во однос на вмрежување.
Ајде да ги разгледаме.
>> Значи тука кон врвот на датотеката е еден куп
на функција тестираат макро барања.
Сега ова е само карактеристика на C, при што според еден куп на man-страници,
што треба да се дефинираат некои од овие константи за да биде вистина
или да биде дури и на специфичните броеви, така што вие имате пристап до одредени функции.
Во спротивно тие ќе бидат необјавени а ти не ќе имаат пристап.
Па јас го направив тоа со начинот на кој на читање на man-страници.
Сега долу, во линии од 15 до 17, ние
имаат целиот куп на границите објавени.
>> И ние позајмени овие од популарен веб сервер наречен Апачи.
И овие се само броеви кои се случува
да се капа на вкупниот број на бајти кои се дозволени
во различни контексти за HTTP барање дека прелистувачот е дозволено да ме испрати.
Следниот, ние се дефинира октети.
Сега еден октет е само фенси начин на велејќи бајт, или осум бита.
Излегува во недалечното минато бајт не е нужно осум бита,
па октет е секогаш осум бита.
Значи во овој случај ние го усвои она што е честа појава во вмрежување
светот на повикувајќи осум бајти еден октет.
>> Тука сум наведено дека ќе октети да биде 512, па така голем како во судска медицина
кога читаме еден куп бајти во еден момент, и тука,
ние ќе треба да се прочита куп на октети во исто време.
Следна целиот куп на насловот датотеки.
Како не знам да се вклучат овие?
Па, јас едноставно читање на човекот страници за голем број на функции
дека ние ќе ги користите во оваа дистрибуција код и да се вклучат во оние
Јас беше наложено да.
>> И сега имаме еден вид на податоци.
Ние прогласен за октет да биде знак.
И што ќе видиме подоцна дека тоа е се користи во текот на кодот.
И ние го прогласија целиот куп на прототипови,
и ние ќе одиме побрзо преку секоја од овие функции.
И на крај, а можеби и повеќето важно да се има
ум во овој момент во приказната е дека има
се, всушност целина куп на глобални променливи
на врвот на датотеката, корен, CFD, SFD, барање, датотека и телото.
>> Сега, генерално, со користење на многу глобални променливи, или глобални променливи на сите,
не е назад пракса.
Меѓутоа, излезе дека ние сме, исто така, со користење на техника наречена сигнал ракување подоцна
во кодот, која ни овозможува да детектира кога корисникот хитови нешто
како Ctrl C и затвори серверот благодатно.
И со цел да го направат тоа благодатно а всушност се ослободите меморија,
ние треба да имаат пристап до овие глобални променливи.
>> А сега, ајде да ги разгледаме во главниот, кои вози на интегритет на оваа програма.
Прво, на врвот тука сме има грешка број променлива
кој се појавува да не се имаат еден вид, но тоа е
затоа што тоа е всушност дефинирани во датотека наречена
грешка errno.h кои е вклучена повисоко.
Ако го направите човекот errno да всушност види дефиниција за оваа работа,
ќе видите дека ова е посебни глобалната променлива
се поставува со еден куп на функции не е напишана
од нас, туку од страна на авторите на Linux и други системи за да всушност го
голем број на таа променлива кога нешто не е во ред, така што ќе може на глобално ниво
дознаам што се случило да тргне наопаку.
>> Сега долу ќе видите нови техника можеби користејќи getopt,
функција која им помага да се интерпретира наредбата линија аргументи, така што ние не
мора да се мачат да губите време да пронајдат како да се интерпретира нешто како 8080,
или цртичка p, или цртичка ж да ви помогнеме.
getopt во суштина го прави тоа за нас.
Види човекот страница за повеќе.
>> Следниот, ние се направи малку грешка проверка за да бидете сигурни дека
дека бројот на портата е во рамките на на одреден опсег во спецификации.
Напред, ние гледаме на повик на функција на проектот, чија дефиниција ние ќе
погледне во еден момент, и како што самото име сугерира, ова започнува на веб серверот.
Тука имаме повик на функција наречен сигнал кој вели:
ако и кога ќе го слушнете контрола Ц од тастатурата на корисникот, оди напред и да се јавите
функција наречена управувачот што се случува на крајот чисти работите и да престане
серверот.
>> Под тоа е она што се појавува да биде бескрајна јамка, на првата линија на која
ефикасно да е повик до функција наречена
ресетира, кои самите ние спроведување подоцна, со цел
да се ослободи некои од нашите глобални држави.
После тоа е линија на кодот кој условно
е проверка на враќање вредност на поврзани.
Сега поврзани личи на прирокот, нешто што се враќа точно или неточно.
И тоа го прави, но има нешто посебно во поврзаните
во кои тоа е блокирање на повик.
Тоа ќе седат таму и чекаат до прелистувачот на корисникот
се обидува да се поврзе на овој веб- сервер и само тогаш ќе го
врати точно или неточно, така што можеме да продолжи во внатрешноста на ова ако изјава.
>> Откако таму, забележи оваа функција на функција наречена анализирам, што пишувавме,
кој парсира сите октети, сите на бајти кои доаѓаат од пребарувачот
до серверот, така што можеме да го предаде ќе се врати на крајот на вредност на еден
на оние глобални променливи кои продавници сите бајти во само
заглавија на тоа барање, а не на телото
ако имало, всушност, тело до неа.
>> Сега долу да почнеме да се анализирам оние заглавја да се извлече
подмножество на информации дека ние се грижиме за.
Поточно, според спецификација, ние прво
сакаше да побара линија, која е само дека првата линија која
се надевам дека нешто како GET намалување или некој пат и тогаш HTTP 1.1.
Ние сме користење на оваа метафора на игла во haystack
да се погледне за одредени знаци или адреси.
И навистина, има голем број на функции во нашата дистрибутивна код
дека вие, исто така, може да се најдат корисни кога во потрага по одредени вредности.
>> На крајот на краиштата, ние копија на овие бајти со променлива наречена линија,
кои забележуваат, исто така, ние сме распределуваат врз оџакот
по пат на динамички големина низа.
И ние намерно се обидува да се избегне повикувајќи Примерок
бидејќи повторно, бидејќи Контрола на С се
потенцијален карактеристика на оваа програма, ние не сакаат да имаат ова код одеднаш
прекината од страна на корисникот, удирање Контрола Ц, поради што
е дека јас не би можеле да имаат шанса бесплатно нешто што сум malloced.
Па јас сум се обидува да користи онолку колку на магацинот е што можам овде.
>> Потоа, еден куп на ДОС.
Спецификацијата ќе излагам на токму она што се очекува тука,
но ви даде коментари навестување на она што се наоѓа напред.
Прво треба да се потврда на барање линија
и бидете сигурни дека тоа изгледа како спецификации граматика, така да се каже,
вели дека треба.
Потоа треба да се извлече нешто повика на барањето, работи надвор
по прашалник, како ние гледавме со нашите Гугл пример
во донесувањето во HD параметар.
Ние тогаш concatenate заедно коренот на веб серверот
со патот кој е во дека барањето на првата линија
и формирање на целосната патека на на датотеката што сакате да го барате.
>> Потоа, ние ќе треба да бидете сигурни дека дека постои датотеката и да се прочита.
И тогаш ние ќе треба да се извлече неговата наставката на датотеката, на .html или .php,
или некои такви екстензија која е на самиот крај на стрингот бара.
Потоа е целина куп на код пишувавме
за да всушност генерираат PHP генерирани содржини за вас.
Во мало, на овој Кодексот се во името
на датотеката што сакате PHP да се интерпретира.
Ние го помине нешто што се нарекува цевка во преведувач PHP е.
Да се ​​вратам на одговор како да одговорот беа самата датотека.
И тогаш iterate во текот на овој датотеката бајти, влече сите нив во една тампон
така што можеме да на крајот испечатите и надвор.
>> Всушност, сите овие повикува овде за да dprintf
ни овозможува да се печати нешто наречен опишувач на датотека, која
е само број што претставува датотеката.
Многу слични во духот, но фундаментално различни од датотека
ѕвезда покажувачот.
Забележи како можете да го користите синтакса како printf тука, така што можам да динамички
вметнете нешто како на должината за вредноста на HTTP заглавие
наречен содржина должина.
И на крајот јас се користи функцијата право да всушност пишува
телото на барањето.
>> За жал, ние само се спроведува поддршка за динамички
генерирана PHP датотеки.
Ние не ги спроведе поддршка за статични слики како GIFs, и JPEG слики,
и CSS и HTML датотеки.
Тоа, за жал, е оставено на вас да се одговори на клиент цел
тоа да се направи.
Па таму ќе најдете дека има не многу инспирација во тој блок,
но ако малку повисоко од тоа колку отидовме во врска со толкувањето на PHP код,
функциите што ќе го користите се малку различни.
>> Всушност, можете да позајмите некои од функционалност
можеби од судска медицина проблем во собата, бидејќи
на крајот на денот сите ќе треба да направите тука е Откако ќе знаете што датотеката отворена
и штом еднаш ќе знаат дека тоа е т.н. MIME-тип или тип содржина,
што треба да се читаат во оние бајти и на некој начин ги плукаат назад надвор.
>> И сега турнеја на овој други функции датотеката.
До првиот е поврзан, која едноставно се враќа true
кога конечно ќе го слуша конекција од корисникот.
Потоа е грешка.
Грешка, пак, како функција ние напиша да се справи со сите на различните 400
и 500 HTTP статус кодови, кои можеби ќе сакате
да ги врати назад до корисникот, заедно со стандардна порака.
>> Потоа е оптоварување, особено месен функција, чија цел во животот
е да се читаат од датотека ѕвезда покажувачот на содржината на датотеката во глобален тампон
кои ги прогласи на глобално ниво над [? Главната. ?]
Ова е малку комплексна, бидејќи ние мора да го прочитате бајти од датотека
но проверете на секоја итерација дали ние сме веќе
хит на крајот на датотеката или нешто не е во ред.
И ние ги користиме realloc да бидете сигурни дека без оглед на тампон ние сме со користење е во пораст
и расте и расте и секогаш престојуваат во пресрет на бројот на бајти
што треба да се вклопат во таму.
Управувачот, пак, е функцијата што добива
наречен од страна на начин на постоење регистрирани контрола Ц како сигнал
дека ние сакаме да се интервенира.
Забележи овде во управувачот дека тоа на крајот
повици запре, што секако запира веб сервер.
И за жал, пребарување не се спроведува.
Во духот, ова е прилично едноставна функција.
Со оглед на наставката на датотеката, таа треба да се врати тоа е т.н. MIME
вид или тип содржина.
И ние наведете во спецификацијата она што мапирање мора да биде.
Но, вие треба да се преведе тоа на крајот на C код.
>> Потоа е наша слично месен функција наречен анализирам, чија цел во животот
е да се прочита, а не од датотека, но од некоја мрежна конекција.
Поточно, читање и анализирањето на HTTP барањето што доаѓаат од пребарувачот
до серверот, така што Во крајна линија, може да се интерпретира
во само насловите во барање линија и да ги вратат тие да ви
по пат на глобалната тампон дека донесовме над [? Главната. ?]
>> Ресетирај, пак, е функција која ја дефинираме
што се нарекува iteratively во внатрешноста од главните секој пат кога сте за
подготвена да почне да слуша за нова врска
така што ние секогаш знаат состојбата на нашата променливи
и така што ние сме, исто така, ослободени мемориската дека
можеби биле наменети за претходна мрежна врска.
Потоа е почеток, функција која пишувавме
кој содржи целиот многу вмрежување код
што на крајот ќе почне на веб серверот.
>> Минатата up е функцијата наречен станица, која
го прави токму тоа, запира веб сервер.
Но, прво го ослободи мемориската кои се уште се распределени.
Но, тоа на крајот го нарекува излез без дури и да се врати контрола
на нашата главна функција.
На крајот на краиштата, една од најважните техники
при спроведувањето на овој веб серверот е ќе биде малку на обиди и грешки,
има еден интернет пребарувач отворен прозорец на десната страна и терминален прозорец на
лево, серверите конзола прозорец, така што ќе
може да се види пораки кои се се прикажува на екранот.
>> Но, уште подобро ќе биде една третина прозорец, вториот терминал,
во која имате потреба при користење Телнет, користењето за кое е пропишана во спецификации.
И Телнет е само еден многу едноставна мрежа програма
кој ви овозможува да се преправаме да биде прелистувачот во еден прозорец
додека зборував со другиот прозорец.
На овој начин може да се види токму текстуални команди
кои се враќаат од серверот до клиентот
без да се ѕиркаа околу инвеститорот Хром
алатки во спротивно clunkier интерфејс.