>> Id-dritt.
Allura l-cliffhanger kien, dak li huwa node.js kif tafu illum?
Xejn? Yeah?
>> Kien bħal qafas miktub JavaScript
applikazzjonijiet ampjament -
>> OK, li x-xogħlijiet.
>> - I know simili użi komuni bħall -
jew xi ħaġa li għandek tista 'tagħmel huwa simili -
[Rimarka inaudible]
>> OK tajba.
Yeah, dan huwa qafas.
Huwa ta 'magna li bih inti tista 'tesegwixxi kodiċi JavaScript
sit server.
Dan jista 'jfisser l- aktar sempliċi ta 'affarijiet
bħal kitba ta 'linja tal-kmand iskrittura mhux fil Python jew Bash
jew Ruby jew PHP, iżda biss fl JavaScript innifsu
u eżekuzzjoni tagħha fi Teptip kmand pront.
Jew inti tista 'tmexxi effettivament f'perjodu ta 'web server.
U fil-fatt fi ħdan node.js innifsu,
dan il-qafas huwa mazz sħiħ tal-libreriji li huma fost
fis-server HTTP built-in.
Allura, inti tista 'attwalment tikteb server kif Ser naraw
fi ftit mument, super faċilment bi ftit għal fehim daqsxejn
ta HTTP u TCP u portijiet.
U inti tista 'tbid smigħ web server mingħajr Apache,
mingħajr IIS Microsoft.
Mingħajr kwalunkwe software installat,
inti tista 'biss tbid dan u jisimgħu aktar xi port
fuq is-sistema li int permess biex.
Allura każ u l-punti, let me go u tiftaħ
up dan l-eżempju, server-0.js.
Allura avviż li l-quċċata ta ' dan il-fajl, biss mazz
ta 'kummenti uninteresting, u allura hemm koppja
ta 'linji rappreżentattivi ta' kodiċi li aħna ser tara recurringly.
Allura, HTTP var gets jeħtieġu "HTTP".
Hekk mibnija fil-biex node.js " infrastruttura huwa mazz sħiħ
ta 'moduli li huma verament ftit libreriji u kollox huwa tip
ta 'isem spazju ma l-identifikatur uniku
bħal dan wieħed huwa "HTTP".
Allura li bħal fil-lott ta ' lingwi bħal Java u C + +
u C, biss meta inti importazzjoni jew jinkludu
jew node jitkellmu jeħtieġu modulu ma bits tagħha.
U l-memorja teħtieġ jiksbu mgħobbija
fis RAM u għalhekk użati.
Allura, inti tip ta 'tagħbija dan libreriji jew moduli fuq talba.
Dan ifisser imorru quddiem u jeħtieġu
għal dan il-programm il-librerija HTTP,
u jirreferu għal dik librerija minn permezz ta 'varjabbli msejħa HTTP.
Iżda dan is-simbolu tax-xellug tista ' ġew imsejħa xejn, foo,
bar, baz, ma jimpurtax.
Allura b'differenza C + + u Java u C fejn meta għandek bżonn
jew timporta librerija, hija biss sort
ta 'isir globalment aċċessibbli,
moduli node.js huma aktar strett namespace.
Allura li stess - li funzjonalità hi aċċessibbli biss fil-mument
permezz ta 'dan l-isem varjabbli.
Inti ma tistax biss tibda metodi ittajpjar li jeżistu
fil dan id-dritt b'mod li probabbilment hija tajba,
għaliex imbagħad namespace tiegħek ma jiksbu kważi bħala cluttered
kif fil-lott ta 'lingwi.
Kull dritt, hekk issa l-komuni jissuġġerixxu, ħolqien ta 'server HTTP
kif Jonathan [assunt ortografija] kien possibbli huwa litteralment
sempliċi kemm sejħa tal- joħolqu metodu server ġewwa
tal-modulu HTTP.
Għalhekk, dan huwa jirritorna ir-referenza
għal xi tip ta 'web server.
Hija waslet għall Apache, ma piż neċessarjament bħala tqal.
Dan wieħed huwa ftit aktar sempliċi.
U issa, I għandek biss sempliċiment tagħmel ftit affarijiet.
Allura l-ewwel, let me iscroll sal-qiegħ hawn
u aqbeż id-handler metodu għal mument.
U tinnota din il-linja ta 'kodiċi,
server.on li huwa essenzjalment ifisser server -
jisimgħu simili fil-kodiċi jQuery,
jisimgħu għal avveniment imsejħa talba
u ħu raden x'għandi nagħmel
meta avveniment talba nirien fil-server.
Yeah?
>> Sejħa tal-handler funzjoni.
Allura, litteralment teżegwixxi l- kodiċi thats referenza
minn dan il-varjabbli u attwalment mhux varjabbli sabiex simbolu hawn,
x'inhu dak is-simbolu jirreferu għall?
Ukoll, dan l-isem ta ' jiffunzjonaw up here
u handler apparentement jieħu żewġ argumenti.
Għaliex tnejn? Ukoll, jekk inti biss aqra d-dokumentazzjoni ebda
għal dan il-modulu partikolari, inti ser ikunu avżati li l-handler
li se jiġu invokati se jkun għaddew mill-inqas żewġ argumenti,
referenza għat-talba,
u ġewwa tat-talba we tfisser litteralment talba HTTP.
Għalhekk, dawk kollha HTTP headers li inti tista 'recall
mill-bidu tal- semestru jew xi klassi qabel
jew esperjenza bħall- jiksbu linja u l-linja ospitanti
u l-linja User-aġent, li kollha li hija inkapsulati u aktar ġewwa
ta 'din it-talba oġġett.
U l-oġġett rispons huwa magħżula għal data barra.
Għalhekk, inti għandek referenza għal joġġezzjonaw li għaddej biex jippermettu li inti
biex jibagħtu informazzjoni lura lill- il-browser billi ċċempel metodi
fuq dan l-aħħar argument sejjaħ Res għal rispons.
Iżda dan jista 'jissejjaħ foo jew bar, dan huma biss konvenzjonijiet.
Allura issa, x'għandi nagħmel?
Well, jidher li ġewwa ta 'din il-web server super sempliċi
li jien implimentazzjoni, jien ser jagħmlu dan li ġej.
Jien ser tikteb HTTP header bil-kodiċi istat 200,
200 tifsira OK, kollox huwa tajjeb.
U mbagħad, jien ser li jgħaddu fuq apparentement.
X'hemm-tip ta 'data tal- tieni argument għal ras dritt?
>> Huwa oġġett?
>> Huwa ta 'oġġett kemm keys u l-valuri?
Just wieħed ta 'kull, lemin, valur ewlieni wieħed par.
Allura, 'tip' kontenut ".
U l-unika raġuni Jien jikkwota hawnhekk huwa
minħabba li l-sing tista 'tkun conflated għal sinjal minus
jew xi ħaġa bħal dik.
So, I jkollhom biex nikkwota hawnhekk, uniku sal jew kwotazzjonijiet doppja.
Iżda paradigma ġdid komuni
fil-kodiċi JavaScript spiss kwotazzjonijiet uniku dawn il-jiem,
kolon u allura l-valur.
Għalhekk, dan huwa biss il- tip hekk imsejħa moħħ.
Dan huwa header HTTP thats litteralment għaddej
jiġu kontenut kolon tip sing test slash sempliċi li għaddej
li għandha tintbagħat mill- server għall-browser
sabiex il-browser jaf jekk jiddekorri dan it-test kif Prima
jew HTML jew bħala immaġni jew movie
jew fajl flash jew kull ħaġ'oħra.
Issa, fejn nista attwalment jridu li tibgħat fil-ġisem tal-paġna?
Well, biss mill-qari d-dokumentazzjoni
għall-oġġett rispons ġewwa ta 'din il-librerija.
Nara li hemm dritt metodu u li tieħu string,
forsi affarijiet oħra iżda minimament string.
U l-sekwenza huwa dak bżiq out għall-browser.
F'dan il-każ super tagħha sempliċi, dinja bonjour tagħha,
iżda tista 'tkun opne parentesi, html, parentesi magħluqa,
ras parentesi miftuħa, qrib parentesi u oħrajn,
dan jista 'jkun html prima.
Iżda aħna qed iżżomm l-eżempju sempliċi bi ftit jobżoq
l-aktar sempliċi ta 'tipi moħħ li huwa probabbilment test / sempliċi.
U mbagħad response.end biss ifisser tagħlaq il-konnessjoni
u tibgħat kollox I jkollhom tip ta 'buffered ġewwa
ta 'dan l-oġġett lura għall-browser.
Jien jsir. Kull dritt.
Għalhekk, l-aħħar ħaġa Jien tagħmel stabbiliti hawn
u dan huwa kemmxejn arbitrarja u maħsuba biex ikunu friski,
huwa jien javżak l- server finalment biex jisimgħu
fuq TCP ċerti minn port default.
Recall mill-bidu ta 'klassi li s-servizzi -
jew inti tipikament unikament identifikata minn numri,
AD huwa l-web, 443 hija bbażata HTTP websites, 22 huwa SSH, 21 huwa FTP
u 1337 huwa biss arbitrarja iżda huwa ogħla minn 1024
li jfisser fuq l-aktar sistemi, I jistgħu jużawha
mingħajr il-bżonn super privileġġi utent.
Allura huwa biss konvenjenti.
Iżda 8080 hija off - komuni waħda, 8088, verament xejn big
fil-eluf bħala komuni iżda dan huwa biss elite aktar.
Kull dritt, hekk dak li jiġri meta I attwalment tmexxi dan?
Well, I ma biss żjara il-paġna fil-browser.
Dan il-fajl huwa msejjaħ server-0.js.
Minħabba darb'oħra, Apache huwa issa out ta 'l-istampa
għall-aħħar nofs tal-kors.
Jekk irrid web server, I bżonn jiktbu
u mbagħad run din il-web server.
Iżda jirriżulta li JavaScript kemm min-naħa tal-klijent
u l-ġenb server huwa lingwa interpretat.
So, kollha I bżonn huwa interpretu.
Mela it's - jekk jinsistu li jimxu node u mbagħad server-0.js,
I tista 'jew ma tistax tara xi output jiddependi
fuq dak libreriji stajt inklużi, xejn ma jidher li jiġri.
Iżda let me jmorru lil browser u let me go
għall-istess indirizz IP tal-klijenti CS50 tiegħi.
Iżda dan jista 'biss kif ukoll tkun Mac tiegħi
jew PC tiegħi u mbagħad hit jidħol.
Li attwalment tidher qiesha Apache.
Dik hija bħall-direttorju elenkar ħarisna
fl-ewwel nofs.
Allura, dak li ma nagħmel ħażin?
Yeah.
[Rimarka inaudible]
Eżattament, right?
Għalhekk, Apache għadu jisma dwar il-port default 80.
Anke jekk I jistgħu jibdlu din, I idur off kollha flimkien
iżda huwa għadu għaddej.
Iżda dawn guys jistgħu ċertament jeżistu flimkien.
I sempliċiment għandek tpoġġi kolon 1337 u mbagħad forsi
jew forsi le slash fil- l-aħħar għall-aċċess din il-port
li dan is-server qed taħdem fuq.
U issa nara li hello, dinja marret lura.
U nista 'hit rikarigu bħala kemm drabi nixtieq,
huwa għadu jservu up paġna.
Tabilħaqq jekk I jiftħu Chrome ispettur, mur network
u mbagħad rikarigu-paġna kollha,
tinnota li fil-fatt dan kien it-talba li kienet mibgħuta.
Jekk I tħares lejn is-sors prima,
avviż browser tiegħi jibgħat kollha ta 'dawk l-affarijiet.
U allura l-rispons mill- l-server kien super sempliċi.
Hemm il-200.
Jekk mhuwiex wisq baxx fuq l-iskrin,
hemm il-tip kontenut.
U mbagħad node.js sort awtomatikament
għalija miżjuda d-data u kollha ta 'l-għalf ieħor
li browsers tipikament jistennew.
Allura, ejja biss tara check sanità ftit.
Let me jmorru lura għall-kodiċi fil server-0.js u let me -
kull darba mmur l-handler,
let me biss jgħidu console.log.
("Kellna viżitatur!").
I m'għandhomx bżonn li recompile jew xi ħaġa bħal dik,
huwa lingwa interpretat.
Allura issa, let me jmorru lura lejn il-paġna, rikarigu wieħed, tnejn,
tliet darbiet u jmorru Lura għall-tieqa tiegħi.
U issa nara dan.
Ukoll li stramba, Nara sitt linji.
Trivia web interessanti, għaliex ma I nikseb sitt talba ma tliet?
Yeah?
[Rimarka inaudible]
Yeah. Allura, kif inti tista 'taf il- ftit icon stupid fil-quċċata
tal-bar browser li ħafna
ta 'websajts użati Jista jkun crest Harvard,
din tista 'tkun logo tal-kumpanija jew xi ħaġa bħal dik.
Allura, browsers dawn il-jiem sort
ta presumptuously jagħmlu talba HTTP addizzjonali
għal kważi kull website li inti żżur verifika jekk ikun hemm
minn default fajl imsejjaħ favicon.ico
fil-direttorju istess il-fajl inti mitlub.
U jekk iva, li tqiegħed l-ikona hemmhekk.
Allura kollox aħna qed tara huwa eżattament dan.
U fil-fatt, ejja ara jekk irridu tista 'tara dan minflok tip
out biss, "Kellna viżitatur".
Let me imorru quddiem u output.
U jien biss jafu dan minn tħares lejn id-dokumentazzjoni.
Hemm proprjetà ġewwa ta ' talba oġġett imsejħa URL
li jiġri li jkun il-passaġġ
li kien mitlub fil-URL attwali.
Għalhekk, jekk I jistartja l-server sempliċiment billi jerġa jagħmel it node
fuq server-0.js u issa ma dan wieħed, tnejn,
tlieta u jmorru lura hawn.
Hemm hu.
Slash huwa dak I - il-bniedem mitluba
fil favicon.ico hija dak li l-browser huwa
presumptuously rikjedenti.
Iżda l-punt mhux Jittieħed favicon tant
imma kif l-server huwa operat.
Yeah?
>> Għaliex ma li jkollhom li jkun hemm xi talba?
>> Għaliex ma li jkollhom - min-natura ta 'kif HTTP xogħlijiet.
Allura, HTTP jistgħu jitolbu biss fajl wieħed fi żmien.
Browsers tista 'tkun intelliġenti dawn il-jiem
u jżommu l-TCP konnessjoni miftuħa.
Jekk ħadt CS143 jew ġeneralment familjari ma 'netwerking,
sabiex inti tista 'tikseb kisbiet fl-effiċjenza
billi jżommu l-network socket miftuħa
fit-teħid HTTP multipli talbiet serjalment fuqha
iżda dawn qed fajl wieħed kull talba.
Għalhekk, jekk inti żjara xi ħaġa simili -
I tfisser li aħna tista 'tmur aktar xi websites.
Jekk inti tmur għall - ejja pull up ispettur tal-Chrome hawn.
Hija tista 'tikseb timla aktar tal-paġna.
Mur fil-tab netwerk u mur www.cnn.com.
U meta inti żżur cnn.com, homepage tagħha -
browser tiegħek aktar atrociously jagħmel - għadhom jgħoddu.
OK. Mill-inqas 289 HTTP talbiet u għal darb'oħra.
U dan huwa għaliex meta inti żżur websajts partikolarment minfuħ,
dawn qed bil-mod li tagħbija minħabba kollha
tal-assi li qed tagħbija.
Għalhekk, jidher qisu 298.
Jista 'jkun hemm xi Ajax għaddej f'dan il-punt jew xi
tal-assi huma biss baxxi.
Għalhekk, kull wieħed minn dawn huwa talba individwali tmur lura
u lura, u lura.
U hu għalhekk li aktar kmieni, saħansitra jekk aħna tip ta tkellimna
dwar dan kemmxejn fancifully fejn inti tpoġġi l-tikketta iskrittura,
assolutament jagħmel differenza meta ikollok -
li jibdew li jkollhom ħafna tat-traffiku u ta 'ħafna
ta 'fajls qed tintalab.
U kull wieħed dan jirrappreżenta probabbilment immaġni, fajl midja,
fajl JavaScript, Fajl CSS jew simili.
Allura, aħna qed diġà sa xi 4 megabytes biss
li tħares lejn aħbarijiet lum.
Mistoqsija tajba.
Kull dritt.
Allura, liema huma wħud mill l-upsides għalkemm?
Dritt, nafu kif jagħmlu webpages diġà ma PHP.
U ħafna minnkom daħal il-klassi jafu Django
u Python jew rails ma 'Ruby.
Allura, għaliex għandna bżonn énième lingwa u l-infrastruttura?
X'inhu node.js partikolarment tajba fil jekk inti taf?
[Pause]
Xi ħaġa?
Nru? Yeah?
>> Jintbagħtulhom lura messaġġi.
>> Allura, jintbagħtulhom lura messaġġi.
Allura dan huwa veru u huwa veru għal raġuni aktar tekniku
u li node.js u verament JavaScript huwa partikolarment
ferm tajjeb biex mhux sinkroniku kodiċi,
jekk fejn inti toħloq l-illużjoni
jagħmlu multipli affarijiet f'daqqa.
Għalhekk, anki jekk dawn qed verament jiġri serjalment,
tabilħaqq f'ħafna każijiet, JavaScript kemm naħa tal-klijent
u server sekondarji hija kamin wieħed.
Liema jekk inti qed tieħu 161 jew saħansitra 61 ifisser li -
ta 'dan il-programm jafu,
l-interpretu jista litteralment biss tagħmel ħaġa waħda f'daqqa.
Iżda dan mhuwiex kbir għall- xi ħaġa bħal web server
fejn inti jista 'jkollhom għexieren jew mijiet jew forsi anke eluf
tal-utenti kollha jippruvaw għall-aċċess webpage tiegħek
fl-istess ħin ħafna.
And yet, li jissuġġerixxu li imexxuhom wieħed
wara l-oħra wara l- oħra speċjalment jekk xi
ta 'dawk it-talba kif rajna fuq CNN jistgħu jeħtieġu li jservu
up 300 fajls qabel ma inti anki jiksbu għall-utent li jmiss
li trid tara l-jgħid aħbarijiet.
Node.js jkun adattat aktar għal ambjenti bħal dik.
Minħabba dak li jiġri huwa kwalunkwe proċess kajman running
bħal qari fajl mill-disk jew referenza għad-database jew titkellem
għal xi server tan-netwerk oħra,
li għandha tendenza li jkollhom latency, right?
Jekk inti ma tieħu 61 jew 161 speċjalment kollha ta 'dan it-tip
ta 'servizzi periferali għandhom tendenza li jkunu ħafna aktar kajman
milli tagħmel xejn ġewwa ta ' l-istess RAM u l-istess CPU
li jgħidu f'dan il-każ il- server huwa attwalment taħdem.
Imma x'hemm sbieħ dwar node.js hija li inti tista '-
u JavaScript aktar ġenerali hija li inti tista 'tagħmel xi ħaġa
u mbagħad jgħidu, "Hmm, dan se
li tieħu me ftit millisekondi jew saħansitra ftit sekondi.
Let me tip ta 'furketta li off, " iżda mhux proċess veru.
U allura meta dan isir tagħmel proċess tmexxija li bil-mod
bħal ħtif ringieli minn database jew qari fajl. html
minn disk, se terġa 'lura lili pjuttost
minn lili jkollhom stenna għal dan.
Allura, biex jagħmlu dan aktar ċara.
Dan huwa mezz tiegħi ta ' tagħmel dan aktar familjari.
Kull dritt, għalhekk dan huwa l- Ħawwad Shack fil-pjazza.
Din hija tip ta ' paradigma komuni
biex jiġi spjegat asynchronicity.
Dan huwa attwalment tajba eżempju minħabba Ħawwad Shack
u Burger fit-togħma huma notevolment bil-mod għal dak li jagħmlu.
Iżda l-punt huwa li qed verament tajba fil tieħu ordnijiet
u jittieħdu l-flus tiegħek wara li inti tistenna għall-ikel tiegħek.
Għalhekk, dan huwa attwalment aħjar disinn mill-alternattivi.
Minħabba jissoponi inti timxi fil maħżen bħal dan u inti ltqajna
lejn il-quddiem tal-linja u int titqiegħed l-ordni tiegħek u inti tixtieq
biex burger, bħala l-aħjar I tista ' tgħid, hija tieħu mill-inqas ħames
jew aktar minuti biex fil-fatt tikseb burger.
Għalhekk, ikun xorta ta 'mudell ta' negozju bad
jekk waqt li qed jistennew għall tiegħek burger, Alice [ortografija jassumi]
u Bob [jassumi ortografija] u Charlie [ortografija jassumi]
u kulħadd huwa queuing lura int
u inti litteralment imblukkar il-linja ta 'stennija għall-ikel tiegħek.
Allura ovvjament, fil Ħawwad Shack
u l-ikel fast oħra postijiet ma tagħmel dan,
jagħmlu xi ħaġa bħal din.
Huma jagħtuk buzzer.
U huma tip ta ' inti tibgħat dwar mod tiegħek.
U huma inti sejħa lura minn jagħmlu dan jivvibraw ħaġa ftit
jew flash li tikseb l-attenzjoni tiegħek.
Għalhekk, dan huwa litteralment dak?
Xi ħaġa simili node.js ma.
Jekk node.js jew JavaScript b'mod aktar ġenerali qed jintuża
u l-programmer huwa intelliġenti biżżejjed
li tirrealizza, "Inti taf liema?
Tkun xi tkun I bżonn tagħmel id-dritt hawn tista 'tieħu xi numru
tal millisekondi jew f'sekondi.
Inti taf liema?
Let me imorru quddiem u mhux sejħa hija synchronously -
"Li hija Guy imblukkar kulħadd fil-linja, "-
let me imorru quddiem u tip ta 'pass aside
u sempliċiment sejħa lura myself
meta dik twila tmexxija ħidma tkun kompluta. "
U sejħa lura ta 'kors qed jalludi f'dan il-każ
għal funzjoni callback, a referenza għal chuck tal-kodiċi
li se tikseb esegwiti meta burger tiegħek hija lesta,
ħafna bħal dan ħaġa jkollha xi tip ta 'funzjonalità mibnija fil-
li jibda jivvibraw jew żanżin meta wasal iż-żmien għalik
li għandu jissejjaħ lura għall il-quddiem tal-linja.
Allura, dak ma dan jfissru f'termini reali?
Well, irridu mod ix-xogħol tagħna up.
Allura, let me imorru quddiem u jagħmlu din l-ewwel.
Fil server-1.js, let me ewwel jissimplifikaw il-kodiċi
hekk nistgħu jieħdu passi tarbija lejn problema aktar konvinċenti.
Dan huwa l-istess eżatt programm li I kiteb qabel.
Imma dak li nbidlet?
Hemm tip ta 'żgħira differenza sintattika
bejn dan u Verżjoni 0 mument ilu.
What jumps fuq jekk inti recall?
Yeah Cynthia [jassumi ortografija]?
[Rimarka inaudible]
Yeah. Allura issa, għandna linja tal-funzjoni li qed ikunu mgħoddija pulzieri
Imxejna gotten rid ta 'tip
tal inutilment jismu funzjoni handler.
Inutli biss li qabel anki ssejjaħ dan f'post wieħed,
I ma verament bżonn li jaħlux ħin jtuha isem
u jagħmilha aktar diffiċli biex aqra l-kodiċi fuq għal isfel.
Allura, ejja biss tiddikjara inline hija funzjoni anonimu.
U jien tagħmel żewġ affarijiet oħra.
Jien jagħmlu aħjar użu ta 'dot notazzjoni.
Allura bħal fil jQuery, lott ta 'node metodi jistgħu jiġu marbut b'katina flimkien.
B'tali mod li ladarba inti qed isir sejħa xi ħaġa, inti ma għandekx
jistennew biex linja ġdida u sejħa metodu ieħor,
Tista 'biss katina flimkien.
U għalhekk b'dan il-mod, nistgħu verament jissikkaw dan up.
Għalhekk, dan hu litteralment web server fil-ħames linji
tal-kodiċi total b'differenza mill -
kuntrarjament għal dak li inti tista 'normalment għandek tagħmel biex jistabbilixxu xi ħaġa up.
Jekk mmur server 2 issa, ejja tagħmel dan.
Fil server 2 - attwalment ejja terga 'lura għal dak server 2.
Ejja issa jiftħu Async-0.js u jindirizzaw dik il-problema fil-idejn.
Allura l-ewwel, ejja go quddiem u miftuħa
up Async-0.js fil-browser.
Allura Async-0, let me go Lura għall-browser.
Hit rikarigu.
U issa, dan huwa tip ta 'messaġġ ta' żball.
Tabilħaqq jien jaraw 500 fil ispettur Chrome.
Iżda let me aktar preċiż jitlob hello.txt.
OK. Għalhekk, dan jidher li qed jaħdem.
Allura Async-0.js ma jidhirx li iservu up xi ħaġa għal slash.
Hija għandha l-ebda appoġġ fajl default.
Imma jekk I espliċitament jitlob hello.txt,
li jidher li jkun ta 'sostenn.
Għaliex huwa li?
Well, dak li stajt marret hawn
u jsir huwa implimentat a web server super sempliċi
li turi fejn asynchronicity jistax ikun utli.
U li hija implimentata kif ġej.
L-ewwel, jien bl-użu Modulu HTTP darb'oħra,
iżda wkoll FS li probabbilment stands għall?
B'mod ġenerali fl CS, fajl sistema.
Fajl sistema OK.
Għalhekk raba FS, fajl sistema.
Kull dritt, iva, liema ma dan jagħti me?
Funzjonalità relatat ma fajls simili jkollna għadda,
jiftħu l-fajls, bil-miktub direttorji, qari direttorji
u kollha ta 'dak it-tip ta' għalf.
Allura issa avviż, dan il-kodiċi huwa l-istess bħal qabel,
joħolqu l-server, li jgħaddi fil funzjoni anonima.
Dan huwa tip ta 'diskriminazzjoni arbitrarja.
Din mhix ħafna web server sigur.
Fil-fatt, inti tista 'aċċess aktar kwalunkwe fajl fuq hard drive tiegħi
jew fuq li l-server hard issuq minn esekuzzjoni dan il-kodiċi
għaliex jien biss bl-addoċċ jekk wieħed jassumi li jien ser
grab x'ikun l-utent mitluba fil-URL.
U jien ser prefiss ma 'dot
hekk li jien marġinalment li jkunu bla periklu
billi qal kwalunkwe fajl li jistgħu talba għandha mill-inqas bidu
fid-direttorju kurrenti.
Of course hemm theddida hawn.
"Cause jekk minflok jinkludu liema?
Fil-triq tagħhom, jistgħu xorta ta 'xogħol madwar li wisq.
Dot, dot, right?
Għalhekk, jekk l-utent biss jitqiegħed dot, dot fil-URL, fit-teorija,
dawn jistgħu jibdew jkollna tiegħi - u jgħidu fajl password.
Għalhekk, din mhix maħsuba għandha titwettaq,
huwa maħsub li jkun sempliċi.
So here, I jkollhom varjabbli li huwa l-konkatenazzjoni tad dot
li huwa direttorju preżenti u t-talba URL
li rajna qabel ma bħal mmejla jew / hello.txt.
Allura issa, jiġrilha ftit aktar interessanti.
L-ewwel, avviż il-qiegħ.
Jien nisma fuq il- istess port bħal qabel.
Allura l-interessanti reali xogħol ġewwa ta 'hawn.
Kull darba talba taqa 'fil min-natura
ta 'dan il-kodiċi, dak am I tagħmel?
Jien ssejjaħ fajl metodu fajl taqra sistema,
tgħaddi fil-passaġġ li nixtieq li taqra.
U issa, dan huwa x'hemm interessanti hawn,
dan huwa billi l-implimentazzjoni fil-metodu mhux sinkroniku.
Inti ma tistax tikseb ritorn valur minn fajl jinqara.
Fl-avviż fatt, hemm espressjoni fuq ix-xellug ebda
lejn ix-xellug tal-fajl jinqara.
Hija ma ritorn valur.
Pjuttost, hija ssejjaħ a callback taħdimx meta hija lesta
biex jagħtuk lura risposta.
Għalhekk għal darb'oħra li jkun ċar, billi fl-imgħoddi,
fl-ipprogrammar ħafna lingwi, jekk int riedu
biex jaqra fajl tal-każ fil-punt PHP,
fajl underscore jiksbu jenfasizzaw kontenut,
għandek espressjoni tan-naħa tax-xellug kollox il-valur wara l -
qabel is-sinjal ugwali, dan ifisser li inti qed jassenjaw
għal dak varjabbli r-ritorn valur ta 'dik il-funzjoni.
Tista 'tagħmel dan fil node.js, iżda inti tipikament ikollhom
li jsejħu espliċitament sinkroniku verżjonijiet tal-funzjonijiet simili,
Naħseb li huwa jaqra sync file jew sync taqra file.
I nesa kif huma msemmija fiha.
U li jagħti inti valur tar-ritorn.
Iżda jekk dan il-fajl huwa fuq xi fajl sistema remota
jew disk huwa biss naturalment bil-mod, hija tista 'tieħu 10 millisekondi
jew 2 sekonda għal dan il-fajl li attwalment jiġu lura.
Sadanittant, l-ebda web oħra viżitaturi qed servis
mill websit tiegħek.
Inti imblukkar.
Dak hu sejjaħ imblukkar IO, input / output.
Allura hawnhekk, dan huwa ħafna aktar intelliġenti.
Għaliex dak node.js qed jiġri
jagħmlu mal-interpretazzjoni huwa dan li ġej,
li għaddej biex sejħa il-metodu file jinqara,
jippruvaw waħda l-fajl li ltqajna triq speċifikat mill-valur P.
U mbagħad jekk u meta huwa lest biex jagħtuk lura l-kontenut
tal-fajl P, tuża funzjoni firma tiegħu tinsab
permezz tal-konvenzjoni li ġej.
Żewġ argumenti, l-ewwel ta ' li hija forsi oġġett Error,
kapital E, huwa oġġett imsejħa Error jew Null
jekk ikun hemm l-ebda żball bħal dan.
U t-tieni argument - jieħdu raden - se tkun liema?
Huwa data sejjaħ ovvjament imma dak li huwa data b'mod aktar konkret?
>> Kontenut?
>> Il-kontenut ta hello.txt fl-eżempju I jinġibed
up fil-browser tiegħi mument ilu.
Allura fi kliem ieħor biex jaqra fajl u ħafna node.js funzjonijiet
bħal fil-ma jirritornawx valuri.
Huma jsejħu callbacks u jgħaddu
għal dawk callbacks dak kieku kienu tradizzjonalment
ritorn valur.
Il-rasu ta 'dan l-approċċ
li inti tista 'sejħa jaqra fajl a T0.
L-jista funzjoni callback ma 'jissejjaħ immarka waħda wara
biex ngħidu hekk fi T, huwa tista 'tissejjaħ T1000,
elf qurdien aktar tard.
Imma l-punt huwa li l- bqija tal-kodiċi fi dan il-fajl,
jekk ikun hemm kieku immedjatament jiġu esegwiti waqt node.js
u filwaqt li s-sistema fajl figuri barra kif jaqraw
dan il-fajl u jiksbu lura lilek.
Allura inti toħloq dan -
b'mod effettiv l-illużjoni
ta 'paralleliżmu filwaqt kiri proċessi running kajman mhuwiex
jimblokka l-għalf importanti, il-parti li servicing utenti.
Allura, kif nistgħu jimmaniġġjaw dan?
Dan huwa komuni ħafna paradigma node.js.
U hemm mod biss biex jissimplifikaw dan huwa aħna ser tara qabel flimkien.
I l-ewwel ċċekkjati jekk Error ma huwiex null.
Għalhekk, jekk mhuwiex falz Imbagħad kien hemm żball.
I do not know dak li hu, forsi l-fajl ma teżistix.
I ma kellhomx permessi.
Il-pathname hija żbaljata.
Kwalunkwe numru ta 'affarijiet tista 'tmur ħażin.
Għal issa, jien ser arbitrarju jirritorna l-500
li huwa żball server intern.
Xi ħaġa li marret ħażin.
I ma verament kura biex jiġu djanjostikati dan.
Allura, ejja biss tell l-utent huwa miksur.
U mbagħad, jien ser tagħmel res.end,
u dan huwa notazzjoni shorthand.
Ifakkar li l-aħħar time I ma res.write
u mbagħad I ma res.end.
Jekk inti biss tixtieq li tibgħat linja waħda tal-produzzjoni,
inti tista 'biss tagħmel dan kollu f'daqqa ma res.end ma 'argument,
u li għaddej biex tibgħat ikun x'ikun l-messaġġ ta 'żball hija
ġewwa ta 'dan l-oġġett għall-browser.
Kien pretty arki recall mument ilu.
Għandi l-ebda idea dak li din fisser ewwel daqqa t'għajn.
Imma meta I talab fajl li ma kinux jeżistu -
oops, għandna bżonn biex imexxu l-server mill-ġdid.
Meta I talab fajl li ma kinux jeżistu, EISDIR,
hekk xi ħaġa dwar ma jkun direttorju,
jekk nagħmel xi każwali string hemmhekk,
apparentement dan ifisser l- file ma jeżistux.
U dan għaliex kodiċi tiegħi huwa sempliċiment tgħid li tikteb
out x'ikun il-Prima Messaġġ ta 'żball huwa,
għalhekk mhux faċli ħafna iżda mill-inqas jien trattament tagħha.
Inkella, jekk ma kienx żball What am I tagħmel?
Istess ħaġa bħal qabel bżiq out 200 OK, a plain -
test / tip moħħ sempliċi u mbagħad bżiq out-data.
U hu għalhekk li jien jkollna l- kontenut ta 'hello.txt li ftit
biex tikkonferma jekk Fittixt fil hello.txt,
huwa litteralment biss hello, dinja.
U jekk I mibdula din hello, dinja, ħlief il-fajl,
terġa 'ssir l-server, rikarigu-paġna.
Issa, I nikseb li verżjoni.
So, I ħadthom verament ftit reimplemented web server
kif jeżistu għal ħafna snin iżda jużaw node.js.
Iżda nistgħu nagħmlu dan saħansitra aktar nadif.
Let me jiftħu Async-1.js.
Issa, avviż jien żżid modulu ieħor din id-darba,
apparentement l-modulu triq.
Issa, dan huwa tajjeb opportunità li tfittex
lejn dak id-dokumentazzjoni Dehra.
Node.js dokumentazzjoni.
Bħal PHP naħseb huwa attwalment pretty tajba
u straight quddiem.
Jekk immur għall node.js u Google u tfittxija għal passaġġ node.js,
dak li inti ser tara normalment rabta diretta ma 'URL
li nressaq up here mument ilu.
Allura / api huwa l-post uffiċjali li jmorru għall dokumentazzjoni.
U dak li inti ser tara fil-quċċata
ta 'dokumentazzjoni uffiċjali node tal hija kollha tal-metodi u
jew proprjetajiet ġewwa ta ' dan il-modulu partikolari,
wieħed minnhom huwa msejjaħ jissieħbu.
U jissieħbu hija l-funzjoni helper li għaddej biex ippermettuli
li ma jolqot bl l-pluses.
U għandu l-miżjud bonus kif tkun taf tara
mill-baċiri huwa wkoll normalizes-triq li tirriżulta.
Għalhekk, jekk l-utent jew għandek tikek jew tikek tikek jew kwalunkwe kombinazzjoni
ta 'dawk it-tipi ta' qarib mogħdijiet, fost l-upsides
tal-metodu ssieħbu hija li li għaddej biex tnaddaf kollha li sa
u jagħtuk canonical passaġġ mingħajr ebda
ta 'dawk tikek jew tikek dot.
Għalhekk, hija ħaġa tajba fil- ġenerali għas-sigurtà tal-anqas
jekk int iċċekkjar tal- ritorn valur li jien ma
f'dan il-każ sempliċi partikolari.
Imma jien ma jridu jużawh.
So, I issa joħolqu l-passaġġ ta ' ftit aktar programmatically
ma path.join minflok ta konkatenazzjoni prima.
Allura, li ftit aktar indaf minn qabel.
U issa avviż jien qed a ftit aktar intelliġenti minflok
minn sempliċiment bl-addoċċ jippruvaw jaqra l-fajl,
Jien ser attwalment sejħa fs.stat.
Għalhekk, jekk int familjari
ma 'livell baxx C funzjonijiet u C, anke PHP.
A lott ta 'libreriji jkollhom prospetti Eurostat Din il-funzjoni
essenzjalment istatistika fuq fajl, id-daqs fajl,
l-permessi, l-isem u affarijiet bħal dik,
u wkoll impliċitament jekk il-fajl jeżisti jew le,
u jekk huwa fajl jew direttorju
jew link simboliku jew xi ħaġa oħra.
Allura issa avviż, jien sejħa fs.stat.
U mbagħad apparentement skond għad-dokumentazzjoni,
I għandhom jingħataw lura fil-għan Error
jew Null segwit minn oġġett stats.
Imma ejja check dan, node.js.fs.
Hawn hu l-fajl dokumentazzjoni tas-sistema.
Let me tfittex stats.
Hemm ħafna aktar tal-funzjonijiet hawn.
Oops, li sync stat, fs.stat.
So here, huwa mhux sinkroniku stats (2).
Li jfisser jekk inti tiftakar mill-paġni ewlenin,
kapitolu 2 tal-paġna prinċipali,
li jfisser dan huwa litteralment biss implimentazzjoni node
tal-livell baxx stat funzjoni tas-sistema.
Għalhekk, il-callback gets żewġ argumenti, żball u stat
fejn stat huwa fs.stats joġġezzjonaw.
Mela ejja ara dak dan l-oġġett suppost lill-dehra.
Ejja ikklikkja l-hyperlink u nara li.
L-għan stats fih apparentement xi metodu helper,
huwa file, huwa direttorju, huwa mazz ta 'affarijiet oħra.
Hu l-"hija" file li I-kura dwar f'dan il-każ partikolari.
So here I go.
Jekk kien hemm żball, imbagħad let me biss isalvaw dan iż-żmien
u jassumu.
Jekk ikun hemm żball, kien probabbilment fajl 404 ma nstabx.
Dan jista 'jkun xi ħaġa oħra
imma jien qed ftit għażżien hawn biss biex tiffoka
dwar id-dettalji aktar interessanti.
Iżda għall-utent tal- għanijiet, fajl ma jinstabx,
jekk kien hemm xi żball jiddikjara l-fajl.
Inkella, let me jiċċekkja jekk il- fajl huwa tabilħaqq fajl attwali.
Hekk jekk mhuwiex file, dan jeżisti.
Hemm xi ħaġa hemmhekk iżda huwa probabbilment direttorju
jew forsi rabta simbolika
jew xi ħaġa oħra li l- funky fuq is-sistema fajl.
Jew il-mod, l-utent m'għandux jarawha.
Allura issa, jien biss se bżiq
out konvenzjonalment mhux awtorizzat 403.
Iżda għal darb'oħra biss konvenzjoni,
I setgħet tintuża xi ħaġa oħra fit-teorija.
U mbagħad fl-aħħarnett, let me jippruvaw jaqra l-fajl.
Allura, let me iscroll.
U issa avviż dan huwa fejn il-kodiċi jistgħu jiksbu messy ftit,
avviż li jien ssejjaħ tgħaddi fs.readFile
fl-istess triq, l-istess Callback kif l-aħħar darba,
sabiex il-verżjoni preċedenti.
U mbagħad jekk I d ​​isibu -
jekk jien ma jsibuha, I bżiq out ta '500.
U jekk I do jsibuha, liema linja huma aħna se tara hawn?
Aħna qed tmur biex tara d fs jiktbu header 200 probabbilment
u res.end jibgħat id-data attwali.
Iżda Avviż dan.
U dan mhux dimostrattiv tal-agħar każ.
Imma jien din is-sejħa stat minn hawn Għandi xi għalf.
Imbagħad, I jkollhom ieħor sejħa mhux sinkroniku hawn,
hekk aktar indentazzjoni.
Allura, biss tip ta 'jestrapola jekk inti tista minn hawn.
Liema problema tendenza li jinqalgħu il-lingwa bħal JavaScript
f'dan l-ambjent fejn inti ma għandekx valuri ritorn
iżda inti għandek dawn callbacks.
U ovvjament, dan huwa biss ħaġa stilistika-fatt
I iżommu indenting.
Imma jieħdu dan lill- pass li jmiss loġiku.
Ejja ngħidu kien hemm wieħed jew żewġ jew tliet funzjonijiet oħra
li I meħtieġa biex tesegwixxi dik kienu minn mhux sinkroniku natura,
u għalhekk inti biss tip ta ' iżommu indenting jħaddmuhom,
biex jimmaniġġaw minnhom, li jħaddmuhom.
Ikollok tip ta 'callback hell bħala nies sejħa hija
fejn kodiċi tiegħek tibda tikseb wiesgħa ħafna
u franchement verament diffiċli biex jinqara.
Peress li huwa, nista 'tip ta bilkemm tgħid li dan huwa tip ta 'fluss
li għandha dan it-tip
tal stylistically angolata ħaġa jiġri hawn fuq.
Għalhekk, dan mhux ideali għaliex dan malajr jista 'jsir
dens, anke jekk tnejn mhux sinkroniku ma jirrikjedix
tali big deal.
Allura, nistgħu jevitaw dan, id-dritt?
Inti jista 'jkollok glimpsed li I misclicked mument ilu.
Fid-dokumentazzjoni, tafu, jidher qisu hemm statSync.
U statSync ma tieħu callback bħala argument.
Huwa jieħu biss il-passaġġ minħabba hija apparentement ma dak?
Dan jirritorna eżempju ta fs.stats.
Allura dan jista 'jkun tiegħek ewwel istint, right?
Speċjalment jekk callback funzjonijiet
u asynchronicity huwa ftit ġdida għalik, franchement,
l-approċċ eħfef huwa probabbilment biss evitata l-problema kollha
flimkien, jmorru lura biex issolvi ta 'programmazzjoni stil CS101
fejn inti sejħa funzjoni jew metodu, lura l-valur,
sejħa, funzjoni lura il-valur,
, il-funzjoni lura l-valur.
And I jistgħu jużaw għalhekk fs.statSync
li huwa litteralment l-istess imma hija verżjoni sinkroniku
li jfisser dan jirritorna il-valur.
Hija ma jgħaddi valur għal callback.
Iżda għaliex kieku li probabbilment tkun workaround subottimali jirrikorru
funzjonijiet sinkronizzati?
Yeah?
[Rimarka inaudible]
Eżattament, hija tieħu żmien twil.
Int biss jonqos kollox stabbiliti.
Minħabba ferm simili Ħawwad Shack jew Burger fit-togħma, jekk ħassar
ta 'dawk buzzers u magħmula inti, il-klijent stand fuq quddiem
tal-linja sakemm l-ikel tiegħek hija lesta qabel anki tieħu l-ordni
tal-persuna lura inti ovvjament
permezz put imewwet.
Nies jibdew jitilqu, inti tip ta 'tiġbed pakketti.
Inti tista 'tagħmel kwalunkwe numru ta 'analoġiji hawn.
Iżda fil-qosor, huwa probabbilment mhix ħaġa tajba
għan-negozju jew għall-server.
Kodiċi Allura mhux sinkroniku hija tipikament tajba mill-inqas
f'dan il-każ, iżda definittivament jibda jikkawża xi Angst.
U fil-fatt I DARE ngħid meta ewwel bil-miktub dan il-għalf,
li ser tieħu ftit daqsxejn ta 'jkollna użati biex.
Allura, ejja nibdew biex jarmaw inti ma 'xi libreriji
u tekniki biex jagħmlu dan ftit aktar faċli.
Għalhekk, wieħed mill-aktar komuni libreriji huma libreriji popolari
dawn il-jiem, dan wieħed imsejjaħ async.js.
U bħal ħafna node.js libreriji jew moduli,
dawn huma kollha sors miftuħ.
Dawn kważi kollha jgħixu u jiksbu hub repożitorji li huwa tip
tal jsiru l-de facto post taħżen dawn l-affarijiet.
U allura hemm infrastruttura kollha
għall-installazzjoni dawn l-affarijiet imsejħa NPM, Node Pakkett Manager
li jekk int familjari ma EvanTube huwa tip
ta 'app simili jew app tikseb.
Jekk int familjari ma 'Red Hat u Fedora
bħal fil-appliance, huwa simili yum.
Imma hija node - huwa maniġer pakkett biss
għal dan l-ambjent partikolari.
Allura, nistgħu tniżżel u tinstalla affarijiet bħall-librerija Async
u wkoll ieħor imsejjaħ il- jenfasizzaw librerija jew modulu.
Iżda dawn fs safejn, HTTP, it-triq,
dawn huma kollha jiġu mibnija biex node.
Hekk jekk immorru għall-API docs, inti ser attwalment ara li jinbnew
fis node ikollok b'xejn mazz sħiħ ta 'moduli.
Imma ħafna nies sbieħ fuq l-internet għamlu għexieren
jekk mhux mijiet ta ' libreriji oħra
biex tagħmel affarijiet aħjar jew differenti.
Allura, ejja tagħti ħarsa lejn kif din il-librerija xogħlijiet.
Allura, ħafna din il-kodiċi identiku għall-mument.
I jkollhom triq li tkun maħluqa top up.
U issa jien ssejjaħ async.series.
Allura l-librerija Async, huwa biss librerija li jippermettilek
jgħaddu jew jgħollu tipikament ta ' funzjonijiet biex tikseb imsejħa wieħed
wara l-oħra biss għall tip ta ' jevitaw din il-kwistjoni indentazzjoni,
u verament ftit l mentali Angst li se jinqalgħu invarjabbilment
inqas meta inti l-ewwel adsa fl għal dan fuq tiegħek
mal-programmazzjoni asynchronously.
Bħal fil aside, jekk inti ħadt 161 u inti stajt trattati bis-serraturi
u jgħollu kondizzjonijiet u kull ta 'dan, il-kodiċi mhux sinkroniku
u ambjent bħal node.js huwa attwalment ħafna,
forsi ferm aktar sempliċi
milli fil-fatt bil-miktub kodiċi multithreaded.
Ghaċ għandek kodiċi multithreaded,
inti ma jkollhom kondizzjonijiet tqajjem.
Inti għandek għalfejn tinkwieta dwar żewġ ħjut fihom
għall-istess riżorsi disk jew memorja.
Il-sbuħija ta 'JavaScript
fil node.js huwa hemm litteralment biss ħajt wieħed,
li tfisser il-browser
jew il-server jista 'biss jagħmlu ħaġa waħda f'daqqa.
Huwa biss sa inti, l-programmer
li jżomm mudell mentali kif inti tip ta 'kju affarijiet
u figura kif li tordna kodiċi tiegħek.
Imma int qatt ma jkollhom għalfejn tinkwieta dwar jgħollu kondizzjonijiet
fil pjuttost l-istess mod fil- inqas bil-kodiċi prima bħal dan.
Għalhekk, huwa ftit diffiċli li grack hawn.
Imma - So let me tiftaħ l-docs għal ftit mument.
Il-librerija async.js li bl-istess mod huwa googleable ħafna,
jgħix fil-GitHub repot simili ħafna minnhom.
Ma naħsibx li huwa vaga, mhuwiex.
Let me iscroll għall-Aqra Me hawn.
Għalhekk, il-librerija Async jipprovdi mazz sħiħ
tal-metodi ġewwa ta 'dan.
Per eżempju, hemm metodu msejjaħ kull wieħed,
li jekk I ikklikkja dan biss biex tara docs tagħha għal mument,
din hija funzjoni jew il-metodu li jippermetti li inti tagħmel xi ħaġa
bħal erba kull imma b'mod parallel.
Huma qed kollha jiġri potenzjalment b'mod parallel.
U l-metodu kull wieħed minnhom huwa biss ser jirritornaw lilek meta kulħadd
ta 'l-iterazzjonijiet huma kompluti.
Allura forsi jigru wieħed wara l-ieħor.
Idealment, jigru essenzjalment b'mod parallel.
Iżda l-metodu ma sejħa lura int.
Ma buzz tiegħek buzzer sakemm l
mill-elementi għandek tennew fuq imlejt.
Għalhekk, huwa biss mod sabiħ
li jevitaw li jużaw sempliċi erba loop
iżda fil-fatt jagħmlu xi ħaġa asynchronously.
Iżda issa aktar dirett relatat ma 'dan l-eżempju,
avviż hemm dan metodu serje.
U let me biss pull up eżempju canonical sempliċi.
Allura l-libreriji Async, serje metodu jieħu fil kif implikat
mill-parentesi kwadri fil-firxa.
X'inhuma d-data tipi ta 'l-elementi
f'dan array bbażati fuq eżempju sempliċi?
Dan huwa firxa ta 'funzjonijiet.
Għalhekk fl C, inti kieku ssejjaħ minnhom jiffunzjonaw pointers.
Fil JavaScript, hemm aktar referenzi sew għall-funzjonijiet
jew funzjonijiet anonimi.
U dan ifisser biss, arrays
naturalment huma ordnati minn żero fuq up.
Għalhekk, huma żammew ordni li hija tajba
għal serje, "kawża serje mezz ta 'kors tagħmel xi ħaġa
sabiex ma parallelament.
Għalhekk, dan ifisser biss li din funzjoni se tikseb eżegwit,
allura dan wieħed, allura dan wieħed, dan wieħed, allura dan wieħed,
iżda ħafna hemm
sakemm finalment il fakultattiva callback huwa msejjaħ.
Għalhekk, avviż-paradigma hawn.
U anki jekk dan hija librerija Guy wieħed,
huwa rappreżentattiv tal- JavaScript paradigma komuni ħafna
tal darb'oħra bl-użu callbacks.
Allura, liema avviż inti tagħmel hawn.
Fl-ewwel funzjoni tkun għaddiet fl permezz ta 'dan array,
inti definit anonimu funzjoni biss bil-funzjoni.
Iżda avviż li apparentement skond din id-dokumentazzjoni,
dik il-funzjoni anonima għandhom jieħdu callback argument.
Li se jkun pointer jew referenza għal xi funzjoni
li inti għandek iċċempel meta tiegħek kodiċi hija lesta li jirritornaw valur.
Għalhekk għal darb'oħra, kuntrarjament għal ftit programmazzjoni tipikament proċedurali
fejn int użati biex Valuri jirritorna immedjatament
dik id-differenza wieħed ma użu ta 'librerija bħal din
fil-programmazzjoni mhux sinkroniku aktar ġeneralment, huwa meta inti lest
li jirritornaw valur minn database, minn fajl,
minn aritmetika espressjoni, huwa sa inti
li jsejħu l-funzjoni callback.
U l-ħaġa sbieħ dwar din il-librerija
jekk naqraw il docs aktar bir-reqqa hija li,
jekk u biss jekk kollha ta ' iż-żona callbacks imsejħa
mingħajr oġġett Error, se il-ħaġa sħiħa jirnexxu?
Allura fi kliem ieħor, jekk ikun hemm 2,
jekk ikun hemm 10 anonima funzjonijiet
f'dan array għalhekk f'din is-sensiela,
biss jekk kollha kemm huma jirnexxu,
se-callback fakultattiva finali jiġu kkunsidrati suċċess?
Jekk xi ħadd minnhom jonqos, kull funzjoni
wara li mhux se anke jiġu eżegwiti.
Għalhekk, huwa mod sabiħ ta 'tip li jkun hemm katina daisy
li aborts prematur jekk xi ħaġa tmur ħażin.
Allura biex tara dan fil-kuntest, hawn hija kif nistgħu jimplimenta mill-ġdid
dak il-programm ta 'qabel.
I nikseb il-passaġġ bħal qabel, għalhekk dan huwa l-parti faċli.
I kopja paste dan il-kodiċi iskeletru
mid-dokumentazzjoni hemm async.series parentesi miftuħa,
tiftaħ parentesi kwadri.
U issa avviż I jkollhom waħda funzjoni f'din bidu
tat-tieni, aħna ser tara fejn immorru minn dan.
U issa avviż, huwa ftit kumplessi fl-ewwel
iżda jiffoka biss fuq huwa linja b'linja.
Fs.stat ifisser jiksbu l-istatistiċi jew dak li mhux ta 'dik it-triq.
Sejħa dan callback meta jkun lest.
Dan il-kodiċi huwa l-istess bħal qabel.
Jekk ikun hemm xi żball, hemm differenza waħda issa.
Għal darb'oħra, il-paradigma komuni ħafna fl-ipprogrammar node.js hija
jekk xi ħaġa tmur ħażin u callback jeħtieġ li jkun jaf
li permezz tal-konvenzjoni, l-ewwel argument għal callback huwa għaddej
li tkun le, jekk kollox huwa tajjeb jew referenza għal oġġett Error,
kapital E. Huwa simili żball klassi li jeżistu globalment
iżda aktar fuq li xi żmien ieħor.
Allura billi tagħmel dan, jekk ikun hemm xi żball, x'inhu l-implikazzjoni?
Well bbażata fuq dak I qal li l-serje ma,
hija jekk xi ħaġa tmur ħażin, aħna biss tip ta 'trid
li abort-serje sħiħa funzjoni ta 'anonima sejħiet.
Għalhekk, huwa biżżejjed għalija li biss ritorn tgħaddi callback
fl-oġġett Error.
Għaliex jekk stat taw me back żball,
I tista 'toħloq ġdid Oġġett żball ta tiegħi stess,
imma jien ma verament kura għal,
I biss jixtiequ jgħaddu ikun x'ikun l- żball huwa li attwalment jiġri
so I tista 'tgħaddiha għal dan callback.
U biss sabiex ikunu ċari, l- ritorn mhix strettament neċessarja.
I essenzjalment tixtieq li tagħmel dan imma jien ridt issa do "ritorn;
/ / B'tali mod li mhux aktar kodiċi hawn tesegwixxi ".
Għalhekk għal darb'oħra ieħor komuni konvenzjoni JavaScript,
anki jekk int ma jirritornaw valur per se,
inti tixtieq li jgħaddu l-valur għall-funzjoni callback
iżda imbagħad inti tixtieq biex tieqaf eżekuzzjoni
tal-funzjoni int fil, il-mod trivjali
biex isir dan huwa biss għal sejħa jirritornaw hawn.
Iżda m'hemm xejn ħażin,
aħna qed biss tagħmel callback ritorn żball anki jekk li għaddej
li jirritornaw fil-valur mhux definiti.
Kull dritt, dan ma ritorn valur l-aktar probabbli.
All I jimpurtahom huwa imbark aktar twettiq.
Allura, conflation tiegħi ta 'dawn żewġ linji huwa biss Stylist
konvenzjoni biss biex jkollhom in-numru tal-linja
tal-kodiċi I biss kiteb 2-1.
Allura x'iktar?
Jekk ma jkunx hemm żball -
fil-fatt tkun ċara I tista 'wkoll tevita
li billi tagħmel jekk ieħor.
Iżda għal darb'oħra, ieħor paradigma komuni huwa check
għal żbalji tiegħek top up u mbagħad biss ritorn pjuttost milli jkomplu
għall-inċiż kodiċi tiegħek ma elses u elses u elses.
Hekk jekk mhuwiex file, issa, tafu,
Irrid li jimmaniġġjaw dan ftit apposta.
So here bħal fil Java jew C + + jew ftit lingwi oħra,
hawnhekk kif jista instantiate xi joġġezzjonaw għal tip tgħaddi żball
fil-messaġġ default tal mhuwiex fajl
u dan huwa biss kemmxejn arbitrarja.
Imma jien sinjalazzjoni żball ta 'tiegħi stess.
U dak ma dan l-aħħar linja preżumibbilment jfissru?
Kollox huwa tajjeb.
Jekk inti tgħaddi fil null għall- parametru żball, dan ifisser biss
permezz tal-konvenzjoni kollox huwa tajjeb.
Allura, dan ifisser dak se jiġri loġikament?
Jekk null jiġi mgħoddi għall-callback
li jfisser dan anonima funzjoni irnexxielu
biex ngħidu hekk.
Allura, dak li għandu l-serje metodu tippreċedi u issa do bbażati
fuq id-definizzjoni verbali preċedenti tiegħi?
[Rimarka inaudible]
Jimxu fuq il-li jmiss, id-dritt?
Kieku rritornaw mhux null valur, ikun biss abort
u mhux aktar anonimu funzjoni se tikseb imsejħa.
Iżda minħabba li ma jkunx, allura Dan ser jiksbu imsejħa jmiss.
Għalhekk, il-loġika hawnhekk huwa pjuttost l-istess bħal qabel
u aħna ser tara kif nodfa dan up aktar fil-mument.
I jirrealizzaw dan huwa tip ta 'lott
biex jassorbu kollha verbalment u viżwalment.
Imma issa avviż, it-tieni funzjoni anonima li nixtieq
li jesegwixxi fis-serje hija biex jippruvaw jaqra l-fajl.
Sejħa dan callback meta int lest.
Jekk ikun hemm żball, just sinjal huwa permezz tal-callback
sabiex il-bqija ta ' dan il-għalf aborts.
Null ritorn Else.
Imma għaliex jien tgħaddi f'żewġ argumenti?
Ukoll din id-darba jekk I taqra il-fajl u terġa 'lura
bħala varjabbli msejħa data,
Irrid li turi mhux biss kollox huwa tajjeb billi jirritorna null
għall-ewwel argument.
I jridu jirritornaw l-attwali data bħala t-tieni argument.
Għaliex jekk I taqra aktar fid-dokumentazzjoni,
Avviż dan l-aħħar blokki ta 'kodiċi bracket kwadru ifisser dak l-
aħħar tas-serje.
Kien hemm biss żewġ anonimu funzjonijiet f'din is-sensiela.
Jekk kien hemm żball hawn, imbagħad Naf li wieħed mill-links
f'din il-katina hekk li jitkellmu fallew.
Allura fi kliem ieħor, dan l-iżball se tkun oġġett Error
li huwa null jekk xi ta 'dawn guys fallew.
U jekk dan huwa l-każ, jien biss se bail out u jien ser
jiġifieri 400 li tfisser talba jonqsu,
dan huwa ferm ġeneriċi messaġġ ta 'żball.
U mbagħad, jien ser jistampa l-messaġġ ta 'żball.
Allura, jien ma bothering jkun anali super dan iż-żmien,
Jien ma jmur biex jiddistingwi bejn 500 u 404 u 403,
Jien biss tip ta ' addoċċ mewġa naħa tiegħi
u jgħidu xi ħaġa li marret ħażin.
Imma jekk xejn ma tmur ħażin,
Jien ser tibgħat din res.end tgħaddi din id-data.
Issa dan jistenna ftit cryptic.
Iżda għal darb'oħra jekk Naqra id-dokumentazzjoni,
it-tieni argument li din finali, callback finali,
il-Guy li s esegwita biss ladarba l-serje isir
eżekuzzjoni jew porzjon hemm ta ', dan se jkun array
ta 'kollha tat-tieni argumenti
li kienu għaddew għall-callback.
Issa, jirriżulta li l- biss link f'din is-sensiela
li attwalment ritorn lejn it-tieni argument huwa dan wieħed hawn.
Hekk jien ser issolvi ta fuq qabża tal-fidi sempliċement jużaw jissoponi
għall-mument li aħħar huwa metodu
li jagħtik l-aħħar elementi ta 'firxa.
Minħabba dan array thats jiġu mgħoddija
lili għandha żewġ indicies, żero u wieħed.
Huwa biss żero m'għandu l-ebda valur għaliex dan Guy prospetti -
ma jgħaddix fit-tieni argument iżda dan Guy ma.
Allura jirriżulta bracket zero xejn,
wieħed riŜultati bracket fiha dak,
jekk inti ħadthom ġew wara flimkien sa dan il-punt?
Il-fajl, il-hello, kontenut dinja preżumibbilment,
hekk li kif I attwalment jistampaw.
U let me finish dettall wieħed hawn.
Jekk nagħmel dan it-tip ta 'qodma iskola, jekk I rridu nġibu
fl-aħħar elementi, jekk I jistgħu do riżultati [-results.length 1],
dan huwa tip ta 'l- mod iskola antika
ta 'aċċess l-aħħar elementi fil - jew array indiċi żero.
Imma kif fil-ġenb, ifakkar li kelli din il-librerija
up here jenfasizzaw li permezz konvenzjoni huwa biss imsejħa
litteralment underscore karattru li mhuwiex speċjali,
hija biss jistenna jibred bħal sinjal dollaru ma għall jQuery.
Dan huwa biss helper metodu jenfasizzaw dot aħħar
li ma eżattament l-istess ħaġa.
U jekk inti stajt qatt użati qabel jenfasizzaw JS kemm
għall-kodifikazzjoni naħa tal-klijent
u l-ġenb server huwa librerija wonderfully utli
li kif ħafna nies deskritti huwa simili jQuery fih kollha
tal-metodi, in-nies xtaqu daħal mal JavaScript innifsu.
OK.
>> Allura, bħal pretty lili u I kien qed jara fis-serje,
għandek bħal callback bħala argument?
>> Iva.
>> Bħal meta inti attwalment bħal push li,
u bħal dak ma jfisser meta inti biss għandek
bħall callback u mbagħad do simili -
[Rimarka inaudible]
>> OK, mistoqsija tajba.
Allura, let me pull up il- paġna prinċipali Async hawn
jew id-dokumentazzjoni dwar GetHub.
Allura dan huwa l-canonical istruttura.
Jekk int sejħa jużaw dan partikolari serje metodu,
hemm żewġ partijiet kbar lilha.
Wieħed huwa firxa ta ' funzjonijiet anonimi
u tnejn huwa callback finali funzjoni li attwalment
eżegwita fuq ħafna aħħar tas-serje.
Issa, jekk aħna zoom a ftit aktar mill-qrib fuq l-ewwel
ta 'dawk l-affarijiet kbar, l- firxa ta 'funzjonijiet anonimi
minn rekwiżit ta 'dan dokumentazzjoni Guy għandha
li tkun anonima funzjoni li jieħu
f'wieħed argument imsejħa callback jew foo jew bar, ma jimpurtax
iżda huwa ssejjaħ dan callback.
U dan huwa tip ta 'buzzer tiegħek li Ħawwad Shack idejn inti.
Dan huwa l-mezz li bih inti tista 'ritorn valur
lill-klijent għaliex inti ma tistax biss ma litteralment ritorn.
Inti għandek tagħmel dan billi mod ta 'din callback.
Għaliex jekk ġewwa ta 'dan funzjoni xi kajman running
Kodiċi bħal database query, moqri l-fajl mill-fajl sistema,
inti ma tridx li tistenna hemm u l-blokk kulħadd,
inti tixtieq li jsejħu l-callback.
Għalhekk, dan huwa litteralment l-isem tal-argument.
Iżda bħal fil C, inti jkollhom funzjoni pointers.
Fil Java għandek Metodi tas-sistema ta 'referenza
u l-istess hawn fil JavaScript.
Dan huwa varjabbli imma tip hija funzjoni.
Allura sempliċiment billi tikteb isem tagħha jekk callback jew foo
jew bar, imbagħad parentesi miftuħa u parentesi qrib,
int eżekuzzjoni li fuq dik il-funzjoni.
U tgħaddi null li ifisser żball null u wieħed
li jfisser dan huwa l- data li nixtieq li jgħaddu pulzieri
U allura l-blokki li tkun ċara, dan huwa callback ieħor.
U mhuwiex sejjaħ callback,
hija biss kunċettwalment huwa funzjoni metodu callback
għaliex huwa msejjaħ skond id-definizzjoni
tal-librerija din awtur meta l-serje sħiħa lestiet
jew subsett tiegħu jekk żball ġara qabel.
Għalhekk, l-isem tal-funzjoni callback, ssejjaħ il-funzjoni callback,
isem tal-funzjoni callback, ssejjaħ il-funzjoni callback,
callback differenti jiffunzjonaw kollha flimkien.
>> Issa għandna bħal jiddefinixxu callback?
>> Le, għaliex dan Guy se jgħaddu fil-firxa tiegħek
funzjonijiet ta 'anonimi,
pointer għall-kodiċi jixtieq li tesegwixxi.
Eżattament, id-dritt.
Allura, jekk jogħġbok jgħidu li l- kodiċi gets ftit aktar sempliċi.
Għalhekk, jista '.
U jekk int simili me, jieħdu kumdità f'mill-inqas jafu,
hija tieħu filwaqt li jidraw dan.
Iżda nistgħu tnaddaf dan up ftit,
ma tarmi wisq fuq lilek iżda hawnhekk huwa varjazzjoni oħra
u l-użu ta 'metodu ieħor
fl-istess librerija imsejħa kaskata.
Il-rasu ta 'liema huwa b'differenza serje fejn kull
ta 'dawk anonima funzjonijiet eżegwiti essenzjalment
indipendentement minn kull wieħed mill-oħrajn.
Kaskata bħall jissuġġerixxi l-isem jippermetti l-funzjonijiet fuq nett
għal tip ta 'jgħaddi fil-valuri għall-funzjoni aktar baxx,
tip simili kaskata ta 'ilma.
Allura l-rasu ta 'dan hija li nista 'tip
ta jużaw dan għall-vantaġġ tiegħi.
Fil async.waterfall, avviż li ġej.
I tista 'biss sejħa fs.stat tgħaddi fil-passaġġ
I rridu nġibu statistika dwar.
U mbagħad tiftakar qabel I kellhom funzjoni anonima
li kellu żewġ argumenti ebda żball,
esults u mbagħad I imsejjaħ il- funzjoni callback manwalment?
Fi kliem ieħor huwa biss li jkun ċara, ifakkar li qabel
fil Async 2, I ma kollha ta 'dan ix-xogħol diżgustanti.
I imsejħa fs.stat għadda fl P,
ddikjarat anonima tiegħi stess funzjoni.
I imbagħad ċċekkjati jekk iżball huwa mhux null imbagħad Jien għamilt dan,
inkella I did li, b'mod ġenerali sbuħija ta 'wara konvenzjonijiet
bħal fil node.js hija li callback funzjonijiet b'mod ġenerali huma maħsuba
li jieħdu argument inqas wieħed, oġġett Error segwit minn żero
jew valuri aktar utli.
Allura avviż-paradigma hawn,
din il-funzjoni callback jien tiddikjara isegwi eżattament l-
paradigma li dan Guy librerija Async ma.
Li huwa li ngħid dan, għaliex am I-implimentazzjoni callback tiegħi stess
Metodu meta l-awtur ta 'dan librerija hu litteralment għoti me
fuq platter biex ngħidu hekk, funzjoni callback I jistgħu jużaw?
So, I jistgħu jgħaddu eżatt fil- referenza hu tani
sabiex immedjatament, diversi linji tiegħi
tal-kodiċi issir linja waħda tal-kodiċi.
Issa, fejn do we go ma 'dan?
Il-funzjoni li jmiss li Irrid li tesegwixxi,
l-anonimu li jmiss funzjoni f'dan array
tal-funzjonijiet ma dan li ġej.
Avviż ewwel stat huwa l-ewwel argument.
Allura xi ħaġa għandha mibdula diġà.
Issa, dan Guy li kiteb il-librerija -
u jien qal Guy minħabba li huwa Guy.
Dan Guy li kiteb din il-librerija huwa garanziji dokumentazzjoni
li jekk din il-funzjoni hawn jgħaddi me back oġġett Error
jew null segwita minn koma lista separati ta 'valuri oħrajn,
hu se jagħmel ċert li dawk valuri oħra huma mogħtija
għal din il-funzjoni anonima sabiex mix-xellug għal-lemin.
U dak li jintuża biex tkun biss funzjoni callback waħdu sempliċiment
isir l-aħħar argument.
Issa, jien ma nafx min jien jiffoka fuq biss tafu.
Imma issa, x'inhu l- jieħdu bogħod hawn?
Allura, nafu minn d-dokumentazzjoni
jew il-koppja qabel ta 'eżempji
li fs.stat finalment jistenna callback ma 'żewġ argumenti,
l-oġġett Error li hija Oġġett żball jew null segwit
b'referenza għall stats joġġezzjonaw.
Mela jekk naħseb dwar dan, Stats koma oġġett Error joġġezzjonaw,
li joqgħod fil-paradigma tal-librerija din il-persuna.
So, I tista 'sempliċement jgħidu għaliex I Nru tat-tieni argument
li huwa - li għaddej li tiġi mgħoddija mill fs.stat
għall-callback huwa żball, stats b'definizzjoni ta 'din il-librerija,
I tista 'tpoġġi t-tieni Isem tal-argument hawn
jew kwalunkwe I tista 'tibdel isem
jekk irrid segwit mill-callback hawn.
So, I jistgħu jgħaddu waħda valur minn hawn hawn.
Issa, kollha ta 'dan il-kodiċi għalkemm ċertament kemmxejn cryptic huwa
inqas pejst kopja għal l-aktar parti minn qabel.
L-unika differenza hija l-avviż hawn jien tiddikjara Error
joġġezzjona u issa nixtieq biex jiksbu ftit fancier.
I attwalment trid tkun taf liema l-iżball kien, hekk jien ser
li Tuck ġewwa ta dan l-oġġett a proprjetà arbitrarju imsejjaħ kodiċi
hekk li naf li dan mhuwiex fajl
li għandu jkun mhux awtorizzat, huwa ta 'HTTP 403.
Let me ftakar li qabel I jgħaddu l-oġġett Error
għall-callback.
U mbagħad fl-aħħar jippruvaw biex taqra il-fajl, hekk f'dan il-każ,
-kaskata, stajt miksur il-kodiċi mill żewġ passi kbar
fi tliet passi iżgħar.
Avviż tal-sbuħija hawn,
I tista 'sejħa fs.readFile tgħaddi fil-passaġġ.
U allura l-parti iebsa mentalment, hija I biss jgħaddu
fil callback l-Guy.
Il-ħaġa hu għoti me, jien ser jgħaddu għal fs.readFile.
Għaliex aħna qed kollha li jeħel għall-istess konvenzjonijiet,
ewwel argument għal callback huwa oġġett Error jew null segwit
minn koma jew separati lista ta 'għalf utli.
Allura, dak li tfisser issa u jekk I aqra d-dokumentazzjoni I ser tkun taf
dan, il-ħafna aħħar callback, dan Guy hawn barra
tal-parentesi kwadri va li tiġi mgħoddija fil-għan Error
jew null li I għandu jiċċekkja għal kif dejjem ma 'dan il-kodiċi hawn.
U mbagħad b'definizzjoni ta 'dan il-metodu
fid-dokumentazzjoni tal-Guy, l-aħħar valur irritornat
mill-metodu l-aħħar fil-firxa anonima tiegħi -
firxa tiegħi ta 'funzjonijiet anonimi.
Allura, dak ma taqra ritorn fajl
u jien jużaw ritorn laxk issa.
I tfisser dak ma taqra fajl pass bħala argumenti
għall-metodu callback mogħtija tagħha?
Żewġ argumenti, l-ewwel huwa oġġett Error jew null,
li kważi dejjem se tkun ir-risposta.
U t-tieni ħaġa sejjer li jkun dak għall-fajl taqra?
Il-kontenut tal-fajl, data kif aħna msejħa qabel.
Għalhekk, billi sempliċement iddikjarat li err, jirriżultaw,
u ċċekkja għal żball dan huwa tip ta 'boring issa.
Else, I do res.end tgħaddi f'dak riżultat.
Dan bla dubju se mhux sync perfettament
sakemm tkun attwalment tikteb it yourself.
Iżda għal issa, jieħdu bogħod mill-inqas il-fatt
li apparentement hemm dan paradigma komuni, fejn jekk aħna
u l-awturi tal-libreriji kull tip ta 'stick
ma 'din il-konvenzjoni ta 'metodi callback.
U l-ewwel argument huwa oġġett Error jew null.
U t-tieni u t-tielet
u r-raba oġġetti huma affarijiet aħna kura dwar u aħna sort
tar isegwu regoli u dokumentazzjoni.
Bdejna bil-kodiċi li onestament hija pjuttost ikrah.
U anki jekk l-aktar riċenti Eżempju huwa franchement tip ta 'hard
biex nagħlaq moħħ tiegħek madwar, huwa inqas viżwalment,
qisu huwa ħafna aktar stretta.
U ladarba ikollok komda ma 'dan, huwa daqstant faċli
u huwa għalhekk ħafna inqas suxxettibbli għall- bugs minn dak eżempju preċedenti.
Allura, let me juru aħħar ħaġa waħda hawn.
Din hija l-verżjoni tlieta.
U - Le, ejja leave dan wieħed waħdu.
Let me jmorru fi ftit affarijiet aħħar oħra bħala teasers.
Kull dritt, hekk server 2.
OK. L-ewwel, xi mistoqsijiet, Naf li dan huwa ħafna
imma int riedu aktar istruzzjonijiet, hekk?
Inti ma jgħidu tajba istruzzjoni bilfors.
Yeah?
[Rimarka inaudible]
Korretta, int essenzjalment klementi għal sistema operattiva
figura kif juggle kollha ta 'dawn il-blalen fuq il darba,
qari minn fajl, qari minn database.
U huwa dan is-server JavaScript innifsu li l-kamin wieħed.
U essenzjalment u fil-fatt,
hemm stampa waħda I ma tarmi up,
u mhuwiex neċessarjament dak kollu li illuminanti
imma forsi aħna ser jagħtu inti mudell mentali.
JavaScript innifsu u node
b'mod partikolari għandha dan hekk imsejħa avveniment loop.
Biha, inti tista 'taħseb tal node.js, il-programm,
huwa litteralment simili loop infinita.
Huwa biss loop selvaġġi, stennija u stennija u stennija,
tfittex għall-kompiti biex jitlesta.
U l-kompitu jista 'jkun, mur jġibu xi ħaġa minn database
jew Heres valur mill- database jew mur jiksbu dan il-fajl
minn disk jew Heres talba mill-utent.
Kwalunkwe tip ta 'avveniment, bħal l-avveniment browsers misjuqa,
sabiex il-server avveniment sekondarju misjuqa.
U xi wieħed minn dawk l-affarijiet jikkostitwixxu avvenimenti.
Allura xi ħadd fil node.js, just kiteb loop infinita,
a loop selvaġġi kbar, stennija għall-għalf li jiġri.
U kif Jittieħed ma jiġri, huwa jispiċċa fil-kju, right?
Ċertament, database tista 'ritorn valur.
U sistema fajl, il operattiva sistema tista 'ritorn valur
għal madwar l-istess ħin iżda hemm probabbilment se
li jkun hemm xi tordna lilhom.
U node.js se għandhom essenzjalment kju
bħal firxa kbira jew vector, xi struttura data
li l-bafers kollha ta 'dawk l-affarijiet.
Minħabba li jista 'litteralment biss jimmaniġġjaw wieħed minnhom fi żmien.
Allura, meta inti, l-iżviluppatur,
miktub mhux sinkroniku JavaScript Kodiċi użu mhux sinkroniku
funzjoni, int li jippermettu dan hekk imsejħa avveniment loop imorru
li l-qurdien li jmiss, id-dritt?
Għalhekk, sakemm inti immedjatament ritorn bħala kollha
ta 'dawn il-metodi mhux sinkroniku do simili fajl Aqra u stat,
huma jirritornaw lura immedjatament minħabba li l-callback eventwalment
gets lura.
Hekk kif inti tirritorna,
dan ifisser xi ħadd ieħor jista ' nikseb popped off-istokk hawn
jew li jistgħu jiksbu popped off quddiem tal-kju hawn.
U għalhekk, hemm fil- fatt il serialization
ta 'dak kollu li qed jiġri,
anke jekk dawn kollha Jittieħed jistgħu jiġu jiġri b'mod parallel
fuq sistema multithreaded.
Iżda node.js innifsu u l-server kienu qed jaħdmu
bħala ħajt wieħed.
U l-ġenb stabbiliti ta 'dan huwa t inti ma neċessarjament max
out tal-kompjuter tiegħek kapaċità hija kif speċjalment
jekk għandek 16-qalba jew anki kompjuter 2 qalba
u int biss running eżempju wieħed node.
Imma jekk inti stajt darb'oħra jittieħdu xi ħaġa simili 161,
inti tevita ħmarillejl enormi ta 'ras meta niġu
razza kondizzjonijiet u serraturi u semafor
u l-kitba verament il- kodiċi multithreaded,
hekk upsides u negattivi.
OK. Allura, lura għall-kodiċi hawn, let me tipproponi li nibdew
biex tissimplifika l-affarijiet ftit.
Rajna server wieħed ftit ilu li dehru qishom dan.
Allura, li forsi pjuttost sempliċi.
Iżda biss bħal fid-dinja ta 'PHP, hemm oqfsa
bħal Laravel u hemm affarijiet simili binarji u Django,
istess ħaġa fid-dinja node.js.
U aħna ser jonfqu aktar żmien fuq dan l-Erbgħa
u fil-proġett li jmiss.
Imma jekk immur fi server 2 tad-direttorju,
Avviż paradigmi koppja hawn.
Allura dan huwa - hemm għaddejjin li hija eżempju ekwivalenti
imma hija użu ta ' qafas imsejħa express.js,
li huwa sors miftuħ b'xejn softwer bħal binarji u Django,
bħal Laravel, li biss finalment jmorru
li jkun unappreciated llum "Jikkawżaw aħna ħadthom ġie miktub
eżempji bħal dawn sempliċi.
Iżda trust magħna.
Dan se malajr ħafna issir ħabib tiegħek
għaliex se jiffrankaw inti ħafna ta 'kodiċi TDS.
U paradigma komuni għall- applikazzjoni express.js hija
Biex ikollhom app.js jew server.js fajl li jkun fih l-loġika
tal-programm tiegħek jew fuq inqas il-punt ta 'dħul.
Inti jista 'jkollhom fajls multipli.
A node modulu subdirectory li għandha l-libreriji
li inti stajt jitniżżel bħal Async
u tesprimi ruħha f'oħrajn.
U mbagħad package.json, package.json tidher bħal dan,
u inti tista 'toħloq manwalment jew għodod joħolqu dan għalik
u huwa litteralment fajl JSON
u l-parti interessanti huwa l-dipendenzi hawn.
Eżatt bħal fil Laravel, inti kieku dik direttorju bejjiegħ
u kellek ninkwetaw dwar pakketti u tagħmel -
attwalment aġġornament ma Artisan jew jikkmanda simili,
il-libreriji inti installati,
b'mod simili ma 'package.json hawn u inti tmexxi l-libreriji
u l-verżjonijiet li inti care about.
Allura, jekk ikolli package.json, I tista 'sempliċiment tagħmel NPM,
Node Pakkett Manager jinstallaw, li għaddej biex tfittex awtomatikament
f'dak fajl package.json.
Ħares u ara, do I l-aħħar verżjoni
tal-moduli kollha bejjiegħa
fil-node jenfasizzaw moduli direttorju hawn jew forsi
f'xi ġenitur jew direttorju antenat.
U jekk le, huwa ser tniżżilhom
u tkun taf tara mazz sħiħ
ta 'għalf HTTP għaddej madwar l-wire.
Allura per eżempju, let me nuruk l-kontenut
ta 'moduli glandoli biss li jesprimu.
Let me imorru quddiem u boldly tħassar moduli node
sabiex dawk kollha li għandi issa huwa dan.
U jekk jien NPM jinstallaw, inti ser tara li għaddej biex taqra
dan il-fajl package.json u Rajna output simili
għal dan fid-dinja Laravel.
Huwa tniżżil kollu mazz ta 'għalf u li
minħabba espressa min-naħa jiddependi fuq mazz sħiħ
tal-libreriji popli oħra.
Għalhekk, dawk kollha huma tip ta ' qed jitniżżel recursively.
Sa issa, jekk nagħmel LS ġdid,
hemm moduli node tiegħi direttorju lura
u jesprimu bħala back.
Allura huwa biss mod ta ' ġestjoni pakkett simplifikazzjoni.
Issa, jekk inħarsu lejn il- fajl app.js, dan se
li tkun riverżjoni għal web server kmieni tagħna
fejn aħna biss bżiq out "hello, dinja".
Iżda avviż l-mudelli hawn,
ewwel għandna bżonn l-express modulu, allura għandna din il-linja
tal-kodiċi li taf mid-dokumentazzjoni.
Inti litteralment jittrattaw dak varjabbli modulu bħala funzjoni,
qrib parentesi hekk miftuħa parentesi ifisser esegwit.
Li għaddej biex apparentament jirritornaw xi ħaġa li aħna qed tmur
ġeneralment sejħa ta 'app.
Kif taħdem?
I ma verament jafu.
I ser let xi ħadd ieħor, inti taf, fid-dinja espressa jiktbu dak.
Jien ser issa toqgħod fuq ispallejn tiegħu jew tagħha sabiex
jagħmlu l-applikazzjoni tiegħi tmexxija ta 'ftit aktar sempliċi.
Hawnhekk, jien ser jisimgħu fuq dak il-port partikolari
li jista 'jkun xejn aktar.
U hawn huwa kodiċi li l- forsi aktar reminixxenti issa
ta Laravel u routes.php.
Allura dan huwa supper sempliċi, jien biss se tispeċifika rotta
għal star slash, hekk kollox se tkun assorbita
billi din it-talba handler.
Il-paradigma għal talba handler hija l-funzjoni anonima tagħha
ma 'argument talba
u oġġett rispons bħad qabel.
U res.send fil-mezzi express inti tibgħat il-kodiċi segwit
bi kwalunkwe inti tixtieq li tibgħat.
U ovvjament, inti tista ' tagħmel xi ħaġa fancier
billi fil-fatt tibgħat fajls jew HTML
jew dinamikament iġġenerat kontenut.
Iżda għal issa, kollha għamilna kien bżiq out hello, dinja.
Jekk immorru fis server tlieta, dan huwa saħansitra fancier biss
biex turi li inti xi funzjonalità.
U aħna ser nuruk Verżjoni anki sexier
ta 'dan l-Erbgħa.
Imma jekk inti stajt qatt semgħu ta 'Socket IO forsi,
hekk kif naħseb Jonathan jew xi ħadd qal qabel,
waħda mill-affarijiet node huwa verament magħrufa
għal żmien reali tagħha imġieba, right?
Aħseb dwar PHP fil MySQL, jekk inti kellhom jimplimentaw chat server
fil-PHP li bih żewġ persuni jista ' tiftaħ tieqa browser li foo.com
u mbagħad tibda IMing kull oħra, Alice fil tieqa waħda,
Bob f'pajjiż ieħor sabiex kull wieħed minnhom jara tiegħu
jew messaġġi tagħha fil- -tieqa oħra.
Kif inti tagħmel dan fil-PHP u MySQL?
Jew ma għandhiex tintuża sort Laravel ta immaterjali, inti jista 'jkollhom
bħal fajl index.php.
U inti qbilna li jkollhom - fir- F'xi każijiet huwa ltqajna biex bżiq
barra tal-forma, b'hekk m'hemm l- se tkun forma HTML
li probabbilment jissottometti ma permezz sottomissjoni forma normali
iżda Ajax probabbilment, right?
Allura, on jissottomettu handler, hekk inti tip fi qasam tat-test,
inti hit jidħlu u mbagħad jiġrilha mibgħuta lill-server permezz Ajax.
What do inti mbagħad tagħmel fuq is-server?
Allura, inti ħadthom ltqajna index.php
jew xi ħaġa dot PHP li l- riċevuti fl-parametru HTTP
mill-utent, l-Alice jew Bob messaġġ instant, x'tagħmel
magħha sabiex jitkabbru dan Bob jew Alice, rispettivament?
I jfissirx li inti litteralment jkollhom l-għodda li bihom
tagħmel dan f'min tiegħek.
Allura bħal dak li għandek tagħmel?
Inti għandek minuta sabiex timplimenta dan il-programm.
Yeah?
[Rimarka inaudible]
Perfect. Dritt, hekk inti stajt ltqajna database.
Aħna nafu ftit ftit dwar MySQL.
Għalhekk, inti għandek tabella li l-messaġġi,
forsi hemm drabi timbru, user ID,
il-korp tal-messaġġ stess ħolqot dan,
aġġornati dak u kollha ta 'dak.
Allura, int taħżen f'database.
U jissoponi Alice jibgħat l- ewwel messaġġ, kif ma Bob jiksbu
dak il-messaġġ issa mid-database?
>> Jista 'jkun hemm xi Ajax rispons thats kontinwament għaddej
lura lill-database top jiksbu l-[inaudible].
>> Eżattament.
Allura kodiċi Bob li l-kodiċi l-istess bħal Alice huwa biss tip
ta 'relazzjoni simetriċi,
Browser Bob jkollha xi kodiċi Ajax li probabbilment forsi kull 30
sekondi ġbid tal- server permezz sync Ajax,
hemm messaġġi ġodda?
Hemm messaġġi ġodda?
Kull 30 sekonda va li jkun it-tip ta 'subottimali
għaliex għandha tistenna anki
jekk Alice litteralment biss mibgħuta il-messaġġ.
Allura, browser Bob tista kull tieni laqat il-server.
Iżda dan ifisser li Alice browser qed jolqot l-server
kull sekonda.
What about Charlie [Ortografija jassumi]
u David [jassumi ortografija] u Edward [jassumi ortografija]
u kull ittra oħra tal-alfabett?
X'hemm l-problema ta 'dan l-approċċ?
A lott ta 'hits eċċessivi -
I jfissirx li inti qed biss b'mod effettiv Dożaġġ vista tiegħek
jew DDOSing, Imqassam Ċaħda ta 'attakk Servizz
fuq is-sit tiegħek, billi kulħadd
ta 'dawn l-utenti run JavaScript kodiċi li jinsab biss pinging l-
Heck minn server tiegħek anke jekk numru arbitrarju,
80 fil-mija tal-ħin ebda wieħed qal xejn
fil-kamra chat.
Imma int iċċekkjar biss li tagħmel ċert li tali.
Allura PHP fil-lott ta ' lingwi huma biss mhux tajjeb
għal komunikazzjonijiet f'ħin reali.
Għaliex fil recall PHP hemm ebda memorja ċentrali, id-dritt?
Inti għandek sessjoni oġġetti li joħloq l-illużjoni
ta 'ħażna ċentrali imma li fuq bażi ta 'kull utent.
Inti ma għandekx memorja globali simili tagħmel fil Servlet Java
fil familjari jew oħra frame xogħlijiet bħal dik.
Node.js għalkemm, inti għandek memorja globali "kawża għandek
server wieħed u li "jista ' tiftakar xejn trid
madwar l-utenti kollha.
U inti tista 'xorta jkollhom database.
Imma l-ħaġa sbieħ dwar node.js wisq hija li huwa ħafna aħjar
minn xi ħaġa bħal PHP u joħolqu l-illużjoni
tat-tqandil multipli affarijiet f'daqqa.
U fil-fatt kif b'mod aside, inti tista ' jimplimentaw chat servers fil-PHP,
imma inti tipikament do xi ħaġa imsejħa polling twil
fejn inti ma ping l-server kull sekonda.
You ping-server, l- server ma tirrispondi lilek
għal fuq ta '30 sekondi, litteralment tpoġġi
fil-linja ta 'stennija u stennija.
U l-kontrolli server jekk hemm dejta ġdida fid-database
u biss ladarba inti tara, "Oh, Heres messaġġ mill Bob, "
ma wieġbux għall-server HTP?
Allura l-effett fil-browser tiegħek huwa li l-ikona IE jew Mozilla
jew kwalunkwe biss jżomm għażil għal 30 sekonda kull darba.
Iżda l-rasu huwa, inti ma jkollhom 30 talbiet konnessjoni
fi 30 sekonda, għandek wieħed.
Allura huwa msejjaħ votazzjoni twil.
Iżda anke aħjar fil-web moderna browsers hija xi ħaġa imsejħa
WebSocket, li tieħu l-CS143,
inti tista 'effettivament tagħmel Konnessjoni TCP minn ftit klijenti
bħal browser għal server u mbagħad tistrieħ fuq dan
mingħajr l-użu kważi kif ħafna riżorsi
kif HTTP tista tradizzjonalment do.
U Socket IO hija librerija node.js
li jagħmilha aktar faċli għall- jagħmlu l-konnessjonijiet sokit
jew illusions hemmhekk lejn għal browsers qodma
sabiex inti tista 'timplimenta dan ħin funzjonalità real.
Allura, hawn huwa eżempju.
Dan Jittieħed up top gets a ftit aktar kumplikata
iżda huwa aktar kopja u paste minn dokumentazzjoni tal socket.io.
Hawn issa aktar talba handler preċiża.
Jekk it-talba utent mmejla, dak file jien ser
li jkunu apparentament iservu up lilhom?
Index.html.
U hemm xi ġdid Jittieħed hawn stream
li jiena ser nuruk fi ftit mument.
Imma dan huwa biss mod ieħor
ħtif fajl a ftit aktar effiċjenti
milli sempliċiment tagħmel fs.readFile.
Huwa aktar intelliġenti ftit speċjalment għall-fajls kbar.
Storja sakemm qasir, dawn il-linji biss biex iservu
up fajl imsejjaħ index.html
li għal issa tassumi fih il-forma HTML bih Alice
u Bob jistgħu jinfdu.
Fl-aħħar nett, io.sockets.on, għalhekk dan ġej minn din il-linja up here.
Allura, jien biss qari tal- io.socket dokumentazzjoni tagħti me
aċċess għal hekk imsejħa WebSocket bi browser,
bejn il-browser u s-server.
Jien nisma għall speċjali konnessjoni avveniment li permezz
meta l-utent ewwel hits-server jippruvaw
li tiftaħ il-kuntest, jien ser sejħa din is-sejħa lura.
U issa, jien ser biex jagħmlu dan li ġej.
Kull ħames sekondi, dak li jien ser tagħmel?
Jien ser jarmu jew xandira jekk tiftakar scratch,
il-lingwa grafika kieku li blokki xandir?
Allura, int se temetti
jew jibdew l-avveniment imsejjaħ arbitrarjament mill-server.
U li għaddej biex jinkludu messaġġ Ping
u d-data attwali.
Għalhekk, din hija attwali chat server li Alice
u Bob jistgħu jużaw, imma hija tip ta 'chat server awtomatizzata
fejn il-messaġġi huma pings biss tip ta 'sonar.
Huwa biss data f'ħinijiet li huma qed jintbagħtu kull ħames sekondi.
Għalhekk, jekk I attwalment imexxu dan ħaġa - u thats it.
Biex ikunu ċari stabbiliti hawn, avviż dan huwa biss qtugħ stabbiliti hawn.
Allura, let me dawran għajnejhom għal dak.
Let me do node tal app.js.
Let me mur browser tiegħi.
Rikarigu-home page hawn.
[Pause]
U let me qrib l-ispettur.
Kull ħames sekondi, I jkollhom dimostrazzjoni anki jekk le
interattivi għall-bniedem
ta 'xi ħaġa li jiġri asynchronously.
Fl-avviż browser, hemm l-ebda icon għażil.
Huwa bl-użu karatteristika fancier ta 'Chrome fil-browsers moderni
ta 'żamma ta socket konnessjoni taħt il-barnuża
u huwa dak li sejjaħ ġeneralment pub / sub mudell,
jippubblika / tabbona mudell, fejn aħna ma jsir
li pjuttost espliċitament hawnhekk.
Imma x'hemm sbieħ dwar dan pub ġenerali / sub-paradigma hija
inti tista 'jkollha wieħed pubblikatur.
F'dan il-każ il- server ċentrali u kollha
tal-individwu browsers huma klijenti.
Alices u Bobs tal- dinja jistgħu jissieħbu magħha,
sabiex inti tista jitwasslu messaġġi fost kwalunkwe numru ta 'utenti.
U anki jekk għal darb'oħra aħna qed ma tara l-interattività,
kellna forsi 12 linji tal-kodiċi biss biex tagħmel dan.
U huwa probabbilment mhux qabża li wieħed jimmaġina kif inti tista 'Whip
l-fajl index.html li għandha forma HTML veru,
ftit ta 'kodiċi jQuery ma Ajax li ma tibgħat bi nhar
iżda biss jibgħat kwalunkwe Alice jew Bob tip lill-server
u allura l-server se relay it out.
U I wegħda li glimpse fl-aħħar ħaġa waħda biss
tease inti ma 'dan.
Jekk immorru fis-fluss żero u wieħed,
tkun taf tara kodiċi li jinsab biss ftit differenti hawn.
Just sabiex inti stajt tidher dan, din hija alternattiva
għal dak I imsejjaħ il-fs.readFile metodu aktar kmieni, li biha,
inti tista 'tgħid node.js, "Mur taqra dan il-fajl fil-memorja.
Imma jekk huwa big tagħti biss me chunk fi żmien. "
U inti tista 'taf minn CS165
jew 161-sistemi fajl jkollhom differenti
proprjetajiet prestazzjoni.
Inti tista 'tixtieq li taqra fi blokki ta '512 bytes
jew 2 kilobytes jew ikun x'ikun.
Dan huwa mod jottimizzaw ta ' jkollna lura tal-fajl iteratively
sabiex inti tista 'bżiq out ftit aktar malajr
għall-browser jew min-klijent aħħari huwa.
Ammont hekk kbir ta 'kontenut llum u aħna qed tmur biex adsa
aktar fid-dettall l-Erbgħa ma 'Tim [ortografija jassumi]
b'mod partikolari tħares lejn kif nistgħu jistgħu jittraduċu xi wħud mill-ideat
mill-ewwel nofs tas- kors Laravel u mudelli
ġo librerija li hu stess kiteb imsejħa Bookshelf.js
li hija ssir dejjem aktar popolari fil-komunità
minħabba li tagħtik aktar ta 'dan,
jekk mhux aktar mill- funzjonalità ta 'elokwenti
li recall huwa li ħarsa librerija ta Laravel,
hekk aktar fuq li u aktar kif
biex jiżviluppaw żviluppata sħiħa apps nhar l-Erbgħa.
Aħna ser tara imbagħad.