>> Rregull.
Pra cliffhanger ishte, ajo që është node.js si ju e dini se sot?
Çdo gjë? Po?
>> Ajo ishte si një Kuadri shkrim JavaScript
aplikacionet gjerësisht -
>> OK, që punon.
>> - E di si përdorime të zakonshme të tilla si -
apo diçka të mund të bëjnë është si -
[Padëgjueshëm Vërejtje]
>> OK mirë.
Yeah, kështu që është një kornizë.
Është një motor me të cilin ju mund të ekzekutuar kod Javascript
faqe server.
Kjo mund të thotë thjeshtë e gjërave
si shkruar një linjë komande script jo në Python ose Bash
ose Ruby ose PHP, por vetëm në vetë JavaScript
dhe ekzekutimin e tij në një keq komandë të shpejtë.
Ose ju në fakt mund të kandidojë ajo brenda një web server.
Dhe në të vërtetë brenda node.js vetë,
ky kuadër është një bandë e tërë të bibliotekave ndër të cilat janë të
në HTTP server ndërtuar-në.
Pra, ju në fakt mund të shkruani një server si ne do të shohim
në vetëm një moment, super të lehtë nga vetëm për të kuptuar pak
e HTTP dhe TCP dhe portet.
Dhe ju mund të pjellem një dëgjuarit web server pa Apache,
pa IIS Microsoft.
Pa ndonjë tjetër software të instaluar,
ju mund të pjellem vetëm këtë dhe të dëgjoni më të çdo port
në sistemin që ju jeni i lejuar për të.
Pra rasti dhe pikë, më lër të shkoj dhe të hapur
up këtë shembull, server-0.js.
Pra të vini re se në krye të këtë fotografi, vetëm një bandë
i komenteve jointeresant, dhe pastaj ka një çift
e linjave përfaqësuese të kodit se ne do të shohim recurringly.
Pra, var HTTP merr kërkojnë "HTTP".
Pra, të ndërtuar në të node.js ' Infrastruktura është një bandë e tërë
të moduleve të cilat janë me të vërtetë vetëm bibliotekat dhe çdo gjë është lloj
e hapësirës së emrit me Identifikuesi unik
si kjo është "HTTP".
Kështu që si në një shumë të gjuhë si Java dhe C + +
dhe C, vetëm kur të importit ose përfshijnë
ose në nyje të flasin kërkojnë një modul bën bit e saj.
Dhe të gjithë e kujtesës kërkon të marrë ngarkuar
në RAM dhe të përdorura për këtë arsye.
Pra, ju lloj i ngarkesës këtë Bibliotekat apo module të kërkesës.
Kjo do të thotë të shkojnë përpara dhe të kërkojë
për këtë program HTTP biblioteka,
dhe i referohen atij bibliotekë nga Rruga e një ndryshore të quajtur HTTP.
Por ky simbol i majtë mund të janë quajtur çdo gjë, foo,
bar, Baz, kjo nuk ka rëndësi.
Pra, ndryshe nga C + + dhe Java dhe C ku kur keni nevojë
ose importit një bibliotekë, ajo vetëm lloj
të bëhet globalisht të arritshme,
Modulet node.js janë më fort namespace.
Kështu që vetë - që funksionalitet është i arritshëm vetëm për momentin
me anë të kësaj emri ndryshueshme.
Ju nuk mund të fillojë Metodat e shtypni që ekzistojnë
në të drejtën e një mënyrë e cila është ndoshta e mirë,
sepse atëherë hapësira juaj nuk ka marrë gati si cluttered
si në shumë gjuhë.
Në rregull, kështu që tani të përbashkët sugjerojnë, duke krijuar një HTTP server
si Jonathan [supozuar spelling] ishte e mundur është fjalë për fjalë
aq e thjeshtë sa duke e quajtur krijuar metodën server brenda
HTTP modulit.
Pra, kjo po kthehet referencë
për një lloj të web server.
Ajo erdhi në Apache, nuk pesha domosdoshmërisht si e rëndë.
Kjo është pak më e thjeshtë.
Dhe tani, unë duhet të vetëm të thjesht të bëjë disa gjëra.
Pra, së pari, më lejoni të lëvizni poshtë në fund këtu
dhe kaloni mbajtës Metoda për një moment.
Dhe vini re këtë linjë të kodit,
server.on cila është në thelb do të thotë server -
dëgjoni si në kodin jQuery,
dëgjuar për një ngjarje quajtur kërkesa
dhe vetëm të marrë me mend çfarë duhet të bëj
kur një ngjarje kërkesa zjarret në server.
Po?
Telefononi >> mbajtës funksion.
Pra, fjalë për fjalë të ekzekutuar kodin që është referuar
nga ky variabël dhe në fakt jo një variabël për simboli këtu,
çfarë është që simbol referuar?
E pra, ky emër i funksionojnë këtu
dhe mbajtës me sa duket merr dy argumente.
Pse dy? E pra, në qoftë se ju vetëm lexuar asnjë dokumentacion
për këtë modul të veçantë, ju do të jetë i tha se mbajtës
që do të përdoret do të jetë kaluar të paktën dy argumente,
një referencë të kërkesës,
dhe në brendësi të kërkesës ne fjalë për fjalë do të thotë HTTP kërkesë.
Pra, të gjithë ata HTTP headers që ju të mund të të kujtojnë
nga fillimi i Semestri ose disa klasë para
ose përvojë si merrni e linjës dhe linjën presë
dhe linjë User-Agent, të gjithë e që është encapsulated dhe më shumë brenda
i këtij objekti kërkesës.
Dhe objekti përgjigja është të renditura për të dhënat e drejtuar për nga jashtë.
Pra, ju keni një referencë për një objekt që do të lejojë që t'ju
për të dërguar informacionin përsëri në shfletuesi duke e quajtur metoda
në këtë argumentin e fundit Res bëri thirrje për përgjigje.
Por kjo mund të quhet foo ose bar, kjo janë vetëm konventa.
Deri tani, çfarë të bëj?
E pra, duket se brenda e këtij web server super të thjeshtë
që unë jam zbatimin e, unë jam i do të bëjë të mëposhtme.
Unë jam duke shkuar për të shkruar një HTTP header me kodin e statusit 200,
200 kuptimi OK, të gjithë është mirë.
Dhe pastaj, unë jam duke shkuar për të kaluar në dukje.
Çfarë është lloji i të dhënave Argumenti i dytë në krye të drejtë?
>> Kjo është një objekt?
>> Kjo është një objekt me sa çelësat dhe vlerat?
Vetëm një e secilit, e drejtë, një vlerë e rëndësishme e palë.
Pra, 'lloj përmbajtje ".
Dhe e vetmja arsye Unë jam duke cituar këtu është
sepse vizë ndarëse mund të jetë conflated një shenjë minus
ose diçka të tillë.
Pra, unë kam për të japin kuotën e tyre këtu, përzhit ose kuotat dyfishtë.
Por përsëri paradigmë të përbashkët
në kodin JavaScript është shpesh Kuotat e vetme këto ditë,
trashë dhe pastaj vlera.
Pra, kjo është vetëm ashtuquajtura lloj mendje.
Kjo është një HTTP header kjo është fjalë për fjalë do
të jenë të përmbajtjes së trashë lloj vizë ndarëse Teksti slash qartë se po ndodh
për t'u dërguar nga server me shfletuesin
kështu që shfletuesi di nëse për të drejtuar këtë tekst si lëndë të
ose HTML ose si një imazh apo një film
ose një fotografi flash ose çdo gjë tjetër.
Tani, ku mund të vërtetë dua të dërguar në trupin e faqes?
E pra, vetëm nga leximi dokumentacioni
për objektin përgjigje brenda kësaj biblioteke.
Unë shoh se ka një të drejtë Metoda dhe që merr një varg,
ndoshta gjëra të tjera, por minimalisht një varg.
Dhe string është ajo që është nxjerr nga goja për të shfletuesit.
Në këtë rast super saj e thjeshtë, bota e saj hello,
por ajo mund të jetë opne kllapa, html, kllapa të ngushtë,
Kreu kllapa e hapur, të ngushtë kllapa dhe kështu me radhë,
kjo mund të jetë html lëndëve.
Por ne jemi duke e mbajtur shembullin thjeshtë me vetëm pështyrë
nga e thjeshta të llojeve mendje e cila është ndoshta text / plain.
Dhe pastaj response.end vetëm do të thotë të mbyllur lidhjen
dhe për të dërguar çdo gjë që kam lloj i zbutur brenda
i këtij objekti mbrapa për të shfletuesit.
Unë jam bërë. Dakord.
Pra, gjëja e fundit Unë jam duke bërë këtu
dhe kjo është disi e arbitrare dhe për qëllim të jetë i ftohtë,
po unë jam i thënë server më në fund për të dëgjuar
on TCP caktuar nga porti parazgjedhje.
Kujtojnë nga fillimi i klasit se shërbimet -
ose ju zakonisht unike identifikojnë atë me numra,
AD është web, 443 është i bazuar HTTP faqet e internetit, 22 është SSH, 21 është FTP
dhe 1337 është vetëm arbitrare por është më i lartë se 1024
që do të thotë më shumë sistemeve, unë mund të përdorni atë
pa nevojë super privilegjet e përdoruesit.
Pra, kjo është vetëm i përshtatshëm.
Por 8080 është në off - një të përbashkët një, 8088, me të vërtetë ndonjë gjë e madhe
në mijëra si të përbashkët por kjo është vetëm më shumë elite.
Në rregull, kështu që çfarë ndodh kur unë në fakt të drejtuar këtë?
E pra, unë nuk e vetëm vizitoni faqe në një shfletues.
Kjo skedë është quajtur server-0.js.
Sepse përsëri, Apache është tani nga foto
për gjysmën e dytë e kursit.
Nëse unë dua të web server, kam nevojë për të shkruar
dhe pastaj të drejtuar këtë web server.
Por kjo rezulton se JavaScript si në anën e klientit
dhe side server është një gjuhë e interpretuar.
Pra, të gjitha unë duhet është një përkthyes.
Pra it's - nëse insistojnë për të kandiduar nyje dhe pastaj server-0.js,
Unë mund ose nuk mund të shohin disa prodhimit në varësi
në atë që bibliotekat Unë e kam përfshirë, asgjë nuk duket të jetë ndodh.
Por më lejoni të shkoj në një shfletues dhe më lejoni të shkoj
në të njëjtën vendndodhje IP nga klientët e mi CS50.
Por kjo mund vetëm të si dhe të jetë e Mac im
ose PC tim dhe pastaj goditi të hyjë.
Kjo në fakt duket si Apache.
Kjo është si të directory renditur kemi shikuar
në në gjysmën e parë.
Pra, çka bëra gabim?
Po.
[Padëgjueshëm Vërejtje]
Pikërisht, e drejtë?
Pra, Apache është ende duke dëgjuar në portin e parazgjedhur 80.
Edhe pse unë mund të ndryshojë atë, Unë mund të kthejnë atë të gjithë së bashku
por është ende running.
Por këta njerëz mund të sigurisht bashkëjetojnë.
Unë thjesht duhet të vënë zorrës së trashë 1337 dhe pastaj ndoshta
ose ndoshta jo një slash në fundi për të hyrë në këtë port
se ky server po kandidon në.
Dhe tani shoh që hello, bota është kthyer.
Dhe unë mund të goditur ringarkoni si shumë herë që unë dua,
është ende duke shërbyer një faqe.
Në të vërtetë në qoftë se unë të hapur Chrome-së Inspektori, shkoni në rrjet
dhe pastaj rifreskoni faqen e tërë,
vini re se në të vërtetë kjo ishte kërkesa që i është dërguar.
Nëse unë shoh në burim Raw,
njoftim shfletuesin tim dërgon të gjitha ato gjëra.
Dhe pastaj përgjigje nga server ishte super e thjeshtë.
Ka 200.
Në qoftë se kjo nuk është shumë e ulët në ekran,
nuk është lloji përmbajtjen.
Dhe pastaj node.js lloj automatikisht
për mua shtuar datën dhe të gjitha sende të tjera
se shfletues zakonisht presin.
Pra, le të shohim një pak kontrolloni mendje e shëndoshë.
Më lejoni të kthehemi në kodin në server-0.js dhe le të më -
çdo herë që unë shkoj në mbajtës,
më lejoni të them vetëm console.log.
("Ne patëm një vizitor! ').
Unë nuk kam nevojë për të përpiluar apo diçka të tillë,
kjo është një gjuhë e interpretuar.
Deri tani, më lejoni të kthehemi në faqe, ringarkoni një, dy,
tri herë dhe të shkojnë mbështetur në dritaren time.
Dhe tani unë e shoh këtë.
E pra kjo është e çuditshme, Unë shoh gjashtë rreshta.
Interesting web vogëlsira, pse I merrni gjashtë kërkesë jo tre?
Po?
[Padëgjueshëm Vërejtje]
Po. Pra, siç mund ta dini pak icon budalla në krye
i shfletuesit bar që shumë
e faqet e internetit të përdorur fuqinë të jetë një kreshtë Harvardit,
kjo mund të jetë një kompani logo apo diçka të tillë.
Pra, shfletues këto ditë lloj
i mendjemadhësi allau ekber shtesë HTTP kërkesa
në pothuajse çdo faqe interneti që ju vizitoni kontrolluar nëse ka
parazgjedhje një skedar quajtur favicon.ico
në të njëjtën directory si file keni kërkuar.
Dhe nëse është kështu, kjo e vë icon atje.
Pra, të gjithë ne jemi duke parë është pikërisht kjo.
Dhe në fakt, le të shohim nëse ne mund ta shohim këtë në vend se llojin
jashtë vetëm, "Ne kishim një vizitor".
Më lejoni të shkojnë përpara dhe të prodhimit.
Dhe unë vetëm e di këtë nga duke kërkuar në dokumentacionin.
Ka një pronë brenda Kërkesa objekt quajtur URL
i cili ndodh të jetë rruga
që është kërkuar në aktuale URL.
Pra, nëse unë rinisni server thjesht duke rerunning nyje
on server-0.js dhe tashmë e kësaj një, dy,
tre dhe të kthehemi këtu.
Nuk është.
Slash është ajo që unë - njeriut kërkuar
në favicon.ico është çfarë shfletuesi është
mendjemadhësi kërkuar.
Por pika nuk është e aq shumë gjëra favicon
por se si server është operuar.
Po?
>> Pse se kanë të jetë një kërkesë?
>> Pse se duhet të - nga natyra e se si HTTP punon.
Pra, HTTP mund të kërkojë vetëm një skedar në një kohë.
Shfletues mund të jetë i zgjuar këto ditë
dhe për të mbajtur TCP lidhje të hapur.
Nëse ju mori CS143 ose në përgjithësi njohur me rrjeteve,
kështu që ju mund të merrni fitimet e efikasitetit
duke e mbajtur rrjetin fole hapur
në marrjen e HTTP shumëfishtë Kërkesat në seri mbi të
por ata janë një skedar për kërkesën.
Pra, nëse ju vizitoni diçka si -
Unë do të thotë që ne mund të shkojnë në shumica e ndonjë faqet e internetit.
Nëse ju shkoni në - le të tërheq lart Inspektori i Chrome këtu.
Ajo mund të merrni të mbushur më e faqes.
Go to tab rrjetit dhe të shkojnë në www.cnn.com.
Dhe kur ju vizitoni cnn.com, homepage e saj -
shfletuesi juaj në vend atrociously bën - ende e numërimit.
OK. Të paktën 289 HTTP Kërkesat përsëri dhe përsëri.
Dhe kjo është arsyeja pse kur ju vizitoni faqet e internetit veçanërisht fryrë,
ata janë të ngadalshëm për të ngarkuar për shkak të të gjitha
e aseteve ata janë duke u ngarkuar.
Pra, kjo duket si 298.
Nuk mund të ketë disa Ajax ndodh në këtë pikë ose disa
të aseteve janë vetëm të ulëta.
Kështu, secila nga ato është një Kërkesa individuale kthim prapa
dhe me radhë, mbrapa dhe me radhë.
Dhe kjo është arsyeja pse më herët, madje edhe pse ne lloj biseduar
në lidhje me të disi fancifully ku të vendosni tag script,
absolutisht e bën një dallimi kur ju keni -
ajo të fillojë të ketë një shumë e trafikut dhe një shumë
e fotografi duke u kërkuar.
Dhe secili prej kësaj përfaqëson ndoshta një imazh, një fotografi media,
një fotografi JavaScript, CSS skedar ose si.
Pra, ne jemi tashmë deri në disa megabajt vetëm 4
për të parë në lajmet e sotme.
Pyetje e mirë.
Dakord.
Pra, cilat janë disa nga e upsides pse?
E drejta, ne e dimë se si të bëjnë webpages tashmë me PHP.
Dhe shumë prej jush hyri për të klasë ditur Django
dhe Python apo me binarët Ruby.
Pra, pse nuk kemi nevojë për një tjetër Gjuha dhe infrastruktura?
Çfarë është node.js veçanërisht mirë në qoftë se ju e dini?
[Pushim]
Disa gjë?
Nuk ka? Po?
>> Relaying mesazhe.
>> Pra, përcjelljen e mesazheve.
Pra, kjo është e vërtetë dhe është e vërtetë për një arsye më shumë teknik
dhe se node.js dhe të vërtetë JavaScript është veçanërisht
i përshtatshëm për të asinkron Kodi,
në qoftë se ku keni krijuar iluzion
e duke bërë të shumta gjëra në të njëjtën kohë.
Pra, edhe pse ata janë të me të vërtetë ndodh në seri,
të vërtetë në shumicën e rasteve, JavaScript që të dy anën e klientit
dhe anë server është filetuar vetme.
Të cilat në qoftë se ju jeni duke marrë 161 apo edhe 61 do të thotë se -
e këtij programi e di,
përkthyesi mund të fjalë për fjalë vetëm të bëjë një gjë në të njëjtën kohë.
Por kjo nuk është e madhe për diçka si një server web
ku ju mund të keni dhjetra ose qindra apo ndoshta edhe mijëra
e përdoruesve të gjithë duke u përpjekur për të hyrë në faqen tuaj
në të njëjtën kohë.
E megjithatë, sugjerojnë se se trajtimin atyre një
pas tjetrit pas tjetrin sidomos në qoftë se disa
e atyre kërkesës si e pamë në CNN mund të kërkojë që shërbejnë
deri 300 fotografi para jush madje edhe të marrë në përdoruesit e ardhshëm
i cili dëshiron të shohë thotë lajmeve.
Node.js është më e përshtatshme për mjedise si kjo.
Për shkak se ajo që ndodh është çdo proces i ngadalshëm running
si lexuar një file nga disku apo po kërkoj një bazë të dhënash ose të folur
në një server të tjera të rrjetit,
që tenton të ketë latente, e drejtë?
Nëse ju ka marrë 61 apo 161 sidomos të gjitha të këtij lloji
e shërbimeve periferike kanë tendencë të jetë shumë më i ngadalshëm
se sa duke bërë asgjë në brendësi të njëjtë RAM dhe njëjtë CPU
që thonë se në këtë rast server është në të vërtetë running.
Por ajo që është e bukur për node.js është se ju mund të -
dhe JavaScript në përgjithësi është se ju mund të bëni diçka
dhe pastaj thonë, "Hmm, kjo do
për të marrë më një milliseconds pak apo edhe disa sekonda.
Më lejoni lloj paguaj që off, " por kjo nuk është një proces i vërtetë.
Dhe atëherë kur është bërë duke bërë proces i cili ngadalshëm running
si grabbing rreshtave nga një bazës së të dhënave ose lexuar një file. html
nga disk, ajo do të të kthehet në mua në vend
se unë, që të presë për të.
Pra, për ta bërë këtë më të qartë.
Ky është mjeti im i duke e bërë këtë më të njohur.
Në rregull, kështu që kjo është Shake kasolle në shesh.
Kjo është lloj i një paradigmë të përbashkët
për shpjegimin asynchronicity.
Kjo është në fakt një e mirë shembull sepse Shake kasolle
dhe Burger shijshme janë shumë të ngadalshëm për atë që bëjnë ata.
Por çështja është se ata janë të vërtetë mirë në të marrë urdhra
dhe duke marrë paratë tuaja pas të cilat ju prisni për ushqimin tuaj.
Pra, kjo është në fakt një më të mirë dizajn se alternative.
Sepse mendoj që ju ecni në një dyqan si kjo dhe ju mori
për të para të linjës dhe qe vendosur porosinë tuaj dhe ju doni
për Burger, si të mira unë mund të them, ajo merr të paktën pesë
ose më shumë minuta për të në të vërtetë të marrë një Burger.
Pra, do të ishte lloji i një modeli të keqe të biznesit
në qoftë se ndërkohë që jeni duke pritur për tuaja Burger, Alice [drejtshkrimit supozohet]
dhe Bob [supozuar drejtshkrimi] dhe Charlie [drejtshkrimit supozohet]
dhe të gjithë të tjerët është queuing pas jush
dhe ju jeni fjalë për fjalë bllokuar linjë duke pritur për ushqimin tuaj.
Pra, natyrisht, në Shake Shack
dhe ushqime të tjera të shpejtë vende nuk e bëjmë këtë,
ata e bëjnë diçka si kjo.
Ata ju jap një sirenë.
Ata lloj ju dërgojnë në rrugën tuaj.
Ata t'ju kthehet nga duke e bërë këtë gjë lëkund pak
ose flash për të marrë vëmendjen tuaj.
Pra, kjo është ajo që fjalë për fjalë?
Diçka si node.js bën.
Nëse node.js apo JavaScript më në përgjithësi është duke u përdorur
dhe programues është mjaft i zgjuar
për të realizuar, "Ju e dini çfarë?
Çdo gjë që unë duhet të bëni të drejtë këtu do të mund të marrë disa numër
i milisekonda apo sekonda.
Ju e dini çfarë?
Më lejoni të shkojnë përpara dhe të mos e quajti atë sinkrone -
"Që është bllokimi djalë të gjithë të tjerët në linjë, "-
më lejoni të shkoj përpara dhe të lloj të hap mënjanë
dhe thjesht të telefononi veten mbrapa
kur se drejtimin e gjatë Operacioni është i plotë. "
Dhe marr në telefon sigurisht është duke aluduar në këtë rast
te një funksion callback, një referencë në braktis të kodit
që do të merrni ekzekutohet kur Burger juaj është gati,
shumë si këtë gjë kanë disa lloj funksionalitete ndërtuar-në
se ajo fillon vibruese ose gumëzhimë kur është koha për ju
që do të quhet përsëri në përparme e linjës.
Pra, çfarë e bën këtë të thotë në terma realë?
E pra, ne duhet të punojnë rrugën tonë deri.
Pra, më lejoni të shkoj përpara dhe të bëjë këtë të parë.
Në server-1.js, le të më parë të lehtësuar kodin
kështu që ne mund të marrë hapa të fëmijës në drejtim të një problem më bindës.
Kjo është e njëjtë e saktë program që kam shkruar më parë.
Por çfarë ka ndryshuar?
Ka lloj i një të vogël Dallimi sintaktik
mes kësaj dhe Versioni 0 një moment më parë.
Ajo që hedhje nga ju, nëse ju kujtohet?
Po Cynthia [supozuar drejtshkrimi]?
[Padëgjueshëm Vërejtje]
Po. Deri tani, ne kemi një linjë nga funksioni i cili kaloi in
Ne kemi marrë shpëtoj nga me te
i quajtur kot funksion mbajtës.
Useless vetëm në atë që para madje edhe duke e quajtur atë në një vend,
Unë nuk duhet të vërtetë për të humbim kohë duke i dhënë asaj një emër
dhe duke e bërë të vështirë për të lexoni kodin e sipërme dhe të poshtme.
Pra, le të vetëm të deklarojnë inline është një funksion anonim.
Dhe unë jam duke bërë dy gjëra të tjera.
Unë jam duke e bërë më të mirë Përdorimi i dot simbol.
Pra, si në jQuery, shumë nyje Metodat mund te jete zinxhir bashku.
Kështu që një herë ju jeni bërë duke e quajtur diçka, ju nuk keni
për të pritur për një linjë të re dhe të thërrasë një tjetër metodë,
ju mund vetëm zinxhir ato së bashku.
Dhe kështu në këtë mënyrë, ne mund të me të vërtetë të shtrënguar këtë ide.
Pra, kjo është fjalë për fjalë një web server në pesë rreshta
e kodit totalit ndryshe -
ndryshe nga atë që ju mund normalisht duhet të bëni për të vendosur diçka deri.
Nëse unë shkoj në server 2 Tani, le ta bëjmë këtë.
Në server 2 - në të vërtetë, le të të kthehen në atë server 2.
Le tani të hapur dritaren dialogut-0.js dhe adresuar këtë problem në dorë.
Pra, së pari, le të shkojë përpara dhe të hapur
up Async-0.js në shfletuesin.
Pra Async-0, më lër të shkoj prapa për të shfletuesit.
Hit ringarkoni.
Dhe tani, kjo është lloj i mesazh gabimi.
Në të vërtetë unë jam duke parë një 500 inspektor në Chrome.
Por më lejoni të më saktë kërkojë HELLO.TXT.
OK. Pra, kjo duket për të punuar.
Pra Async-0.js nuk duket të shërbejë deri diçka për çaj.
Ajo nuk ka mbështetje parazgjedhur skedarëve.
Por në qoftë se unë në mënyrë të qartë kërkojë HELLO.TXT,
që duket të jetë mbështetur.
Pse është kjo?
E pra, ajo që unë kam shkuar këtu
dhe bërë është zbatuar një web server super e thjeshtë
që tregon ku asynchronicity mund të jenë të dobishme.
Dhe kjo është zbatuar si vijon.
Së pari, unë jam duke përdorur HTTP modul përsëri,
por edhe FS i cili ndoshta qëndron për?
Në përgjithësi në CS, file system.
Sistemi OK fotografi.
Për këtë arsye radhë FS, fotografi sistemit.
Në rregull, kështu që çfarë e bën këtë më jepni?
Funksione që lidhen me fotografi si duke u kaluar,
hapjes së dosjeve, shkrim directories, lexim directories
dhe të gjitha atë lloj stuff.
Deri tani vini re, këtë kod është e njëjtë si më parë,
krijuar server, duke kaluar në një funksion anonim.
Kjo është lloj i arbitrare.
Kjo nuk është një shumë e të sigurt web server.
Në fakt, ju mund të hyni në më çdo skedar në hard drive time
ose në server e vështirë makinë duke e këtë kod
sepse unë jam vetëm verbërisht duke supozuar se unë jam duke shkuar
për të rrëmbyer çdo gjë që përdoruesi kërkuar në URL.
Dhe unë jam duke shkuar për të prefiksit atë me dot
kështu që unë jam pak duke qenë të sigurt
duke thënë se çdo gjë që ata mund fotografinë Kërkesa ka të paktën fillim
në dosjen aktuale.
Natyrisht ka një kërcënim këtu.
'Cause nëse ata në vend përfshijnë çfarë?
Në rrugën e tyre, ata mund të lloj të punojnë rreth se shumë.
Dot, dot, apo jo?
Pra, në qoftë se përdoruesi vetëm vënë dot, dot në URL, në teori,
ata mund të fillojnë marrjen e tim - dhe thonë fotografi fjalëkalimi.
Pra, kjo nuk ka për qëllim për të siguruar,
është e caktuar të jetë e thjeshtë.
Kështu që këtu, unë kam një ndryshore e cila është varg i dot
e cila është e pranishme directory dhe kërkesa URL
cilën e pamë më parë është si çaj ose / HELLO.TXT.
Deri tani, ajo merr një pak më shumë interesante.
Së pari, vini re pjesën e poshtme.
Unë jam duke dëgjuar në njëjtë port si më parë.
Pra, vërtetë interesante Puna është brenda këtu.
Çdo herë që një kërkesë vjen në nga natyra
i këtij kodi, çfarë jam unë duke bërë?
Unë jam duke e quajtur fotografi Metoda lexuar fotografi sistemit,
duke kaluar në rrugën që unë dua të lexuar.
Dhe tani, kjo është ajo që është interesante këtu,
kjo është nga zbatimi në metodën asinkron.
Ju nuk mund të merrni një kthim Vlera prej lexuar file.
Në njoftimin fakt, nuk ka shprehje nuk ka majtas
në të majtë të lexuar file.
Ajo nuk kthehet një vlerë.
Përkundrazi, ai kërkon një callback funksionojnë kur ajo është e gatshme
për të ju jap përsëri një përgjigje.
Pra, përsëri të jetë i qartë, ndërsa në kaluar,
në programimin shumë gjuhë, në qoftë se ju të kërkuar
për të lexuar një rast skedarëve në pikën PHP,
fotografi underscore merrni theksojnë përmbajtjen,
ju keni një shprehje e majtë të dorës në të gjithë vlerën e pas -
para shenjë të barabartë, që do të thotë që ju jeni caktimin
në atë variable kthimi vlera e atë funksion.
Ju mund ta bëni këtë në node.js, por ju zakonisht kanë
për të thirrur në mënyrë eksplicite sinkron versionet e funksioneve të donte,
Unë mendoj se është lexuar sync fotografi ose sync lexuar file.
Kam harruar se si ata e quajti atë.
Dhe kjo do t'i jepte ju a vlera e kthimit.
Por në qoftë se dosja është në ndonjë sistem të largët fotografi
ose disk është vetëm natyrisht i ngadalshëm, ajo mund të marrë 10 milliseconds
ose 2 sekonda për këtë dosje që në fakt kthehen.
Ndërkohë, nuk ka web të tjera vizitorët janë duke u shërbim
nga websit tuaj.
Ju jeni bllokuar.
Kjo është ajo që quhet bllokuar IO, input / output.
Kështu që këtu, kjo është shumë më e zgjuar.
Për shkak se ajo që po ndodh node.js
për të bërë mbi të interpretimit është e mëposhtme,
ajo do të thërrasë metoda lexuar fotografi,
të përpiqen për një dorë dosjen që e mori një rrugë e specifikuar nga vlera P.
Atëherë, nëse dhe kur është e gatshme për të ju jap përsëri përmbajtjen
i skedarit P, ajo do të thërrasë një funksion nënshkrimi i të cilit është
nga konventa në vijim.
Dy argumente, e para e e cila është ndoshta një Error objekt,
Kapitali E, kjo është një objekt quajtur Gabim ose Null
në qoftë se nuk ka asnjë gabim të tillë.
Dhe argumenti i dytë - të marrë një mend - do të jetë ajo?
Ajo që quhet e të dhënave, por padyshim ajo që është e dhëna më konkretisht?
Përmbajtja >>?
>> Përmbajtja e HELLO.TXT në shembullin e unë u larguan
deri në shfletuesin tim një moment më parë.
Pra, me fjalë të tjera për të lexuar fotografi dhe shumë funksione node.js
si në të nuk kthehen vlerat.
Ata e quajnë callbacks dhe të kalojë
me ato callbacks çfarë do kanë qenë tradicionalisht
vlerë të kthehen.
Kokë e kësaj qasje është
që ju mund të telefononi lexoni skedar një T0.
Fuqia funksion callback mos të quhet një tik-tak më vonë
kështu që të flasin në T, ajo mund të quhet një T1000,
një mijë ticks më vonë.
Por çështja është se Pjesa tjetër e kodit në këtë dosje,
në qoftë se ndonjë do të menjëherë të ekzekutohet derisa node.js
dhe ndërsa sistemi fotografi shifra se si të lexuar
se fotografi dhe për të marrë ajo të kthehet tek ju.
Pra, ju e krijoni këtë -
kështu që në mënyrë efektive iluzioni
i paralelizmit ndërsa lënë proceset e ngadalshme running nuk është
bllokojnë sende të rëndësishëm, pjesa që përdoruesit servis.
Pra, si nuk kemi trajtuar këtë?
Kjo është një shumë e zakonshme paradigmë node.js.
Dhe nuk ka mënyrë vetëm për të lehtësuar kjo është ne do të shohim përpara së bashku.
I pari kontrolluar nëse Gabim nuk eshte null.
Pra, nëse ajo nuk është e rreme atëherë nuk ishte një gabim.
Unë nuk e di se çka është, ndoshta nuk ekziston.
Unë nuk kanë leje.
E file është e gabuar.
Çdo numër i gjërave mund të shkojnë keq.
Tani për tani, unë jam duke shkuar për të në mënyrë arbitrare të kthehen 500
e cila është gabim i brendshëm server.
Diçka shkoi keq.
Unë nuk e kujdesit të vërtetë për të diagnostikuar atë.
Pra, le të them vetëm përdoruesit është e thyer.
Dhe pastaj, unë jam duke shkuar për të bërë res.end,
dhe kjo është simbol stenografi.
Kujtojnë se fundit herë kam bërë res.write
dhe pastaj kam bërë res.end.
Nëse ju doni vetëm për të dërgoni një linjë të prodhimit,
ju mund të bëni të gjitha në një herë me res.end me argument,
dhe që do të dërgoni çfarëdo mesazh gabimi është
brendësi të këtij objekti për të shfletuesit.
Ajo ishte shumë e asfaltuar kujtohet një moment më parë.
Unë nuk kam asnjë ide se çfarë ky do të thotë në shikim të parë.
Por kur kam kërkuar një fotografi që nuk ekzistonte -
oops, ne kemi nevojë për të drejtuar server përsëri.
Kur kam kërkuar një skedar që nuk ka ekzistuar, EISDIR,
kështu diçka në lidhje me duke qenë directory,
në qoftë se unë bëj disa të rastit string atje,
me sa duket kjo do të thotë skedar as nuk ekziston.
Dhe kjo është për shkak se kodi im është thjesht duke thënë se për të shkruar
nga çfarëdo të lëndëve të Mesazh gabimi është,
kështu që shumë përdorues miqësore por të paktën unë jam trajtimin atë.
Tjetër, në qoftë se ajo nuk ishte një gabim çfarë jam unë duke bërë?
E njëjta gjë si më parë hell nga një 200 OK, një të thjeshtë -
text / plain lloj mendje dhe pastaj të nxjerr nga goja e të dhënave.
Dhe kjo është arsyeja pse unë jam marrë Përmbajtja e HELLO.TXT e cila sapo
për të konfirmuar nëse unë shikuar në HELLO.TXT,
kjo është fjalë për fjalë vetëm hello, bota.
Dhe në qoftë se kam ndryshuar këtë hello, bota, ruajtur kartelën,
përsëritje server, ringarkoni faqe.
Tani, unë të marrë atë versionin.
Pra, unë kam me të vërtetë vetëm rikrijohet një web server
siç është ekzistuar për shumë vjet, por duke përdorur node.js.
Por ne mund të bëjmë këtë edhe më të pastër.
Më lejoni të hapur dritaren dialogut-1.js.
Tani, vini re unë jam duke shtuar një tjetër modul këtë herë,
me sa duket modul rruga.
Tani, kjo është një e mirë mundësi për të parë
në çfarë dokumentacioni duket si.
Node.js dokumentacion.
Ashtu si PHP Unë mendoj se është në të vërtetë shumë e mirë
dhe i drejtë përpara.
Nëse unë shkoj për të node.js dhe Google dhe kërkimi për rrugën node.js,
ajo që ju do të shihni zakonisht është një lidhje e drejtpërdrejtë të një URL
që kam vënë këtu një moment më parë.
Pra / api është vendi zyrtar për të shkuar për dokumentacionin.
Dhe çfarë ju do të shihni në krye
e dokumentacionit zyrtar nyje-së është gjithë nga metodat e
ose pronat brenda të ky modul të veçantë,
një nga të cilat është e quajtur bashkuar.
Dhe të bashkohet është funksioni ndihmës që do të më lejoni
që të mos shqetësojë me të gjitha pluses.
Dhe kjo ka shtuar bonus si ju do të shihni
nga portet është ajo gjithashtu normalizes rrugën që rezulton.
Pra, në qoftë se përdoruesi ose ju keni pika ose dot dots ose ndonjë kombinim
e këtyre llojeve të afërm shtigjet, në mesin upsides
e metodës bashkuar që është ajo do të pastruar të gjitha që deri
dhe të ju jap një kanonik rrugë pa asnjë
nga ato pika apo dot dots.
Pra, kjo është një gjë e mirë në përgjithshme për sigurinë të paktën
në qoftë se ju jeni duke kontrolluar vlerë të kthehen të cilën unë nuk jam
në këtë rast të veçantë të thjeshtë.
Por unë kam dashur të përdorin atë.
Pra, unë tani të krijojë rrugën e a pak më shumë programuar
me path.join vend e varg Raw.
Pra, kjo është pak pastër se më parë.
Dhe tani vini re unë jam duke qenë një pak më shumë inteligjente në vend
se vetëm verbërisht përpiqen për të lexuar file,
Unë do të të vërtetë telefononi fs.stat.
Pra, nëse ju jeni të njohur
me të nivelit të ulët C funksionet dhe C, madje edhe PHP.
Një shumë e bibliotekave kanë këtë funksion stat kthimit
thelb Statistikat në një file, madhësia e skedës,
lejet, emri dhe gjëra të tilla si kjo,
dhe gjithashtu të nënkuptuar nëse skedari ekziston apo jo,
dhe në qoftë se kjo është një fotografi apo directory
ose lidhje simbolike apo diçka tjetër.
Deri tani vini re, unë jam i duke e quajtur fs.stat.
Dhe pastaj me sa duket sipas të dokumentacionit,
Unë duhet të kthehet në Error objekt
ose Null ndjekur nga një objekt stats.
Por le të kontrolloni këtë, node.js.fs.
Këtu është fotografi dokumentacion i sistemit.
Më lejoni të shikoni për statistikat.
Ka shumë më tepër e funksioneve këtu.
Na falni, se sync stat, fs.stat.
Pra këtu, kjo është asinkron stats (2).
Kjo është që do të thotë në qoftë se ju mbani mend nga faqet kryesore,
Kapitulli 2 i faqes kryesore,
që do të thotë kjo është fjalë për fjalë vetëm një zbatimi nyje
të nivelit të ulët stat funksion të sistemit.
Pra, callback merr dy argumente, gabim dhe stat
ku stat është një fs.stats kundërshtojnë.
Pra, le të shohim se çfarë ky objekt është menduar të duken si.
Le të klikoni hyperlink dhe unë shoh se.
Objekti përmban stats me sa duket disa metoda ndihmës,
është fotografi, është directory, është një bandë e gjëra të tjera.
Kjo është "po" skedar që më intereson për në këtë rast të veçantë.
Kështu që këtu unë shkoj.
Nëse ka pasur një gabim, atëherë më lejoni vetëm të shpëtuar këtë kohë
dhe të marrë.
Nëse ka një gabim, ishte e ndoshta një fotografi 404 nuk u gjet.
Kjo mund të jetë diçka tjetër
por unë jam duke u pak dembel këtu vetëm për të përqëndrohet
nga detajet më interesante.
Por, për përdoruesit e qëllime, file nuk është gjetur,
nëse ka pasur ndonjë gabim duke deklaruar skedarin.
Përndryshe, më lejoni të kontrolloni nëse skedë është me të vërtetë një fotografi aktuale.
Pra, në qoftë se ajo nuk është një skedar, ajo ekziston.
Ka diçka atje por kjo është ndoshta një directory
ose ndoshta një lidhje simbolike
apo diçka tjetër që është shokuar në file të sistemit.
Ose mënyrë, përdoruesi nuk duhet të shohin atë.
Deri tani, unë jam vetëm do të pështyj
nga konvencionale paautorizuar 403.
Por përsëri vetëm një konventë,
Unë mund të ketë përdorur diçka tjetër në teori.
Dhe pastaj në fund, le të më përpiqen për të lexuar file.
Pra, më lejoni të lëvizni poshtë.
Dhe tani vini re kjo është ku Kodi mund të merrni një çrregullt pak,
vëreni se unë jam duke e quajtur fs.readFile kalimi
në të njëjtën rrugë, njëjtë callback kohë si e fundit,
kështu që versioni i mëparshëm.
Dhe pastaj, nëse unë do të gjej -
në qoftë se unë nuk e gjeni atë, I nxjerr nga goja e 500.
Dhe në qoftë se unë do të gjeni atë, çfarë Linja do të shkojmë për të parë këtu?
Ne jemi duke shkuar për të parë fs shkruani header 200 ndoshta
dhe një res.end dërguar të dhënat aktuale.
Por këtë njoftim.
Dhe kjo nuk është e demonstrative e rastin më të keq.
Por unë kam këtë thirrje stat këtu se unë kam disa sende.
Pastaj, unë kam një tjetër thirrje asinkron këtu,
aq më shumë gjurmë.
Pra, vetëm lloji i nxjerrim në qoftë se ju mund të nga këtu.
Çfarë problemi ka tendencë të lindin me gjuha si JavaScript
në këtë mjedis ku ju nuk keni për vlerat e kthimit
por ju keni këto callbacks.
Dhe sigurisht, kjo është vetëm një gjë e stilistik fakti
që unë të mbajë indenting.
Por të marrë këtë për të hapi tjetër logjik.
Supozoni se ka pasur një ose dy ose tre funksione të tjera
që unë e nevojshme për të ekzekutuar atë ishin nga asinkron natyrës,
dhe për këtë arsye ju vetëm lloji i mbajtur indenting të merren me ta,
për të trajtuar ato, për të trajtuar ato.
Ju merrni lloj callback ferr si njerëzit e quajnë atë
ku kodi juaj fillon për të marrë shumë të gjerë
dhe sinqerisht të vërtetë e vështirë për të lexuar.
Siç është, unë mund të lloj mezi them se kjo është lloj i një rrjedhë
që ka këtë lloj
e stilistikisht angled gjë ndodh këtu.
Pra, kjo nuk është ideale, sepse kjo mund të bëhet shumë shpejt
i ngathët, edhe pse dy asinkron nuk e quan
tillë një punë e madhe.
Pra, ne mund të shmangur këtë, apo jo?
Ju mund të kanë hedhur një vështrim që Unë misclicked një moment më parë.
Në dokumentacionin, ju e dini, duket se nuk është statSync.
Dhe statSync nuk merr një callback si argument.
Ajo merr vetëm rrugën, sepse kjo me sa duket bën çfarë?
Ajo kthen një shembull i fs.stats.
Pra, kjo mund të jetë tuaj instinkti i parë, apo jo?
Sidomos në qoftë se funksionet callback
dhe asynchronicity është një pak e re për ju, sinqerisht,
Qasja më e lehtë është ndoshta vetëm të shmangur këtë problem të gjithë
së bashku, të kthehemi për të zgjidhur i programimit stil CS101
ku ju telefononi funksionin ose metodë, të kthimit vlerën,
telefononi funksion, kthimin e vlera,
funksion, të kthimit vlerën.
Dhe unë mund të përdorni për këtë arsye fs.statSync
e cila është fjalë për fjalë e njëjtë por kjo është një version sinkron
që do të thotë ajo kthehet vlera.
Ajo nuk ka kaluar një vlerësojmë për një callback.
Por pse do që ndoshta të ishte një workaround optimale të përdorë
të funksioneve sinkron?
Po?
[Padëgjueshëm Vërejtje]
Pikërisht, kjo merr një kohë të gjatë.
Ju jeni vetëm ngadalësuar çdo gjë poshtë.
Për shkak se shumë si Shake Shack apo Burger shijshme, në qoftë se ata hoqa qafe
nga ato sinjalizon dhe e bëri të, konsumatori të qëndrojë në front
e linjës derisa ushqimi juaj është gati para se edhe duke marrë rendin
e personit pas ju duket
me anë të opsionit të shitjes ngadalëson.
Njerëzit fillojnë të lënë, ju lloj nxjerrë pako.
Ju mund të bëni ndonjë numër i analogjive këtu.
Por me pak fjalë, është e ndoshta nuk është një gjë e mirë
për biznes ose për serverin.
Kodi Pra asinkron është zakonisht mirë të paktën
në këtë rast, por ajo patjetër fillon të shkaktojë disa Angst.
Dhe në fakt unë guxoj të them, kur parë shkruar këtë stuff,
ajo do të marrë pak pak e duke u përdorur për të.
Pra, le të fillojë për të pajisur ju me disa biblioteka
dhe teknikat për të bërë kjo pak më e lehtë.
Pra, një nga më të zakonshme Bibliotekat janë bibliotekat popullore
këto ditë, kjo e quajtur async.js.
Dhe si shumë node.js bibliotekat ose modulet,
këto janë të gjitha burim të hapur.
Ata pothuajse të gjithë të jetojnë dhe të marrin depove shpërndarës që është lloj
të bëhet de facto të vendosur për të ruajtur këto gjëra.
Dhe pastaj nuk ka një Infrastruktura e tërë
për instalimin këto gjëra quajtur NPM, Nyja Paketa Menaxher
e cila në qoftë se ju jeni të njohur me EvanTube është lloj
të app app ose si të marrë.
Nëse ju jeni të njohur me Red Hat-it dhe Fedora
si në aplikim, është si yum.
Por kjo është një nyje - është një menaxher paketë vetëm
për këtë mjedis të veçantë.
Pra, ne mund të shkarkoni dhe të instaloni gjëra të tilla si bibliotekë Async
dhe gjithashtu një tjetër i quajtur nënvizojnë bibliotekë ose modul.
Por këto fs si larg, HTTP, rrugë,
ata janë të gjithë të vijnë ndërtuar në në nyje.
Pra, nëse ne do të shkojmë në docs API, ju do të shihni se në të vërtetë ndërtuar
në nyje që ju të merrni për të lira një bandë e tërë e moduleve.
Por shumë njerëzit e mirë në internet kanë bërë dhjetra
në mos qindra e Bibliotekat e tjera
për të bërë gjërat më mirë apo ndryshe.
Pra, le të marrin një vështrim në se si punon kjo bibliotekë.
Pra, shumica e këtij kodi është identike për momentin.
Unë kam një rrugë duke u krijuar deri të lartë.
Dhe tani unë jam duke e quajtur async.series.
Pra, biblioteka Async, është e vetëm një bibliotekë që ju lejon
për të kaluar ose të rritur në mënyrë tipike të Funksionet për të marrë të quajtur një
pas tjetrit vetëm për të lloj shmangur që çështje vulë,
dhe me të vërtetë vetëm mendor Angst se pa ndryshim do të lindin
të paktën kur keni pikiatë në të këtë në tuaj
me programimin asynchronously.
Si në mënjanë, në qoftë se ju keni marrë 161 dhe ju keni marrë me flokët
dhe për të rritur kushtet dhe të gjitha e asaj, kodi asinkron
dhe një ambient si node.js është në të vërtetë shumë,
ndoshta shumë më e thjeshtë
se në të vërtetë shkrim Kodi multithreaded.
Çdoherë ju keni Kodi multithreaded,
ju keni kushte të rritur.
Ju duhet të shqetësohen për dy temat që përmbajnë
për burimet e njëjta disk ose kujtesës.
Bukurinë e JavaScript
në node.js është ka fjalë për fjalë vetëm një fije,
që do të thotë shfletuesin
ose server mund vetëm të bëjë një gjë në të njëjtën kohë.
Është vetëm deri te ju, programues
për të mbajtur një model mendor për se si ju lloj radhë gjërat
dhe kuptoj se si për të porositur kodin tuaj.
Por ju kurrë nuk keni për t'u shqetësuar për të rritur kushtet
në mjaft njëjtën mënyrë me ne paktën me kodin e lëndëve si kjo.
Pra, kjo është pak vështirë të grack këtu.
Por - Pra më lejoni të hapur e docs për vetëm një moment.
Biblioteka async.js cilat në mënyrë të ngjashme është shumë e googleable,
ajo jeton në Github repot si një shumë prej tyre.
A nuk mendoni se është paqarta, nuk është.
Më lejoni të lëvizni poshtë Lexo me mua këtu.
Pra, biblioteka Async ofron një bandë e tërë
e metodave brenda për të.
Për shembull, ka një metodë të quajtur secili,
e cila në qoftë se unë klikoni këtë vetëm për të parë docs e saj për një moment,
kjo është një funksion apo metodë që ju lejon të bëni diçka
si një katër çdo por paralelisht.
Ata janë të gjithë do të ndodhë potencialisht paralelisht.
Dhe metoda secili është i vetëm do të kthehen tek ju, kur të gjithë
e iterations janë të plotë.
Pra, ndoshta ato ndodhin njëri pas tjetrit.
Në mënyrë ideale, ato ndodhin në thelb në mënyrë paralele.
Por metodë nuk ka t'ju kthehet.
Ajo nuk ka lëvizje tuaj sirenë deri sa të gjitha
nga elementet qe kane rikonfirmoi gjatë kanë përfunduar.
Pra, kjo është vetëm një mënyrë e mirë
të shmangur duke përdorur një katër lak thjeshtë
por në të vërtetë duke bërë diçka asynchronously.
Por tani më të drejtpërdrejtë lidhur me këtë shembull,
njoftim ka kjo Metoda seri.
Dhe më lejoni të ndalem një shembull i thjeshtë kanonike.
Pra, biblioteka Async, seri metodë merr në të nënkuptuar
nga kllapa katrore në rrjet.
Cilat janë të dhënat llojet e elementeve
në këtë grup bazuar në një shembull të thjeshtë?
Kjo është një sërë funksionesh.
Pra në C, ju do të thërrasë ato funksionojnë pointers.
Në JavaScript, ka më shumë siç referohet në funksionet
ose funksione anonime.
Dhe kjo thjesht do të thotë, vargjeve
natyrisht janë urdhëruar nga zero në deri.
Pra, ata e kanë ruajtur një mënyrë që është e mirë
për një seri, 'shkaktojë seri natyrisht do të thotë të bëjë diçka
në mënyrë që të mos paralelisht.
Pra, kjo thjesht do të thotë se kjo funksion do të merrni ekzekutuar,
atëherë kjo, atëherë kjo një, kjo, atëherë kjo,
megjithatë shumë ka
deri në fund opsional callback është quajtur.
Pra, vini re paradigmë këtu.
Dhe, edhe pse kjo Biblioteka është e një djalë,
është përfaqësues i paradigmë shumë të zakonshme JavaScript
e përsëri duke përdorur callbacks.
Pra, vini re atë që bëni ju këtu.
Në funksionin e parë duke u kaluar në anë të këtë grup,
ju definuar një anonim Funksioni i vetëm me funksionin.
Por vini re se me sa duket sipas këtij dokumentacioni,
që funksion anonim duhet të marrë një callback argumentin.
Kjo do të jetë një tregues ose një referencë për një funksion
që ju duhet të telefononi kur tuaj Kodi është i gatshëm për t'u kthyer një vlerë.
Pra, përsëri, ndryshe nga për vetëm Programimi zakonisht procedurale
ku ju jeni duke përdorur për të vlera të kthehen menjëherë
që një ndryshim me duke përdorur një bibliotekë si kjo
në programimin asinkron më shumë në përgjithësi, është kur të jeni gati
të kthehen një vlerë prej një bazë të dhënash, nga një fotografi,
nga një aritmetikë shprehjes, kjo e deri tek ju
për të thirrur funksionin callback.
Dhe gjëja e bukur në lidhje me këtë bibliotekë
nëse lexoni docs më me kujdes është se,
nëse dhe vetëm nëse të gjithë zona callbacks quajtur
pa Error objekt, do të ketë sukses të gjithë gjë?
Pra, me fjalë të tjera, nëse ka 2,
nëse ka 10 anonim Funksionet
në këtë grup, pra, në këtë seri,
vetëm në qoftë se të gjithë ata të kenë sukses,
do callback final opsional të konsiderohet i suksesshëm?
Nëse dikush prej tyre dështon, çdo funksion
pasi ajo nuk do të edhe të ekzekutohet.
Pra, kjo është një mënyrë e mirë për të lloj e ka nje zinxhir daisy
se aborts para kohe nëse diçka shkon keq.
Pra, për të parë këtë në kontekst, këtu është se si ne mund të ri-zbatuar
se programi i mëparshëm.
Unë të marrë rrugën si më parë, kështu që kjo është pjesë e lehtë.
I copy paste këtë kod skelet
nga dokumentacioni atje async.series kllapë të hapur,
të hapur kllapa katrore.
Dhe tani vini re unë kam një të tillë funksion në këtë fillim
e një të dytë, ne do të shohim ku të shkojmë nga kjo.
Dhe tani vini re, kjo është një kompleks pak në fillim
por të përqëndrohet vetëm në kjo vijë nga linjë.
Fs.stat do të thotë të merrni statistikat apo jo atë të asaj rruge.
E quajnë këtë callback kur gati.
Ky kod është i njëjtë si më parë.
Nëse ka një gabim, ka një dallim tani.
Përsëri, paradigmë shumë të zakonshme në programimin node.js është
nëse diçka shkon keq dhe një callback duhet të dini
që nga konventa, i pari Argumenti në një callback është duke shkuar
të jetë jo, nëse është mirë apo një referencë në një Error objekt,
Kapitali E. Është si një Error klasë që ekzistojnë në nivel global
por më shumë për këtë një kohë tjetër.
Pra, duke bërë këtë, në qoftë se ka një gabim, çfarë është implikimi?
E pra bazuar në atë që unë tha seri e bën,
është në qoftë se çdo gjë shkon e gabuar, ne vetëm lloj duan
të ndërpresin shtatzëninë seri e tërë Funksioni i quan anonim.
Pra, mjafton për mua për të vetëm të kthehen callback kalimin
në Error objekt.
Sepse në qoftë se stat dha mua përsëri një gabim,
Unë mund të krijojë një të ri Gabim objekt të mi,
por unë nuk e kujdesit të vërtetë për të,
Unë vetëm dua të kalojë çdo gjë gabim është se në të vërtetë ndodhë
kështu që unë mund të kalojë atë në këtë callback.
Dhe vetëm të jetë i qartë, kthimi nuk është shumë e nevojshme.
Unë në thelb doni ta bëni këtë por kam kërkuar tani do "kthehen;
/ / Kështu që jo më shumë Kodi këtu ekzekuton ".
Pra, përsëri një tjetër të përbashkët konventë në JavaScript,
edhe pse ju nuk jeni kthyer një vlerë në vetvete,
ju doni të kalojë vlerën të funksionit callback
por pastaj ju doni për të ndaluar ekzekutimin
e funksionit ju jeni në, rrugën parëndësishëm
për të bërë këtë është vetëm për të thirrur të kthehet këtu.
Por nuk ka asgjë të keqe,
ne jemi vetëm duke bërë callback kthimit error edhe pse ajo do
të kthehet në vlerë të padefinuar.
Në rregull, kjo nuk të kthehen një vlerë shumë të ngjarë.
Gjitha që më intereson është një konvikt përmbarimin e mëtejmë.
Pra, conflation ime e këtyre dy linja është vetëm një stilist
të konventës vetëm për të kanë numrin e vijës
i kodit Unë vetëm shkroi 2-1.
Pra, çfarë tjetër?
Nëse nuk është një gabim -
në të vërtetë të jetë i qartë Unë mund të shmangur
se duke bërë qoftë tjetër.
Por përsëri, një tjetër paradigmë e zakonshme është kontroll
për gabimet tuaja deri të lartë dhe më pas vetëm të kthehen në vend se të vazhdojë
për të indent kodin tuaj me elses dhe elses dhe elses.
Pra, në qoftë se ajo nuk është një fotografi, tani, ju e dini,
Unë dua të trajtuar këtë pak posaçërisht.
Kështu që këtu si në Java ose C + + apo disa gjuhëve të tjera,
këtu është se si mund të ilustroj me shembull konkret një kundërshtojnë tipit gabim kalimin
në një mesazh të paracaktuar e jo një skedar
dhe kjo është vetëm disi arbitrare.
Por unë jam duke sinjalizuar një gabim të mi.
Dhe ajo që e bën këtë të fundit linjë me sa duket të ditur?
Gjithçka është mirë.
Nëse ju të kalojë në null për parametër gabim, që vetëm do të thotë
nga Konventa në të gjitha është e mirë.
Pra, kjo do të thotë ajo që do të ndodhë logjikisht?
Nëse null kalon në callback
që do të thotë ky anonim funksioni ka pasur sukses
mënyrë që të flasin.
Pra, çfarë duhet të seri Metoda e paraprin dhe tani e bazuar
në përkufizimin e mia verbale më parë?
[Padëgjueshëm Vërejtje]
Lëvizin për në një tjetër, apo jo?
Në qoftë se kjo ishte kthyer një jo-null vlera, ai thjesht do të ndërpresin shtatzëninë
dhe jo më shumë anonim funksion do të merrni të quajtur.
Por për shkak se ajo nuk ka, atëherë kjo do të merrni të quajtur ardhshëm.
Pra, logjika në këtu është shumë e shumë të njëjtën gjë si më parë
dhe ne do të shohim se si të pastër kjo deri më tej në një moment.
E kuptoj kjo është lloj i një shumë
për të absorbuar të gjithë me gojë dhe vizualisht.
Por tani vini re, i dyti funksion anonim që unë dua
për të ekzekutuar në seri është në përpjekje për të lexuar file.
Telefononi këtë callback kur ju jeni gati.
Nëse ka një gabim, vetëm sinjalizojnë atë nga rruga e callback
kështu që pjesa tjetër e kjo stuff aborts.
Tjetër null kthimit.
Por pse jam unë duke kaluar në dy argumente?
E pra këtë herë në qoftë se unë lexoj fotografi dhe të kthehemi
si një ndryshore të quajtur të dhënave,
Unë dua të, jo vetëm të ditur të gjitha është edhe duke u kthyer null
për argumentin e parë.
Unë dua të kthehen aktuale dhënave si argumentin e dytë.
Sepse në qoftë se unë të lexuar më tej në dokumentacionin,
vëreni këtë copë të fundit të kodit kllapa katrore do të thotë se është
fund të seri.
Ka pasur vetëm dy anonim funksionon në këtë seri.
Nëse ka pasur një gabim këtu, atëherë Unë e di se një nga lidhjet
në këtë mënyrë zinxhir për të folur dështuar.
Pra, me fjalë të tjera, ky gabim do të jetë një objekt Error
se është i pavlefshëm në qoftë se ndonjë e këta njerëz dështuar.
Dhe në qoftë se është e rastit, unë jam vetëm duke shkuar për të shpëtuar dhe unë jam duke shkuar
për të thënë të cilat 400 do të thotë kërkesë dështojnë,
kjo është shumë e përgjithshme mesazh gabimi.
Dhe pastaj, unë jam duke shkuar për të shtypura nga mesazh gabimi.
Pra, unë nuk jam mërzit për të të jetë super anal këtë herë,
Unë nuk jam duke shkuar për të dalluar në mes të 500 dhe 404 dhe 403,
Unë jam vetëm lloj verbërisht të lëvizë dorën time
dhe thonë diçka shkoi keq.
Por në qoftë se asgjë nuk e bëri të shkojnë keq,
Unë jam duke shkuar për të dërguar këtë res.end duke kaluar këto të dhëna.
Tani kjo duket pak i fshehtë.
Por, përsëri nëse kam lexuar dokumentacioni,
Argumenti i dytë për kjo, callback përfundimtar i formës së prerë,
djalë që është ekzekutuar vetëm sapo seri është bërë
ekzekutimin ose një porcion ka e, kjo do të jetë një grup
të gjitha argumentet dytë
që u miratuan për callback.
Tani, rezulton se vetëm të lidhur në këtë seri
që në fakt kthehen në sekondë Argumenti është ky këtu.
Kështu që unë jam duke shkuar për të zgjidhur e për një hap i besimit thjesht përdorin supozoj
për momentin që fundit është një metodë
që ju jep fundit elementet e një grup.
Për shkak se ky grup që është duke u kaluar
për mua ka dy indicies, dhe një zero.
Është vetëm zero nuk ka vlerë sepse ky djalë kthehet -
nuk të kalojë në një të dytë Argumenti por ky djalë ka.
Pra, rezulton kllapa zero është asgjë,
Rezultatet e një parantezë çfarë përmban,
në qoftë se ju keni qenë pas së bashku deri në këtë pikë?
Dosja, hello, Përmbajtja botë me sa duket,
kështu që kjo është se si unë në fakt print it.
Dhe më lejoni të përfundojë një detaj këtu.
Në qoftë se unë bëj këtë lloj të vjetra shkollë, në qoftë se unë dua të të marrë
në elementet e fundit, në qoftë se unë mund të të bëjë rezultatet [results.length-1],
kjo është lloj i Mënyra e vjetër e shkollës
e qasjes elementet e fundit në - ose zero index array.
Por, si në anën e, kujtojnë që kam pasur këtë bibliotekë
deri këtu underscore të cilat nga konventë është quajtur vetëm
fjalë për fjalë një underscore Karakteri i cili nuk është i veçantë,
ai thjesht duket cool si shenjë dollar bën për jQuery.
Kjo është vetëm një ndihmës Metoda nënvizojnë dot fundit
që bën pikërisht e njëjta gjë.
Dhe në qoftë se ju nuk e kam përdorur atë para se të nënvizojnë JS dyja
për anën e klientit kodim
dhe anë server është një Biblioteka mrekullisht të dobishme
që sa më shumë njerëz të përshkruara ajo pëlqen jQuery përmban të gjitha
nga metodat, njerëzit dëshironin erdhi me vetë JavaScript.
OK.
>> Pra, si mjaft për mua dhe Unë u shikuar në seri,
ju keni si callback si argument?
Po >>.
>> Ashtu si kur ju në të vërtetë si shtytje që në,
dhe si ajo që e bën atë do të thotë kur ju vetëm duhet
si callback dhe pastaj të bëjë si -
[Padëgjueshëm Vërejtje]
>> OK, pyetje e mirë.
Pra, më lejoni të tërheq lart Faqja kryesore Async këtu
ose dokumentacion në GetHub.
Pra, kjo është kanonik Struktura.
Nëse jeni duke telefonatë duke përdorur këtë veçanti seri metodë,
ka dy pjesë të mëdha të saj.
Njëra është një koleksion i Funksionet anonim
dhe dy është një callback final funksion që në fakt
ekzekutuar në shumë fund të seri.
Tani, në qoftë se ne zoom në një pak më afër për të parë
nga ato gjëra të mëdha, sërë funksionesh anonime
me kërkesat e këtij Dokumentacioni djalë ka
të jetë një anonim funksion që merr
në një argument të quajtur callback ose foo ose bar, kjo nuk ka rëndësi
por ai është duke e quajtur atë callback.
Dhe kjo është lloj i zile tuaj që Shake kasolle ju duart.
Ky është mjeti me të cilin ju mund të kthehen një vlerë
për të konsumatorit për shkak se ju mund jo vetëm të bëjë fjalë për fjalë kthehen.
Ju duhet të bëjë atë me Mënyra e këtij callback.
Sepse në qoftë se brenda këtij funksion është disa running ngadalshëm
Kodi si database query, lexoni fotografi nga file të sistemit,
ju nuk doni të prisni atje dhe për të bllokuar të gjithë të tjerët,
ju doni të telefononi callback.
Pra, kjo është fjalë për fjalë emri i argumentit.
Por si në C, ju kanë funksion pointers.
Në Java keni Metodat e sistemit referencë
dhe të njëjtën gjë këtu në JavaScript.
Kjo është një variabël, por lloji i saj është funksion.
Pra, thjesht duke shkruar emrin e saj nëse një callback ose foo
ose bar, atëherë kllapë të hapur dhe kllapë të ngushtë,
ju jeni duke bërë atë në atë funksion.
Dhe duke kaluar një null cilat do të thotë gabim null dhe një
që do të thotë kjo është të dhënat që unë dua për të kaluar in
Dhe pastaj copë të jetë i qartë, kjo është një tjetër callback.
Dhe kjo nuk quhet callback,
ajo vetëm konceptualisht është një Funksioni metodë callback
sepse ajo është quajtur sipas definicionit
e bibliotekës këtij autorit kur të gjithë seri ka përfunduar
ose mesin e saj në qoftë se një gabim ka ndodhur më shpejt.
Pra, emri i funksionit callback, duke e quajtur funksion callback,
emrin e funksionit callback, duke e quajtur funksion callback,
callback ndryshme funksionojnë të gjithë së bashku.
>> Ne tani e kemi si përcaktojnë callback?
>> Jo, sepse ky djalë do të kalojnë në grup tuaj
Funksionet e anonime,
një tregues për kodin ai dëshiron të ekzekutuar.
Saktësisht, të gjithë të drejtë.
Pra, ju lutem thonë se Kodi merr pak më të thjeshtë.
Pra, ajo mund të.
Dhe në qoftë se ju jeni si unë, të marrë rehati në të paktën duke e ditur,
ajo merr një kohë për të të mësohen me këtë.
Por ne mund të pastër këtë ide pak,
mos hedhin shumë në për ju por këtu është një tjetër variant
dhe e saj duke përdorur një metodë tjetër
në të njëjtën bibliotekës quajtur ujëvarë.
Përmbysur e cila është ndryshe nga seri ku çdo
e atyre anonim Funksionet ekzekutuar në thelb
në mënyrë të pavarur nga secili prej të tjerë.
Ujëvarë si emri sugjerojnë lejon funksionet fuqishmi
për lloj të kalojë në vlera të funksionit të ulët,
lloj si një ujëvarë të ujit.
Pra përmbysur i këtij është se unë mund të lloj
e përdorin këtë në avantazhin tim.
Në async.waterfall, vini re në vijim.
Unë vetëm mund të telefononi fs.stat duke kaluar në rrugën
që unë dua të të marrë Statistikat radhë.
Dhe atëherë mbani mend para se unë kishte një funksion anonim
se kishte dy argumente gaboj,
esults dhe pastaj kam quajtur funksion callback me dorë?
Me fjalë të tjera është vetëm që të jetë i qartë, kujtojnë se më parë
në Async 2, kam bërë të gjithë i kësaj pune të keq.
I quajtur kaluar fs.stat në P,
deklaruar vetë anonim im funksion.
Unë pastaj kontrolluar nëse gabimi është i jo null atëherë unë e bëri këtë,
tjetër unë e bëri atë, e tërë Bukurinë e mëposhtme konventat
si në node.js është se callback Funksionet në përgjithësi kanë për qëllim
për të marrë të paktën një argument, Error një objekt ndjekur nga zero
ose vlerat më të dobishme.
Pra njoftim paradigmë këtu,
ky funksion callback unë jam deklaruar ndjek pikërisht
paradigmë që ky djalë të Biblioteka Async bën.
Që do të thotë kjo, pse jam Unë zbatimin callback tim
Metoda kur autori i këtij Biblioteka është fjalë për fjalë dorëzuar më
në një pjatë të thuash, një funksion callback unë mund të përdorni?
Pra, unë vetëm mund të kalojë në referencë ai është dhënë
kështu që menjëherë, disa linja e mia
i kodit të bëhet një linjë e kodit.
Tani, ku do të shkojmë me këtë?
Funksioni tjetër që Unë dua të ekzekutuar,
tjetër anonim funksion në këtë grup
e funksioneve e bën në vijim.
Njoftim stat parë është argumenti i parë.
Pra, diçka ka ndryshuar tashmë.
Tani, ky djalë i cili shkroi në bibliotekë -
dhe unë jam duke thënë djalë sepse ajo është një djalë.
Ky djalosh i cili shkroi këtë bibliotekë është garanci dokumentacionin
se nëse ky funksion këtu kalon më prapa një Error objekt
ose null ndjekur nga koma Lista ndarë e vlerave të tjera,
ai do të sigurt se ata vlerat e tjera janë dorëzuar
në këtë funksion anonim me qëllim nga e majta në të djathtë.
Dhe atë që ishte vetëm një funksion callback vetëm thjesht
bëhet argumenti i fundit i tillë.
Tani, unë nuk e di kush jam duke u fokusuar në vetëm ju e dini.
Por tani, ajo që është marr me vete këtu?
Pra, ne e dimë nga dokumentacioni
ose disa para me shembuj
që në fund të fundit fs.stat pret një callback me dy argumente,
Error objekti i cili është një Gabim objekt ose null ndjekur
nga një referencë për stats objekt.
Pra, nëse unë mendoj për këtë, Gabim object gjendje kome stats objekt,
që i përshtatet në paradigmën e bibliotekës së këtij personi.
Pra, unë thjesht mund të them, sepse Unë NO argumentin e dytë
se kjo është - se po ndodh duhet të miratohet nga fs.stat
në callback është gaboj, stats nga përcaktimi i kësaj biblioteke,
Unë mund të vënë të dytën Emri i argumentit këtu
apo çdo gjë që unë mund të riemërtoni atë
në qoftë se unë dua ndjekur nga callback këtu.
Kështu që, unë mund të kalojë një vlerë prej këtu për të këtu.
Tani, të gjithë këtij kodi pse pa dyshim disi i fshehtë është
të paktën kopje paste për pjesa më e para.
I vetmi ndryshim është njoftim këtu unë jam deklaruar një Gabim
objekt dhe tani unë dua për të marrë pak njohës.
Unë në të vërtetë duan të dinë se çfarë gabim ishte, kështu që unë jam duke shkuar
të fut brenda këtij objekti a prona në mënyrë arbitrare quhet kodi
kështu që unë e di se kjo nuk është një file i
që duhet të jetë i paautorizuar, kjo është një HTTP 403.
Më lejoni të mos harroni se para se të Unë kalojë Error objekt
për callback.
Dhe pastaj në fund të përpiqet për të lexuar fotografi, kështu që në këtë rast,
ujëvarë, unë kam thyer Kodi nga dy hapa të mëdha
në tre hapa të vogla.
Njoftim bukurinë këtu,
Unë mund të telefononi fs.readFile duke kaluar në rrugë.
Dhe pastaj pjesa e vështirë mendërisht, po unë vetëm të kalojë
në callback e djalë.
Gjëja ai dorëzimin mua, unë jam i do të kalojë për të fs.readFile.
Sepse ne jemi të gjithë respektimi për të njëjtat konventave,
Argumenti i parë për një callback është një objekt apo Gabim null ndjekur
nga një gjendje kome ose të ndara Lista e gjëra të dobishme.
Pra, çka do të thotë tani dhe në qoftë se unë lexoni dokumentacionin unë do të di
kjo, callback shumë të fundit, ky djalë këtu jashtë
nga kllapa katrore është duke shkuar për të kaluar në Error objekt
ose null që unë duhet të kontrolloni për si gjithmonë me këtë kod këtu.
Dhe pastaj me përkufizim e kësaj metode
në dokumentacionin e djalë, vlera e fundit u kthye
nga metoda e fundit në grup tim anonim -
array ime e funksioneve anonime.
Pra, ajo që ka lexuar skedarëve kthimin
dhe unë jam duke përdorur një kthim lirshëm tani.
Unë do të thotë atë që ka lexuar fotografi kalojë si argumente
me metodën callback duar e saj?
Dy argumente, së pari është një objekt Gabim ose null,
kjo është pothuajse gjithmonë do të jetë përgjigje.
Dhe gjëja e dytë është duke shkuar të jetë ajo për të lexuar dosjen?
Përmbajtja e dosjes, dhënave si ne quajtur atë më parë.
Pra, thjesht duke deklaruar gaboj, rezultojnë,
dhe kontrolloni për gabim këtë është lloj i mërzitshëm tani.
Tjetër, unë bëj res.end duke kaluar në atë rezultat.
Kjo padyshim do të nuk sync në mënyrë të përkryer
deri sa ju të vërtetë shkruaj vetë.
Por tani për tani, të marrë larg paktën fakti
se ka i duket kjo paradigmë të përbashkët, ku në qoftë se ne
dhe autorët e bibliotekave të gjitha llojet e shkop
me këtë konventë e metodave callback.
Dhe argumenti i parë është një objekt apo Gabim null.
Dhe e dyta dhe të treta
dhe objekte të katërt janë gjëra ne lidhje me kujdes dhe ne lloj
të ndjekin rregullat dhe dokumentacionin.
Ne kemi filluar me kodin që sinqerisht është shumë e shëmtuar.
Dhe, edhe pse më të fundit shembull është sinqerisht lloj i vështirë
të përfundojë mendjen tuaj rreth, kjo është të paktën vizualisht,
duket si kjo është shumë më e forta.
Dhe një herë ju merrni të rehatshme me të, kjo është shumë më e lehtë
dhe kjo është shumë më pak të prirur për të mete se këtë shembull të mëparshëm.
Pra, më lejoni të demonstrojnë një gjë e fundit këtu.
Ky është versioni tre.
Dhe - Jo, le të largohen kjo vetëm.
Më lejoni të shkoj në një çift të gjëra të tjera të fundit si lojëra.
Në rregull, kështu që në server 2.
OK. Së pari, ndonjë pyetje, E di që kjo është një shumë
por do të donit më shumë udhëzime, kështu?
Ju nuk tha mirë udhëzim domosdoshmërisht.
Po?
[Padëgjueshëm Vërejtje]
Saktë, ju jeni në thelb butë të sistemit operativ
të kuptoj se si për të mashtroj të gjitha këto topa në një herë,
lexuar nga një fotografi, leximi nga një bazë të dhënash.
Dhe kjo është këtë server Javascript Vetë kjo është ndërprerë vetëm.
Dhe në thelb dhe në të vërtetë,
ka një foto Unë nuk u vjen për të vjellë,
dhe kjo nuk është domosdoshmërisht të gjitha që i shkolluar
por ndoshta ne do të japim ju një model mendor.
JavaScript vetë dhe nyje
në mënyrë të veçantë ka kjo quajtur kështu loop ngjarje.
Ku, ju mund të mendoni i node.js, programi,
është fjalë për fjalë si një loop pafund.
Është vetëm një lak të egra, duke pritur dhe duke pritur dhe duke pritur,
kërkoni për detyrat për të përfunduar.
Dhe detyra mund të jetë, shkoni shkoj të marr diçka nga një bazë të dhënash
ose këtu është një vlerë nga bazës së të dhënave apo të shkoni të merrni këtë fotografi
nga disku apo këtu është një të kërkojë nga një përdorues.
Çdo lloj ngjarje, ashtu si ngjarje shfletues të shtyrë,
në mënyrë që server Ngjarja anë shtyrë.
Dhe ndonjë nga ato gjëra të përbëjnë ngjarje.
Pra, dikush në node.js, vetëm shkroi një lak pafund,
një lak i madh i egër, duke pritur për gjëra të ndodhë.
Dhe si sende nuk ndodh, ajo përfundon në radhë, apo jo?
Sigurisht, një bazë të dhënash mund të kthehen një vlerë.
Dhe një sistem fotografi, operativ Sistemi mund të kthehen një vlerë të
afërsisht në të njëjtën kohë por ndoshta do
të jetë një urdhërimin për ta.
Dhe node.js do të kanë në thelb një radhë
si një grup të madh ose të një vektor, disa Struktura e të dhënave
se mbulesë të gjithë nga këto gjëra.
Për shkak se ajo mund të fjalë për fjalë vetëm trajtuar një prej tyre në një kohë.
Pra, kur ju, zhvilluesi i saj,
shkrim asinkron JavaScript Kodi përdorur të kryhet në menyrë
funksion, ju jeni duke lejuar këtë ashtuquajtura loop ngjarje për të shkuar
të shënoni tjetër, apo jo?
Pra, kohë që ju menjëherë të kthehen si të gjithë
këto metoda asinkrone të bëjë si të lexuar file dhe stat,
ata kthehen menjëherë sepse callback përfundimisht
merr përsëri.
Sa më shpejt që të ktheheni,
që do të thotë dikush tjetër mund të merrni popped off stokut këtu
apo se ajo mund të merrni popped off para radhë këtu.
Dhe kështu, nuk ka në Fakti serialization
i gjithçkaje që ndodh,
edhe pse të gjitha këto gjëra mund të ndodh paralelisht
në një sistem multithreaded.
Por node.js veten dhe server vraponit
si një fije.
Dhe në anën poshtë e që është t ju nuk domosdoshmërisht max
nga kompjuteri juaj të aftësi është si veçanërisht
në qoftë se ju keni një bazë 16 ose madje edhe një kompjuter 2 core
dhe ju jeni vetëm duke një shembull i nyjeve.
Por në qoftë se ju keni përsëri marrë diçka si 161,
ju shmangur një makth të madh e dhimbje koke kur vjen puna
të racës kushtet dhe flokët dhe semafor
dhe me shkrim me të vërtetë Kodi multithreaded,
kështu upsides dhe dobësi.
OK. Pra, përsëri në kodin këtu, më lejoni të propozojnë që të fillojmë
për të lehtësuar gjërat pak.
Ne pamë një Server pak më parë e cila dukej si kjo.
Pra, kjo është ndoshta shumë e thjeshtë.
Por ashtu si në botë e PHP, ka kornizat
si Laravel dhe ka gjëra të tilla si binarët dhe Django,
të njëjtën gjë në botë node.js.
Dhe ne do të shpenzojnë më shumë kohë për këtë të mërkurën
dhe në projektin e ardhshëm.
Por nëse unë shkoj në një 2 server directory,
të vini re një paradigma çift këtu.
Pra, kjo është - nuk do të jetë një shembull ekuivalent
por është duke përdorur një Kuadri i quajtur express.js,
i cili është burimi i lirë i hapur software si binarët dhe Django,
si Laravel, kjo është vetëm në fund të fundit do
të jetë i pavlerësuar sot 'Sepse ne kemi qenë i shkruar
shembuj të tillë të thjeshtë.
Por na beson.
Kjo do të shumë shpejt të bëhet miku juaj
sepse ai do të shpëtojë ju një shumë të kodit TDS.
Dhe një paradigmë të përbashkët për një kërkesë express.js është
që të ketë një app.js ose server.js fotografi e cila përmban logjikën
e programit tuaj ose në paktën pika e hyrjes.
Ju mund të keni fotografi të shumta.
Një nyjë modul subdirectory e cila ka bibliotekat
që ju keni shkarkuar si Async
dhe shprehet në të tjerët.
Dhe pastaj package.json, package.json duket si ky,
dhe ju mund të krijojë atë me dorë ose mjete të krijuar atë për ju
dhe kjo është fjalë për fjalë një fotografi json
dhe pjesa interesante është varësinë këtu.
Ashtu si në Laravel, ju kishte se shitësi directory
dhe keni pasur për t'u shqetësuar rreth paketave dhe duke bërë -
në të vërtetë përditësimin me Artizanal apo komandat të ngjashme,
e ju bibliotekat kanë instaluar,
në mënyrë të ngjashme me package.json këtu dhe ju të menaxhuar bibliotekat
dhe versionet që ju intereson.
Pra, në qoftë se unë kam një package.json, Unë thjesht mund të bëjë MKP,
Nyja Paketa grazhd të instaluar, ajo do të shikojmë automatikisht
në këtë dosje package.json.
Shikoni dhe të shohim, mund ta kanë versionin më të fundit
të gjitha modulet e shitësit
në një nyje të nënvizuar module directory këtu apo ndoshta
në disa prind ose Lista paraardhës.
Dhe nëse jo, kjo është duke shkuar për ta shkarkuar ato
dhe ju do të shihni një bandë e tërë
i HTTP gjëra do nëpër tela.
Kështu për shembull, le të më ju tregojnë përmbajtjen
e moduleve të nyjeve vetëm për të shprehur.
Më lejoni të shkojnë përpara dhe të me guxim fshini modulet nyje
kështu që të gjitha unë duhet tani është kjo.
Dhe në qoftë se unë do të NPM instaluar, ju do të të shohim se ajo do të lexuar
se fotografi package.json dhe ne kemi parë e prodhimit të ngjashme
për këtë në botë Laravel.
Është shkarkoni një të tërë bandë e sende dhe kjo është
sepse shprehur nga ana e tij varet nga një bandë e tërë
e bibliotekave popujve të tjerë.
Pra, të gjithë ata janë lloj i duke u shkarkuar Recursively.
Deri më tani, në qoftë se unë bëj në LS përsëri,
nuk ka module mi nyje Lista mbrapa
dhe shprehin si mbrapa.
Pra, kjo është vetëm një mënyrë për të thjeshtimi menaxhimin paketë.
Tani, nëse ne shikojmë në fotografi app.js, kjo do
të jetë një rikthim të hershme web server tonë
ku ne vetëm fol jashtë "hello, bota".
Por vini re paradigmat këtu,
e parë që ne të kërkojë Express moduli, atëherë ne e kemi këtë linjë
të kodit të cilat ju e dini nga dokumentacioni.
Ju fjalë për fjalë që trajtojnë variabël Moduli si një funksion,
ngushtë në mënyrë të hapur kllapë kllapa do të thotë të ekzekutuar atë.
Kjo do të duket kthehen diçka që ne jemi duke shkuar
në përgjithësi e quajnë një app.
Si punon kjo?
Unë vërtetë nuk e di.
Unë do të le dikush tjetër, ju e dini, në botën e shprehur shkruani këtë.
Unë jam duke shkuar për tani të qëndrojë në supet tij ose të saj në mënyrë që
për të bërë kërkesën time drejtimin e një pak më të thjeshtë.
Ja, unë jam duke shkuar për të dëgjuar në atë port të veçantë
që mund të jetë më asgjë.
Dhe këtu është kodin që është ndoshta më shumë të kujton tani
i Laravel dhe routes.php.
Pra, kjo është darka e thjeshtë, unë jam i vetëm do të specifikojë një rrugë
për yllin çaj, kështu që çdo gjë do të jetë zhytur
nga ky handler kërkesës.
Paradigma e mbajtësit të kërkesës është funksioni i saj anonim
me një argument të kërkesës
dhe një objekt përgjigje ashtu si më parë.
Dhe res.send në mjete të shprehur ju dërgoni kodin e ndjekur
nga çdo gjë që ju dëshironi të dërgoni.
Dhe sigurisht, ju mund të të bëjë diçka njohës
me të vërtetë i dërguar fotografi ose HTML
ose gjeneruar dinamike përmbajtje.
Por tani për tani, të gjithë ne e bëmë u nxjerr nga goja Hello, World.
Nëse ne do të shkojmë në server tre, kjo është edhe njohës vetëm
për të treguar ju disa funksionalitetin.
Dhe ne do të ju tregojnë ekber version edhe sexier
e kësaj të mërkurën.
Por në qoftë se ju keni dëgjuar ndonjëherë i Socket io ndoshta,
në mënyrë që unë mendoj Jonathan ose dikush tha më herët,
një nga gjërat Nyja është me të vërtetë e njohur
për të është koha e tij e vërtetë sjellje, e drejtë?
Mendoni se në PHP MySQL, nëse ju ishin për të zbatuar një chat server
në PHP ku dy njerëz mund të të hapur një dritare të shfletuesit të foo.com
dhe pastaj të fillojë IMing çdo tjetër, Alice në një dritare,
Bob në një tjetër në mënyrë që secili prej tyre sheh tij
ose mesazhet e saj në dritare tjetër.
Si do ta bëni këtë në PHP dhe MySQL?
Përdorimi apo mospërdorimi i Laravel lloj i jomaterial, ju mund të keni
si një file index.php.
Dhe ju mori të ketë - në disa raste ajo e mori për të pështyj
nga formë, kështu që nuk ka do të jetë një formë HTML
se ndoshta nuk e dorëzon nëpërmjet paraqitjes normale formë
por Ajax ndoshta, e drejtë?
Pra, një më të paraqesë mbajtës, në mënyrë ju shkruani në një fushë teksti,
ju goditi të hyjë dhe pastaj ajo merr dërguar tek serveri via Ajax.
Çfarë bëni ju atëherë bëjë në server?
Pra, ju keni marrë index.php
ose diçka dot PHP kjo është marrë në HTTP parametër
nga përdoruesit, Alice apo Bob-së mesazhe casti, çfarë do të bëni
me të në mënyrë që të bëjnë propagandë të Bob apo Alice, përkatësisht?
Unë do të thotë fjalë për fjalë ju keni mjetet me të cilat
për të bërë këtë në min tuaj.
Pra, sikur çfarë do të bëni?
Ju duhet një minutë për të zbatimin e këtij programi.
Po?
[Padëgjueshëm Vërejtje]
Perfect. E drejta, kështu që ju keni marrë një bazë të dhënash.
Ne e dimë pak bit për MySQL.
Pra, ju keni një tavolinë kjo është mesazhe,
ndoshta ka një herë Vula, një ID përdorues,
trupi i mesazhit vetë krijuar se
Rifreskimi se dhe të gjithë se.
Pra, ju ruani në një bazë të dhënash.
Dhe mendoj Alice dërgon Mesazhi i parë, si e bën Bob merrni
se mesazhi tani nga baza e të dhënave?
>> Kjo mund të jetë disa Ajax përgjigje që është vazhdimisht duke shkuar
përsëri në bazën e të dhënave top të marrë [padëgjueshme].
Pikërisht >>.
Pra, Kodi Bob kush Kodi është njëjtë si Alice është vetëm lloj
i një marrëdhënie simetrike,
Shfletuesi Bob ka disa kodin Ajax kjo është ndoshta ndoshta çdo 30
sekonda tërhequr server nëpërmjet Ajax sync,
a ka mesazhe të reja?
A ka mesazhe të reja?
Çdo 30 sekonda do të jetë lloj optimale
sepse ai duhet të presë edhe
nëse Alice fjalë për fjalë vetëm të dërguar mesazhin.
Pra, browser Bob mund çdo i dyti goditi server.
Por kjo do të thotë Alice-së Shfletuesi është goditur server
çdo sekondë.
Po në lidhje me Charlie [Supozuar spelling]
dhe David [supozuar drejtshkrimi] dhe Edward [supozuar drejtshkrimi]
dhe çdo letër tjetër e alfabetit?
Çfarë është problemi e kësaj qasjeje?
Një shumë e rezultateve të tepërta -
Unë do të thotë që ju jeni vetëm në mënyrë efektive Dozimin e syve tuaj
ose DDOSing, Shpërndarë Mohimi i sulmit të Shërbimit
në faqen tuaj, duke pasur të gjithë
e këtyre përdoruesve të drejtuar Javascript kodin që është vetëm pinging
dreq nga të serverit tuaj edhe në qoftë se numri arbitrare,
80 përqind të kohës askush nuk i ka thënë asgjë
në dhomë chat.
Por ju jeni vetëm duke kontrolluar për të siguruar të tilla.
Pra PHP në një shumë të Gjuhët nuk janë vetëm të mira
për komunikim të vërtetë kohë.
Sepse në PHP risjell ka nuk ka memorie qendrore, apo jo?
Ju keni objekte seance i cili krijon iluzionin
e magazinimit qendror, por kjo është në një bazë për përdorues.
Ju nuk keni kujtesë globale si ju bëni në një Servlet Java
në të njohur apo në të tjera kornizë punon si kjo.
Node.js edhe pse, ju keni kujtesës globale 'sepse ju keni
një server dhe kjo mund të mbani mend asgjë ajo dëshiron
për të gjithë përdoruesit.
Dhe ju mund të ende kanë një bazë të dhënash.
Por gjë e bukur për node.js gjithashtu është se kjo është shumë më mirë
se diçka si PHP dhe duke krijuar iluzionin
të trajtimit të shumta gjëra në të njëjtën kohë.
Dhe në fakt si në mënjanë, ju mund të zbatojë chat servers në PHP,
por ju zakonisht do të bëjë diçka që quhet votimi të gjatë
ku ju nuk e ping server çdo sekondë.
Ju ping serverin, Serveri nuk përgjigjet për ju
për mëse 30 sekonda, ajo fjalë për fjalë ulet
në një lak duke pritur dhe duke pritur.
Dhe kontrollet server nëse nuk ka të dhëna të reja në bazën e të dhënave
dhe vetëm një herë atë që ju sheh, "Oh, këtu është një mesazh nga Bob, "
e bën atë të përgjigjeni server Turizmi?
Pra, efekti në shfletuesin tënd është se ikona e IE ose Mozilla
ose çdo gjë vetëm e mban tjerrje për 30 sekonda në një kohë.
Por me kokë është, ju nuk bëni kanë 30 kërkesa për kyçje
në 30 sekonda, ju keni një të tillë.
Pra, ajo që quhet votimi të gjatë.
Por edhe më të mirë në web moderne shfletues është diçka që quhet
WebSocket, e cila ju të marrë CS143,
ju mund të bëni në mënyrë efektive një Lidhje TCP nga një klientët
si një shfletues në një server dhe pastaj varet në në atë
pa përdorur gati si shumë burime
si HTTP mund tradicionalisht bëjnë.
Dhe Socket IO është një bibliotekë node.js
që e bën atë shumë më e lehtë për të bëjnë lidhjet fole
ose iluzione atje në për shfletues të vjetër
në mënyrë që ju mund të zbatojë këtë functionality kohë reale-së.
Pra, këtu është një shembull.
Kjo stuff up krye merr një pak më e komplikuar
por kjo është kryesisht kopjoni dhe ngjisni nga dokumentacioni socket.io 's.
Ja tani një më shumë mbajtës saktë kërkesë.
Nëse shfrytëzuesi kërkesa a çaj, çfarë fotografi jam unë do
të jetë me sa duket shërbejë deri në ato?
Index.html.
Dhe ka disa të reja Sende këtu lumë
që unë do t'ju tregoj në vetëm një moment.
Por kjo është vetëm një tjetër mënyrë
të grabbing një parashtrojë pak më efikase
se vetëm duke bërë fs.readFile.
Kjo është një zgjuar pak sidomos për fotografi të mëdha.
Pra histori të gjatë të shkurtër, këto rreshta vetëm për të shërbyer
deri një file të quajtur index.html
e cila tani për tani supozohet përmban forma HTML me të cilin Alice
dhe Bob mund të komunikoj.
Së fundi, io.sockets.on, kështu që kjo vjen nga kjo linjë deri këtu.
Pra, unë jam vetëm duke lexuar Dokumentacioni io.socket më jep
qasje në një të ashtuquajtur WebSocket me një shfletues,
në mes të shfletuesit dhe server.
Unë jam duke dëgjuar për të veçanta Lidhja ngjarje e cila do të thotë
kur përdoruesi i parë godet server duke u përpjekur
për të hapur këtë lidhje, unë jam i do të thërrasë këtë thirrje përsëri.
Dhe tani, unë jam duke shkuar të bëjë të mëposhtme.
Çdo pesë sekonda, ajo që unë jam duke shkuar për të bërë?
Unë do të lëshojnë ose të transmetojë në qoftë se ju kujtohet zeroja,
gjuha grafike do se një bllokon transmetuese?
Pra, ju jeni do të lëshojnë
ose të shkaktojë një ngjarje të quajtur në mënyrë arbitrare nga serveri.
Dhe ajo do të përmbajnë një Ping mesazh
dhe data e tanishme.
Pra, kjo është një e vërtetë chat server që Alice
dhe Bob mund të përdorni, por kjo është lloj i një chat server automatizuar
ku mesazhet janë kontakteve vetëm lloj hidrolokator.
Është vetëm sot në kohra të që janë dërguar çdo pesë sekonda.
Pra, në qoftë se unë në fakt të drejtuar këtë gjë - dhe kjo është ajo.
Për të qenë i qartë deri këtu, njoftimi kjo është vetëm prerje-transportim trupash poshtë këtu.
Pra, më lejoni të kthehet një sy të verbër për atë.
Më lejoni të bëj nyje të app.js.
Më lejoni të shkoj në shfletuesin tim.
Ringarkoni faqen kryesore këtu.
[Pushim]
Dhe më lejoni të mbyllur inspektori.
Çdo pesë sekonda, unë kam një Demonstrata edhe pse nuk
interaktive për të njeriut
e diçka që është ndodh asynchronously.
Në njoftimin e shfletuesit, nuk ka asnjë icon tjerrje.
Është përdorur një funksion njohës e Chrome në shfletuesit modern
e mbajtjes së një fole Lidhja nën kapuç
dhe kjo është ajo që quhet në përgjithësi një model pub / nën,
publikojë / abonuar modelin, ku ne nuk kemi bërë
se mjaft qartë këtu.
Por ajo që është e bukur për këtë pub përgjithshme / sub paradigmë është
që ju mund të ketë një botues.
Në këtë rast server qendror dhe të gjithë
e individit shfletues janë klientët.
Alices dhe Bobs e Bota mund të regjistroheni në të,
kështu që ju mund të transmetojë mesazhe në mesin e çdo numër të përdoruesve.
Dhe, edhe pse përsëri jemi jo duke parë interaktive,
kemi pasur ndoshta 12 linja e kodit vetëm për të bërë këtë.
Dhe kjo ndoshta nuk është një hap të imagjinohet se si ju mund të rrëmbej
nga file index.html që ka një formë të vërtetë HTML,
pak e kodit jQuery me Ajax që nuk dërgoni një Daytime
por vetëm dërgon çdo gjë Alice ose Bob lloji në server
dhe pastaj server do rele it out.
Dhe unë premtimin për të paraqitje e shkurtër ne një gjë e kaluar vetëm
të vë në lojë ju me këtë.
Nëse ne do të shkojmë në lumë zero dhe një,
ju do të shihni kodin që është vetëm pak më ndryshe këtu.
Vetëm kështu që ju e keni parë atë, kjo është një alternativë
për atë që unë e quajti fs.readFile Metoda më parë, ku,
ju mund të thoni node.js, "Shko lexoni këtë skedë në kujtesë.
Por nëse kjo është e madhe vetëm për t'u dhënë me një copë në një kohë. "
Dhe ju mund të dini nga CS165
ose 161 sistemet fotografi kanë të ndryshme
Prona të performancës.
Ju mund të dëshironi të lexoni në blloqe prej 512 bytes
ose 2 kilobytes apo çfarëdo.
Kjo është një mënyrë e zgjedh duke u kthyer e file iteratively
kështu që ju mund të fol më pak më shpejt
me shfletuesin ose për të kushdo që klienti përfundimtar është.
Shuma aq i madh e përmbajtjes sot dhe ne do të zhyten
në më shumë detaje të mërkurën me Tim [drejtshkrimit supozohet]
veçanërisht duke kërkuar në mënyrën se si ne mund të përkthehet disa nga idetë
nga gjysma e parë e Sigurisht Laravel dhe modele
në një bibliotekë që ai vetë shkroi quajtur Bookshelf.js
e cila është bërë gjithnjë e më të njohura në komunitet
sepse kjo ju jep shumica e tij,
nëse jo më shumë se funksionalitetin e elokuent
e cila është e kujtojnë se depërtim bibliotekë të Laravel,
aq më shumë në këtë dhe më shumë se si
për të zhvilluar me të drejta të plota Apps të mërkurën.
Ne do të ju shohim pastaj.