Tagapagsalita: Ngayon sabihin dive sa code ng pamamahagi
at tumingin sa konteksto kung saan ang code isulat mo
Mawawala na tumatakbo.
Sa pagtatapos ng araw, ka ng pagpunta sa ipatupad
ang kabuuan ng web server.
Ngunit na ibinigay namin sa inyo ang balangkas
code na mayroon ilang mga pag-andar, lalo na may kaugnayan sa networking.
Tingnan natin ang isang hitsura.
>> Kaya dito patungo sa tuktok ng file ay isang bungkos
ng tampok na subukan ang macro kinakailangan.
Ngayon ito ay isang tampok na lamang ng c, kung saan ayon sa isang grupo ng tao na pahina
kailangan mong tukuyin ang ilan sa mga constants para maging totoo
o maging kahit tukoy na numero ng sa gayon ay mayroon kang access sa ilang mga pag-andar.
Kung hindi man sila ay hindi nagbigay-alam at hindi ka magkakaroon ng access.
Kaya ginawa ko na ito sa pamamagitan ng paraan ng pagbabasa ng mga pahina ng tao.
Ngayon pababa sa ibaba, sa mga linya 15 sa pamamagitan ng 17, namin
magkaroon ng isang buong bungkos ng mga limitasyon ng ipinahayag.
>> At hiniram na namin ang mga mula sa isang tanyag na web server na tinatawag na Apache.
At ang mga ito ay lamang mga numero na pupunta
lilimitahab ang kabuuang bilang ng mga byte na pinahihintulutan
sa iba't ibang konteksto para sa mga kahilingan ng HTTP na ang isang browser pinahintulutan upang ipadala sa akin.
Sunod, tukuyin ang aming mga octet.
Ngayon isang octet lamang magarbong paraan ng sinasabi ng isang byte, o walong bits.
Ino-out sa nakalipas na panahon isang byte ay hindi nangangahulugang walong bits,
kaya octet ay laging walong bits.
Kaya sa kasong ito na pinagtibay namin kung ano ang karaniwang sa networking
mundo ng pagtawag sa walong mga byte isang octet.
>> Narito tiniyak ko na octet habilin maging 512, nang sa gayon ay halos tulad ng sa forensics
kapag binabasa namin ang isang bungkos ng bytes sa isang pagkakataon, dito masyadong,
kami ay pagpunta sa basahin ang isang bungkos ng mga octet sa isang pagkakataon.
Susunod ang maramihang mga header ng file.
Paano mo alam ko na isama ang mga ito?
Well ako basahin lamang ang tao mga pahina para sa isang bilang ng mga pag-andar
na gagamitin namin sa pamamahagi code at isama sa mga
Ako ay itinagubilin sa.
>> At ngayon kami ay may isang uri ng data.
Ipinahayag kami ng isang octet na isang pansamantalang trabaho.
At kami makita sa ibang pagkakataon na iyon ginagamit sa buong code.
At kami ay nagpahayag ng ang maramihang mga modelo,
at kami maglakad nang mabilis sa pamamagitan ng bawat isa sa mga function.
Panghuli, at marahil pinaka mahalaga na tandaan sa
ayos lang sa ito point sa ang kuwento, ay mayroong
ay, sa katunayan isang buo bungkos ng mga pangkalahatang variable
sa tuktok ng file, ugat, CFD, SFD, kahilingan, file at katawan.
>> Ngayon pangkalahatan, ang paggamit ng maraming mga global variable, o mga pangkalahatang variable sa lahat,
ay hindi ang kasanayan likod.
Ngunit ito ay lumiliko out din namin ang gumagamit ka ng diskarte na tinatawag na pangangasiwa signal sa ibang pagkakataon
sa code, na nagbibigay-daan sa amin upang matukoy kapag pinindot ng user ang isang bagay
tulad ng CTRL C at shut down ang server maganda.
At upang gawin iyon maganda at talagang libre up ng memorya,
kailangan namin upang magkaroon ng access sa mga pangkalahatang variable.
>> At ngayon hayaan tumagal ng isang pagtingin sa pangunahing, na humihimok ang kabuuan ng programang ito.
Una, sa dito sa tuktok namin May isang error sa numero ng variable
na lumilitaw na hindi magkaroon ng isang uri, ngunit iyan ay
dahil ito ay talagang nilinaw sa isang file na tinatawag na
Error sa errno.h na Kasama mas mataas up.
Kung gagawin mo tao errno upang aktwal na makita ang mga kahulugan para sa bagay na ito,
makikita mo na ito ay isang espesyal na global variable na
Naka-set sa pamamagitan ng isang buong bungkos ng mga pag-andar hindi nakasulat
sa pamamagitan ng sa amin, ngunit sa pamamagitan ng ang may-akda ng Linux at iba pang mga system upang aktwal na-set
isang numero na variable kapag ang isang bagay na napupunta mali sa gayon ay maaari kang buong mundo
malaman kung ano ang ginawa magkamali.
>> Ngayon pababa sa ibaba makikita mo ang isang bagong diskarte di kaya gamit getopt,
isang katangian na nakakatulong sa pag-parse utos argumento linya nang sa gayon ay hindi namin
mag-abala sa oras ng pag-aaksaya ang pag-uunawa kung paano i-parse ang isang bagay tulad ng 8080,
o gitling p, o gitling h upang makakuha ng tulong.
talaga ang ginagawa getopt na para sa amin.
Tingnan ang pahina ng tao para sa higit pa.
>> Susunod, nagsasagawa kami ng kaunting error -check upang masiguro na
na ang numero ng port ay sa loob ng sa tinukoy na saklaw sa spec.
Susunod, makikita natin ang isang tawag sa pagpapaandar na simulan, na ang kahulugan namin
Tingnan natin ang ilang mga sandali, at bilang ang pangalan nito nagmumungkahi, nagsisimula ito sa web server.
Narito mayroon kami ng isang tawag sa isang function tinatawag na signal na nagsasabing,
kung at kapag naririnig mo ang Control C mula sa keyboard ng gumagamit, sige at tawagan ang
isang function na tinatawag na handler na nangyayari up at tumigil sa huli ay malinis na bagay
sa server.
>> Nasa ibaba iyon ang lalabas na isang walang hanggan loop, ang unang linya ng na
mabisa ay isang tawag sa isang function na tinatawag na
i-reset, na namin ang aming sarili ipatupad sa ibang pagkakataon upang
upang magbakante ng ilan sa aming mga global na mga estado.
Pagkatapos noon ay isang linya ng code na nang may pasubali
ay pagsuri sa pagbalik halaga ng mga konektadong.
Nakakonekta na ngayon ang hitsura tulad ng isang tambalan, isang bagay na nagbabalik totoo o hindi.
At ginagawa nito, ngunit mayroong isang bagay na espesyal sa mga nakakonektang
sa ito ay isang pag-block tawag.
Ito ay umupo doon at maghintay hanggang sa browser ng user
Sinusubukan upang kumonekta sa web server at lamang pagkatapos ang ito
bumalik tama o mali sa gayon ay magpatuloy namin sa loob ng ito kung statement.
>> Sa sandaling nandoon na, mapansin ang function na ito sa isang function na tinatawag na pag-parse, na sinulat ni namin,
Pina-parse saan ang lahat ng mga octet, ang lahat ng ng mga byte na nanggagaling mula sa isang browser
sa server, upang maaari naming ipasa bumalik ka sa huli ng isang halaga sa isa
ng mga pangkalahatang variable na Nag-iimbak ang lahat ng mga byte in lamang
ang mga header ng na kahilingan, hindi ang katawan
kung mayroong talagang isang katawan dito.
>> Ngayon pababa sa ibaba simulan namin upang -parse ang mga header i-extract
isang subset ng mga impormasyon na namin na nagmamalasakit sa.
Sa partikular, ayon sa mga pagtutukoy, muna namin
Nais upang humiling ng linya, na lamang na ang pinaka unang linya na
sana sabi ni isang bagay tulad get mabawasan nang malaki o ilan path at pagkatapos ay HTTP 1.1.
Ginagamit namin ang talinghaga ng isang karayom ​​sa isang mandala ng dayami
upang maghanap ng mga partikular na char o address.
At sa katunayan, mayroong isang bilang ng mga function sa aming pamamahagi ng code
na ikaw, masyadong, maaaring kapaki-pakinabang kapag naghahanap para sa partikular na halaga.
>> Sa huli, kopyahin namin ang mga bytes sa linya sa isang variable na tinatawag na,
na mapansin, masyadong, hindi namin inilalaan sa stack
sa pamamagitan ng paraan ng isang dynamic na kasing laki ng array.
At sadyang naming sinusubukang upang maiwasan ang pagtawag malloc
dahil muli, dahil Pagkontrol ng pagiging C
ang isang potensyal na tampok ng programang ito, kami ayaw mong magkaroon ang code na ito bigla
Naantala ng pagpindot ng user Control C, ang resulta ng kung saan
ay na hindi ko maaaring mayroon ng isang pagkakataon para sa libreng isang bagay na malloced ko.
Kaya sinusubukan ko upang magamit bilang magkano ng stack ay maaari ko dito.
>> Susunod, ang maramihang mga mag-dos.
Pagtutukoy ay magpaliwanag sa eksakto kung ano ang inaasahan dito,
ngunit ang mga komento magbibigay sa iyo ng isang pahiwatig ng kung ano ang namamalagi maaga.
Kailangan mo munang patunayan ang mga linya kahilingan
at tiyakin na mukha itong pagtutukoy grammar, kaya na magsalita,
Sinasabi sa nararapat.
Pagkatapos ay kailangan mong i-extract ang isang bagay tinatawag na query, ang mga bagay out
pagkatapos ng tandang pananong, tulad ng Nakita namin sa aming mga halimbawa Google
sa pagpasa sa isang parameter ng HD.
Pagkatapos ay pagdugtungin kami magkasama ang root ng web server
sa landas na nasa na kahilingan unang linya
at bumuo ng ang buong landas ng ang file na nais namin upang tumingin para sa.
>> Pagkatapos noon, kami ay pagpunta sa tiyakin kung umiiral ang file at naka-nababasa.
At pagkatapos kami ay pagpunta sa kunin nito extension ng file, ang .html o ang .php,
o ilang tulad ng extension na sa pinakadulo ng ang hiniling na string.
Susunod up ay isang buo bungkos ng code na sinulat namin
upang aktwal na bumuo ng PHP nilalaman para sa iyong binuo.
Sa maikling salita, ito tumatagal ng code sa pangalan
ng file na nais mong PHP i-interpret.
Ipasa namin ito sa pamamagitan ng isang bagay na tinatawag isang pipe sa interpreter PHP ni.
Kumuha ng mga pabalik sa tugon na waring ang tugon ay isang mismong file.
At pagkatapos ay umulit namin sa paglipas na file bytes, kumukuha ang lahat ng ito sa isang buffer
sa gayon ay maaari naming sa huli i-print ang mga ito out.
>> Sa katunayan, ang lahat ng mga tawag dito upang dprintf
Binibigyang-daan sa amin upang mag-print ng isang bagay tinatawag na isang file descriptor, na
lamang ng isang integer na kumakatawan sa isang file.
Na halos kapareho sa espiritu, ngunit sa panimula naiiba mula sa isang file
star pointer.
Pansinin kung paano mo maaaring gamitin ang syntax tulad ng printf dito nang sa gayon ay maaari ko nang pabago-bago
ipasok ang isang bagay tulad ng haba para sa halaga ng isang HTTP header
tinatawag na Content-Length.
At sa huli kong ginagamit ang karapatan sa aktwal na magsulat ng function
ang katawan sa kahilingan.
>> Sa kasamaang palad, tanging ang ipinatupad namin suporta para sa mga dynamic na
nabuo ang mga file na PHP.
Hindi namin ipatupad ang suporta para sa static na mga file tulad ng gifs, at jpeg,
at CSS at HTML file.
Iyon, sa kasamaang-palad, na naiwan sa iyo upang tumugon sa mga layunin ng kliyente
ito gawin.
Kaya sa may kakailanganin mong makita na mayroong Hindi magkano inspirasyon sa loob ng bloke,
ngunit kung ang isang maliit na mas mataas up sa kung paano nagpunta kami tungkol sa pagbibigay-kahulugan sa code na PHP,
ang mga pag-andar gagamitin mo ay medyo naiiba.
>> Sa katunayan, maaari mong humiram ang ilan sa mga pag-andar
marahil mula sa forensics hanay problema, dahil
sa pagtatapos ng araw ang lahat ng kailangan mong gawin dito ay sa sandaling malaman mo kung ano mabuksan ang file
at sa sandaling alam mo na ito ay tinatawag na Uri ng MIME o uri ng nilalaman,
kailangan mong basahin sa mga bytes at kahit papaano ay dumura ang mga ito pabalik out.
>> At ngayon sa isang tour ng ito iba pang mga pag-andar file.
Hanggang unang nakakonekta, na nagbabalik lamang totoo
kapag ito sa wakas ay nakakarinig ng koneksyon mula sa isang user.
Susunod up ay error.
Error, samantala, bilang isang katangian namin ay sumulat upang pangasiwaan ang lahat ng mga iba't-ibang 400
at 500 HTTP status mga code na maaaring gusto
upang magpadala ng pabalik sa gumagamit, kasama ang isang karaniwang mensahe.
>> Susunod up ay load, isang partikular na parang karne ng function, na ang layunin sa buhay
ay na magbasa mula sa isang file star pointer ang mga nilalaman ng isang file papunta sa isang pandaigdigang buffer
na ipinahayag namin sa buong mundo sa itaas [? pangunahing. ?]
Ito ay isang bit complex dahil namin mayroon na basahin ang mga byte mula sa file
ngunit suriin sa bawat pag-ulit kung hindi namin na
pindutin ang dulo ng file o ibang bagay maling naganap.
At ginagamit namin realloc upang matiyak na kahit anong buffer na aming ginagamit ay lumalaking
at lumalaki at lumalaki at palaging naglalagi nang mas maaga sa ang bilang ng mga byte
na kailangan namin upang magkasya sa doon.
Handler, samantala, ay ang function na ay makakakuha ng
na tinatawag na sa pamamagitan ng paraan ng pagkakaroon nakarehistro Control C bilang isang signal
na gusto naming agawin.
Pansinin dito sa handler na ito sa huli
tawag itigil, na siyempre Humihinto ang web server.
At sa kasamaang-palad, ang paghahanap Hindi ipinatupad.
Sa diwa, ito ay isang medyo simple function.
Binigyan ng extension ng file, kailangan nito upang bumalik ito ay tinatawag na ng MIME
uri o uri ng nilalaman.
At aming tinukoy sa pagtutukoy kung ano ang dapat na pagma-map.
Ngunit kailangan mo upang i-translate ito sa huli upang c code.
>> Susunod ay ang aming parehong pag-andar parang karne na tinatawag na pag-parse, na ang layunin sa buhay
ay upang basahin, hindi mula sa isang file, ngunit mula sa isang koneksyon sa network.
Sa partikular, pagbabasa at pag-parse ng Kahilingan ng HTTP na dumating mula sa isang browser
sa server upang ang sa huli maaari naming i-parse
sa lamang ang mga header sa kahilingan linya at ibalik ang mga sa iyo
sa pamamagitan ng paraan ng isang pandaigdigang buffer na ipinahayag namin sa itaas [? pangunahing. ?]
>> I-reset ang, samantala, ay isang function na namin tukuyin ang
na tinatawag ay makakakuha ng iteratively loob ng pangunahing tuwing ikaw ay tungkol sa
handa nang magsimulang makinig para sa isang bagong koneksyon
nang sa gayon ay palagi naming malaman ang estado ng aming mga variable
at sa gayon ay nai din namin napalaya anumang memorya na
maaaring na-ilaan para sa isang nakaraang koneksyon sa network.
Susunod ay kung magsimula, ang -andar na aming sinulat ni
na naglalaman ng isang buong maraming networking code
na ganap na nagsisimula sa web server.
>> Huling up ay ang pag-andar tinatawag na stop, na
ang eksaktong iyon, Humihinto ang web server.
Ngunit unang pinakakawalan nito isang anumang memory Na-na inilalaan pa rin.
Pero sa huli tawag exit walang kahit bumabalik kontrol
sa aming mga pangunahing pag-andar.
Sa huli, ang isa sa mga pinakamahalagang mga diskarte
kapag ang pagpapatupad ng mga web server na ito ay pagpunta sa maging isang bit ng pagsubok at error,
pagkakaroon ng window bukas isang browser sa kanan at isang terminal na window sa
ang natitira, ang mga server ng console window, nang sa gayon ay
maaaring makita ang mga mensahe na na ipinapakita sa screen.
>> Pero mas mahusay pa rin ng isang third window, ang pangalawang terminal na window,
sa kung saan mo ginagamit Telnet, ang paggamit na kung saan ay inireseta sa spec.
At Telnet lamang ang napaka simpleng programa ng network
na nagbibigay-daan sa iyo upang magpanggap maging isang browser sa isang window
habang pakikipag-usap sa kabilang window.
Sa ganitong paraan maaari mong makita ang nang eksakto ang tekstuwal mga utos
na bumabalik mula sa server sa client
nang hindi na kinakailangang poking sa paligid ng nag-develop ng chrome
mga tool sa isang kung hindi man ay clunkier interface.