>> Poriadku.
Takže Cliffhanger bol, čo je Node.js, ako ho poznáme dnes?
Čokoľvek? Jo?
>> Bolo to ako Rámec písanie JavaScript
Aplikácie široko -
>> OK, to funguje.
>> - Viem, že ako bežné použitie, ako je -
alebo niečo, čo vám môžete urobiť, je ako -
[Nepočuteľný Poznámka]
>> OK dobre.
Jo, tak to je rámec.
Je to motor, o ktorú môžete spustiť kód JavaScript
Server mieste.
To môže znamenať, že Najjednoduchšie vecí
ako je písanie príkazového riadku Skript nie je v Pythone a Bash
alebo Ruby alebo PHP, ale len v samotnom JavaScriptu
a spustením na bliká príkazový riadok.
Alebo môžete skutočne spustiť že v rámci webového servera.
A v tom, v Node.js sám,
tento rámec je celá partia knižníc, ktoré sú medzi
v HTTP servera vstavaným.
Takže, môžete skutočne písať server, ako uvidíme
za chvíľu, super ľahko jednoduchým k pochopeniu trochu
HTTP a TCP a porty.
A môžete plodiť počúvanie webový server, bez toho, aby Apache,
bez toho Microsoft IIS.
Bez ďalších nainštalovaný softvér,
stačí trieť to a počúvať väčšinu každom porte
v systéme, ktorý máte možnosť.
Tak tomu a body, nechaj ma ísť a otvoriť
up tomto príklade, server-0.js.
Tak zistíte, že horná časť tento súbor, len partia
z nezaujímavých pripomienky, a potom je tu pár
reprezentatívnych riadkov kódu že uvidíme recurringly.
Takže, var HTTP dostane vyžadujú "HTTP".
Takže vstavaný do Node.js " infraštruktúra je celá partia
modulov, ktoré sú naozaj len knižnice a všetko je trochu
zo menného priestoru s jedinečný identifikátor
ako je tento je "HTTP".
Takže rovnako ako v mnohých jazyky ako je Java a C + +
a C, iba vtedy, keď importovať alebo zahrnúť
alebo v uzle hovoriť vyžadujú modul robí svoje kúsky.
A všetky pamäti vyžaduje, aby sa naložené
do pamäte RAM a preto sa používa.
Takže, ste nejako načítať túto knižnice alebo moduly na vyžiadanie.
To znamená, že do toho pustite a vyžadujú
pre tento program knižnica HTTP,
a vzťahujú sa k tomuto knižnici spôsob premennej nazvanej HTTP.
Ale tento symbol ľavá mohol boli povolaní niečo, foo,
bar, baz, nezáleží na tom.
Takže na rozdiel od C + + a Java a C, kde, kedy budete potrebovať
alebo importovať knižnicu, je to len trochu
z stáva globálne prístupné,
Node.js moduly tesnejšie namespace.
Takže vlastné - že funkcia je prístupný iba v okamihu, keď
pomocou tohto názvu premennej.
Nemôžete jednoducho začať spôsoby písania, ktoré existujú
v tom práve spôsob, čo je asi dobre,
pretože potom sa vaše namespace nedostane zďaleka tak preplnená
ako v mnohých jazykoch.
Dobre, tak teraz ako spoločná navrhnúť, vytvoriť HTTP server
ako Jonathan [predpokladať, hláskovanie] bolo možné ich doslova
rovnako jednoduché ako volanie vytvoriť metódu servera vnútri
modulu HTTP.
Tak, to sa vracia referencie
na nejakom serveri.
Stalo sa Apache, nie nutne ako ťažká váha.
To je trochu jednoduchšie.
A teraz, musím len jednoducho urobiť pár vecí.
Takže najprv mi dovoľte, aby som prejdite dole na dno tu
a preskočiť psovoda metóda na chvíľu.
A všimnite si tento riadok kódu,
server.on ktorý je v podstate znamená, že server -
počúvať ako v jQuery kódu,
počúvať pre udalosť volal žiadosť
a len sa hádať Čo mám robiť,
Pri požiadavke udalosti požiare v servera.
Jo?
>> Zavolajte rutinu funkcie.
Takže, doslova spustiť kód, ktorý sa odkazuje
podľa tejto premennej a v skutočnosti nie je premenná symbol tu,
čo je to za symbol mysli?
No, tento názov fungovať tady
a psovod zrejme berie dva argumenty.
Prečo dva? No, ak ste práve Prečítajte si žiadnu dokumentáciu
pre tento modul, je bude povedané, že psovod
ktorá bude vyvolaná bude Uplynulo najmenej dva argumenty,
odkaz na žiadosť,
a vnútri priania doslovne znamenať požiadavku HTTP.
Takže všetky tie HTTP hlavičky ktoré by vás mohli vyvolať
od začiatku roka semester alebo niektoré predchádzajúce trieda
alebo skúsenosť ako dostať linku a hostiteľskou linku
a User-Agent linka, to všetko je zapuzdrený a viac vo vnútri
tejto požiadavky objektu.
A objekt odpoveď ďalej pre odchádzajúce dáta.
Takže, máte odkaz na namietajú, že sa deje, aby vám
poslať informácie späť do prehliadač volaním metódy
na poslednom uvedenom argumentu tzv Res na odpoveď.
Ale to by sa dalo nazvať foo alebo bar, to sú len konvencie.
Takže teraz, čo mám robiť?
No, zdá sa, že vo vnútri tohto veľmi jednoduchého webového servera
že som sa vykonáva, som robiť nasledujúce.
Chystám sa napísať HTTP header so stavovým kódom 200,
200 Význam OK, je všetko v poriadku.
A potom, ja idem odovzdať zdanlivo.
Čo je to dátový typ Druhý argument na pravej hlave?
>> Je to objekt?
>> Je to objekt s ako kľúče a hodnoty ľudí?
Len jeden z každého, vpravo, jeden kľúč hodnota dvojice.
Takže, "typ obsahu".
A jediný dôvod, prečo Ja som to citoval tu
pretože pomlčka môže byť zjednotená na znamienko mínus
alebo niečo také.
Takže, musím ho citovať tu, pripáliť alebo dvojité úvodzovky.
Ale zase spoločné paradigma
v kóde JavaScript je často jednoduché úvodzovky v týchto dňoch,
hrubého čreva a potom hodnota.
Takže, je to len tzv typ myseľ.
Toto je hlavička HTTP ktorý je doslova deje
byť obsah typu pomlčka hrubého čreva Text lomítko jasné, že sa deje
ktoré majú byť zaslané z servera do prehliadača
tak, že prehliadač vie či je potrebné spustiť tento ako obyčajného textu
alebo HTML alebo ako obraz alebo film
alebo Flash súbor alebo niečo iné.
Teraz, keď mám vlastne chcú poslať v tele stránky?
No, len tým, že čítanie dokumentácie
pre objekt odpoveď vnútri tejto knižnice.
Vidím, že je to správna metódy a že sa reťazec,
možno aj iné veci, ale minimálne reťazec.
A reťazec je to, čo je vypľuť do prehliadača.
V tomto prípade je jeho výborný jednoduchý, jeho hello world,
ale môže to byť opne držiak, html, pravá zátvorka,
otvorený držiak hlavice, v blízkosti držiak a tak ďalej,
to by mohlo byť Raw html.
Ale my sme udržať príklad jednoduché, len pľuvať
z najjednoduchších typov mysle čo je pravdepodobne text / plain.
A potom Response.End len znamená spojenie ukončiť
a poslať všetko, čo mám druh vyrovnávacej pamäte vnútri
z tohto objektu späť do prehliadača.
Ja som urobil. Dobrá.
Takže posledná vec, Robím tu
a to je trochu svojvoľné a chcel byť v pohode,
je Hovorím Server nakoniec počúvať
na určité TCP v predvolenom nastavení portu.
Pripomeňme, od začiatku z triedy, že služby -
alebo zvyčajne jednoznačne identifikovať podľa čísel,
AD je web, 443 je založený HTTP webové stránky, 22 SSH, 21 FTP
a 1337 je jednoducho ľubovoľná ale je to viac ako 1024
čo znamená, že na väčšine systémy, môžem použiť to
bez toho aby ste museli Super užívateľské oprávnenia.
Takže je to len pohodlnejšie.
Ale 8080 je v off - spoločný jeden, 8088, naozaj nič veľkého
v tisícoch ako spoločné ale je to len ďalší elita.
Dobre, tak čo sa stane, keď som vlastne beží to?
No, nemyslím si, stačí navštíviť stránky v prehliadači.
Tento súbor sa nazýva server-0.js.
Vzhľadom k tomu znova, Apache je Teraz z obrázku
na druhej polovici kurzu.
Ak chcem na web servera, musím napísať
a potom spustiť tento webový server.
Ale ukazuje sa, že JavaScript a to ako na strane klienta
a na strane servera interpretovaný jazyk.
Takže všetko, čo potrebujete, je tlmočníka.
Takže To je - ak trvajú bežať uzol a potom server-0.js,
Aj môže alebo nemusí vidieť niektorí výstup v závislosti
na to, čo knižnice som súčasťou, nič sa nedeje.
Ale nechajte ma ísť na prehliadač a nechaj ma ísť
na rovnakej IP adrese mojich CS50 klientov.
Ale to len mohol aj môj Mac
alebo môj počítač a potom stlačte kláves Enter.
To vlastne vyzerá Apache.
To je ako adresár výpis sme sa pozreli
v prvej polovici roka.
Takže, čo som urobil zle?
Jo.
[Nepočuteľný Poznámka]
Presne tak, jo?
Takže, Apache je stále počúvať na štandardnom porte 80.
Aj keď som mohol zmeniť, Nemohol som ho vypnúť všetky spoločne
ale je to stále beží.
Ale títo ľudia môžu iste koexistovať.
Ja proste musím dať hrubého čreva 1337 a potom možno
alebo možno nie lomítko na end pre prístup k tomuto portu
že tento server je spustený.
A teraz vidím, že Dobrý deň, sa vrátil svet.
A môžem zasiahnuť znovu načítať ako koľkokrát chcem,
je to stále servírujú stránky.
V skutočnosti, ak otvorím Chrome je inšpektor, choďte na sieti
a potom znovu načítať celú stránku,
Všimnite si, že v skutočnosti to bolo Požiadavka, ktorý bol zaslaný.
Keď sa pozriem na Raw zdroje,
Všimnite si, môj prehliadač posiela všetky tie veci.
A potom odpoveď Server bol veľmi jednoduchý.
K dispozícii je 200.
Ak to nie je príliš nízka na obrazovke,
je typ obsahu.
A potom Node.js tak nejako automaticky
pre mňa pridal dátum a všetky ostatné veci
že prehliadače zvyčajne očakávajú.
Takže, poďme jednoducho vidieť malá kontrola zdravý rozum.
Nechaj ma ísť späť do kódu v serverovni 0.js a dovoľte mi, aby som -
zakaždým, keď idem do psovod,
dovoľte mi povedať console.log.
("Mali sme návštevu!").
Nepotrebujem, aby překompilovat alebo niečo také,
to je interpretovaný jazyk.
Takže teraz, nechaj ma ísť späť do stránku, vložte jeden, dva,
trikrát a ísť späť k môjmu oknu.
A teraz vidím toto.
No, to je divné, Vidím šesť riadkov.
Zaujímavé webové Trivia, prečo Mám šesť žiadosť nie tri?
Jo?
[Nepočuteľný Poznámka]
Jo. Takže, ako môžete vedieť, trochu hlúpe ikona v hornej
na lište prehliadača, ktorá veľa
z webových stránok používaných moci byť Harvard hrebeň,
to by mohlo byť logo spoločnosti alebo niečo podobné.
Takže, prehliadača v týchto dňoch trochu
z opovážlivo, aby ďalšie HTTP požiadavku
na takmer každej webovej stránky, ktoré ktoré navštívite kontrolu, či je
V predvolenom nastavení súbor s názvom favicon.ico
v rovnakom adresári ako súbor, ktorý ste požadoval.
A ak áno, kladie ikona tu.
Takže všetko, čo vidíte je presne to.
A v skutočnosti, uvidíme, či budeme Môžete vidieť, skôr ako typ
von len "Mali sme návštevu".
Nechaj ma ísť napred a výstup.
A ja len viem to od pri pohľade na dokumentáciu.
Je tu vlastnosť vnútri Žiadosť objekt nazvaný URL
ktorý sa stane byť cesta
že bol požiadaný, v aktuálnom URL.
Takže, keď som reštartovať server jednoducho opakovaným spustením uzol
o serveri-0.js a Teraz sa tento jeden, dva,
tri a ísť sem späť.
Tu to je.
Slash je to, čo som - ľudský požadované
v favicon.ico je čo je prehliadač
opovážlivo žiadosti.
Ale nejde o to, toľko favicon veci
ale ako je server prevádzkovaný.
Jo?
>> Prečo to má byť nejaký požiadavka?
>> Prečo to má - podľa povahy, ako funguje HTTP.
Takže, HTTP možné iba požiadať jeden súbor naraz.
Prehliadača môžu byť šikovný v týchto dňoch
a udržať TCP pripojenie otvorené.
Ak ste si CS143 alebo všeobecne oboznámení so sieťou,
takže sa môžete dostať zvýšenie efektivity
udržiavaním siete zásuvka otvorená
pri vytváraní viac HTTP Žiadosti sériovo nad ním
ale oni sú jeden súbor na vyžiadanie.
Takže, ak ste navštíviť niečo ako -
Myslím môžeme ísť na väčšina akejkoľvek webovej stránky.
Ak sa vydáte - poďme vytiahnuť Chrome je inšpektor tu.
Môže sa vyplniť najviac stránky.
Prejdite na kartu siete a prejdite na www.cnn.com.
A pri návšteve cnn.com, jej domovskú internetovú stránku -
Váš prehliadač trochu otrasne je - stále narastá.
OK. Aspoň 289 HTTP žiadosti znova a znova.
A to je dôvod, prečo, keď navštívite obzvlášť nafúknuté webové stránky,
sú pomalé načítanie pretože všetky
z aktív, ktoré nahrávate.
Takže to vyzerá, že 298.
Tam by mohol byť nejaký Ajax deje v tomto okamihu, alebo niektoré
aktív sú len nízke.
Takže, každý z nich je individuálnu žiadosť sa vracia
a tam, sem a tam.
A to je dôvod, prečo už skôr, a to aj keď sme trochu hovorili
o tom niečo fancifully kde si dať tag script,
absolútne činí rozdiel, keď máte -
to začína mať veľa dopravy a mnoho
zo je požadované súbory.
A každý to predstavuje pravdepodobne obraz, mediálny súbor,
súbor JavaScript, CSS súbor alebo podobne.
Takže, sme už do niektoré 4MB len
sa pozrieť na dnešné novinky.
Dobrá otázka.
Dobrá.
Takže, aké sú niektoré z sa upsides keď?
Jasne, vieme, ako sa robí webové stránky už s PHP.
A veľa z vás prišlo do trieda vedel Django
a Python alebo lišty s Ruby.
Takže, prečo potrebujeme ešte ďalšie jazyk a infraštruktúra?
Čo je Node.js najmä dobre, ak viete?
[Pause]
Niektoré veci?
Nie? Jo?
>> Preložka správy.
>> Tak, odovzdávanie správ.
Tak to je pravda, a je to pravda Pre viac technických dôvodov
a že Node.js a naozaj JavaScript je najmä
dobre-vhodný pre asynchrónne kód,
ak čím vytvoríte ilúzie
robiť násobok veci naraz.
Takže, aj keď sú skutočne deje sériovo,
skutočne vo väčšine prípadov, JavaScript ako na strane klienta
a na strane servera je jediný vlákno.
Ktorá, ak užívate 161 alebo dokonca 61 znamená, že -
tohto programu vedieť,
interpret môže doslova robiť len jednu vec naraz.
Ale to je nie je veľký pre niečo ako webový server
kde môžete mať desiatky alebo stovky alebo dokonca tisíce
užívateľov všetkých, ktorí sa snažia Pre prístup k webovej stránke
v rovnaký čas.
A napriek tomu, že naznačujú, že im manipuláciu s jedným
po druhej po Vedľa toho sa v prípade niektorých
z tých želanie, ako sme videli, na CNN môže vyžadovať podávanie
až 300 súborov pred vami aj dostať na ďalšieho užívateľa
kto chce vidieť, hovorí správa.
Node.js je vhodnejšie pre prostredie, ako je to.
Pretože to, čo sa stane, je akékoľvek pomalý beh procesu
ako je čítanie súboru z disku alebo dotazovanie databázy alebo hovoriť
do iného sieťového servera,
, Ktorý má tendenciu mať latencie, že jo?
Ak ste si vziať 61 alebo 161 najmä všetky tohto druhu
periférnych služieb majú tendenciu byť oveľa pomalší
než robiť niečo vo vnútri rovnaký RAM a rovnaký CPU
že teda v tomto prípade Server je v skutočnosti beží.
Ale to, čo je pekné o Node.js je, že môžete -
a JavaScript všeobecnejšie je, že môžete niečo urobiť
a potom povedal: "Hmm, toto sa deje
aby sa mi pár milisekúnd alebo dokonca aj niekoľko sekúnd.
Dovoľte mi, aby som trochu vidlica, že off, " ale to nie je pravda proces.
A potom, keď sa to robí robí že pomalý beh procesu
ako popada riadky z databázy alebo čítanie súboru. html
z disku, bude dostať späť ku mne, skôr
než aby som musel čakať na to.
Tak, aby to jasnejšie.
To je môj spôsob takže to známejší.
Dobre, tak to je Shake Shack na námestí.
To je druh spoločné paradigma
pre vysvetlenie asynchronicity.
To je skutočne dobrý napríklad preto, že Shake Shack
a Chutné Burger sú pozoruhodne spomaliť na to, čo robia.
Ale ide o to, že sú naozaj dobrý pri prevzatí objednávky
a pri svoje peniaze po ktoré budete čakať na jedlo.
Tak, to je v skutočnosti lepšia Konštrukcia ako alternatíva.
Vzhľadom k tomu, že by si chodiť do obchod ako je tento, a máte
na prednej strane linky a umiestniť Vašu objednávku a chcete
na hamburger, ako najlepšie dokážem povedať, že trvá najmenej päť
alebo viac minút vlastne si hamburger.
Tak, to by bolo trochu zlého obchodného modelu
ak kým čakáte na váš hamburger, Alice [predpokladať pravopis]
a Bob [predpokladať pravopisu] a Charlie [predpokladať, hláskovanie]
a všetci ostatní je vo fronte za vami
a tie sú doslova blokovanie linka čakanie na jedlo.
Tak samozrejme, na Shake Shack
a ďalšie fast food miesta, nerob to,
robia niečo také.
Dávajú vám bzučiak.
A tak nejako poslať vás na vašej ceste.
A hovoria vám späť takže tento malý vec vibrovať
alebo blesk upútať vašu pozornosť.
Takže, je to doslova, čo?
Niečo ako Node.js robí.
Ak Node.js alebo JavaScript všeobecne sa používa
a programátor je dosť šikovný,
realizovať, "Vieš čo?
Čokoľvek, čo potrebujete urobiť hneď Tu by mohol mať určitý počet
milisekúnd alebo sekundách.
Vieš čo?
Nechaj ma ísť dopredu a nie hovoria synchrónne -
"To je chlap blokovanie všetci ostatní v rade, "-
nechaj ma ísť dopredu a trochu krok stranou
a jednoducho hovorím späť
keď tak dlho beží operácia je dokončená. "
A zavolať samozrejme je spomínať v tomto prípade
na funkciu spätného volania, odkaz na skľučovadle kódu
že bude vykonaný keď vaše hamburger je pripravený,
podobne ako túto vec majú niektoré druh funkčnosti postavená-in
že začína alebo vibračné bzučanie, keď je čas pre vás
byť volaný späť do prednej línii.
Takže, čo to znamená v reálnych hodnotách?
No, musíme prácu si cestu hore.
Takže, nechaj ma ísť napred a to ako prvý.
V serverové 1.sú, dovoľte mi, aby som najprv zjednodušiť kód
takže môžeme vziať dieťa kroky smerom viac presvedčivé problém.
To je presne rovnaký program, ktorý som napísal predtým.
Ale to, čo sa zmenilo?
Je tu akési mierne syntaktickú rozdiel
medzi týmto a verzia 0 pred chvíľou.
Čo vyskočí na ak ste si spomínate?
Jo, Cynthia [predpokladať, pravopis]?
[Nepočuteľný Poznámka]
Jo. Takže teraz, máme linku z funkcie boli prenesené dovnútra
Sme zbavili druhu
zo zbytočne menoval funkcie handler.
Useless iba v tom, že pred dokonca volať na jednom mieste,
Nemám naozaj potrebujete strácať čas dávať to meno
a robiť to ťažšie čítať kód zhora nadol.
Takže, poďme sa len vyhlásiť inline je anonymný funkcia.
A ja robím dve iné veci.
Robím lepšie použitie tečkové notácie.
Tak ako v jQuery, veľa uzla metódy môžu byť pripútaný spolu.
Takže akonáhle budete hotoví volanie niečo, nemáte
čakať na nový riadok a volať inú metódu,
môžete len reťaz ich dohromady.
A tak týmto spôsobom, môžeme naozaj dotiahnuť to.
Tak, to je doslova webový server na piatich linkách
z celkových kódu rozdiel -
rozdiel, čo by ste mohli normálne musíte urobiť, nastaviť niečo hore.
Ak idem do servera 2 Teraz, poďme na to.
V servera 2 - vlastne poďme vrátiť sa k tomuto serveru 2.
Poďme teraz otvoriť async-0.js a riešenie tohto problému po ruke.
Takže prvé, poďme dopredu a otvorené
up asynchrónnych-0.js v prehliadači.
Takže async-0, nechajte ma ísť späť do prehliadača.
Hit znovu načítať.
A teraz, je to druh chybového hlásenia.
V skutočnosti som videl 500 v Chrome inšpektora.
Ale dovoľte mi, aby som presnejšie požiadať hello.txt.
OK. Takže, zdá sa, že funguje.
Takže async-0.js nezdá sa, že slúžiť až niečo lomítkom.
To nemá žiadnu podporu predvolený súbor.
Ale keď som výslovne požiadať hello.txt,
že sa zdá byť podporovať.
Prečo je to tak?
No, čo som tu už
a vykonáva sa vykonáva veľmi jednoduchý webový server
ktorá ukazuje, kde sa asynchronicity môžu byť užitočné.
A to je implementovaná nasledujúcim spôsobom.
Po prvé, ja som s použitím Modul HTTP znovu,
ale aj FS, ktoré pravdepodobne znamená?
Všeobecne v SK, súborovom systéme.
OK súborový systém.
Z toho plynie podobne FS, súborový systém.
Dobre, tak čo to mi dal?
Funkcie týkajúce sa súbory, ako dostať prešiel,
otváranie súborov, písanie adresárov, čítanie adresára
a všetky takéto veci.
Takže teraz nevšimol, tento kód je rovnaké ako predtým,
vytvoriť server, okolo v anonymnej funkcie.
To je druh ľubovoľný.
To nie je moc bezpečný webový server.
V skutočnosti, môžete získať prístup väčšina akýkoľvek súbor na pevnom disku
alebo na serveri je ťažké riadiť spustením tohto kódu
pretože som len slepo za predpokladu, že idem
urvat čo užívateľ požadované v URL.
A ja idem prefix s bodkou
takže som okrajovo sú bezpečné
tým, že hovorí, čo súbor môžu Žiadosť musí aspoň začiatok
v aktuálnom adresári.
Samozrejme, že je to hrozba tu.
"Pretože keby miesto sú čo?
Vo svojej ceste, môžu druh z práce okolo toho príliš.
Dot, bodka, nie?
Takže, ak užívateľ práve dal bodku, bodka v adrese URL, teoreticky,
mohli začať sa my - a hovoria, súbor s heslami.
Takže, nie je to znamenalo, ktorá má byť zaistená,
to malo byť jednoduché.
Tak tu mám premennú, ktorá je zreťazenie bodky
ktorý je k dispozícii zoznam a požiadavka URL
ktorý sme videli pred ako lomítko alebo / hello.txt.
Takže teraz, že dostane trochu zaujímavejšie.
Najprv si všimnite na dno.
Počúvam na rovnaký port ako predtým.
Takže skutočný zaujímavé Práca je vnútri tu.
Zakaždým, keď sa žiadosť Dodáva sa v od prírody
tohto kódu, čo mám robiť?
Volám súbor Spôsob čítania súborov systému,
prechádzajúcej v ceste že chcem čítať.
A teraz, je to Čo je zaujímavé, tu,
je to tým, vykonávanie v asynchrónnym spôsobom.
Nemôžete získať návratnosť hodnota z čítania súboru.
V oznámení skutočnosti, že je no ľavý výraz
na ľavej strane čítanie súboru.
To nevracia hodnotu.
Skôr, že volá spätné volanie fungovať, keď je pripravený
aby vám späť odpoveď.
Takže znovu, aby bolo jasné, zatiaľ čo v minulosti,
v mnohých programovacích jazyky, ak by ste chceli
čítať spisu v bode PHP,
súbor podčiarknutie sa zdôrazňujú obsah,
Máte ľavý výraz vo všetkých hodnôt po -
pred znakom rovnosti, to znamená, že ste priradenie
do tejto premennej návrat Hodnota tejto funkcie.
Môžete to urobiť v Node.js, ale tie majú zvyčajne
volať explicitne synchrónne verzia funkcií rád,
Myslím, že to čítať synchronizácia súbor alebo synchronizácia čítať súbor.
Zabudol som, ako sa volal ho.
A že by sa dať Ste návratová hodnota.
Ale v prípade, že súbor je na nejaký vzdialený systém súborov
alebo disk je len prirodzene pomalý, to bude trvať asi 10 milisekúnd
alebo 2 sekundy po dobu tohto súboru skutočne vrátiť.
Medzitým, žiadny iný web Návštevníci sú obsluhované
vaše websit.
Ty blokovanie.
To je to, čo sa nazýva blokovanie IO, vstup / výstup.
Tak tu to je oveľa múdrejší.
Vzhľadom k tomu, čo Node.js sa deje
robiť na tlmočenie je nasledujúce,
to bude volať metóda čítanie súboru,
sa snažia jeden až spisu, ktorý sa dostal Cesta zadaná hodnotou P.
A potom, či a kedy je pripravený aby vám späť obsah
zo súboru P, bude volať funkcia, ktorej podpis je
konvencií nasledujúce.
Dva argumenty, prvý čo je snáď objekt Error,
hlavné mesto E, je to objekt volal Chyba alebo Null
v prípade, že žiadna taká chyba.
A druhý argument - sa odhad - bude čo?
Hovorí sa údaje samozrejme, ale čo je dát konkrétnejšie?
Obsah >>?
>> Obsah hello.txt v príklade Aj vytiahol
v mojom prehliadači pred chvíľou.
Takže inými slovami, čítať súbor a mnoho funkcií Node.js
ako na nevracia hodnoty.
Hovoria spätné volania a odovzdať
k tým, čo by sa spätné volanie boli tradične
vráti hodnotu.
Výhodou tohto prístupu je,
ktoré by sa dalo nazvať čítať súbor a T0.
Funkcia spätného volania sila nemôže byť nazývaný jedným kliešť neskôr
tak povediac na T, je by mohlo byť nazývané T1000,
tisíc kliešte neskôr.
Ale ide o to, že Zvyšok kódu v tomto súbore,
prípadne by okamžite byť vykonané pri Node.js
a zatiaľ čo súborový systém zistí, ako čítať
tento súbor a získať späť k vám.
Takže si vytvoriť to -
tak efektívne ilúzie
paralelizmu pri prenájme pomalší bežiace procesy nie je
blokovať dôležité veci, časť, ktorá servisné užívateľa.
Tak, ako sme zvládnuť?
To je veľmi časté Node.js paradigma.
A je tu spôsob, ako len zjednodušiť To je uvidíme pred sebou.
Prvýkrát som skontrolovať, či Chyba nie je null.
Takže, ak to nie je falošný potom došlo k chybe.
Neviem, čo to je, Možno súbor neexistuje.
Som nemal oprávnenie.
Cesta je v poriadku.
Ľubovoľný počet vecí by sa mohlo pokaziť.
Pre túto chvíľu, ja idem ľubovoľne vrátiť 500
čo je vnútorná chyba servera.
Niečo je zle.
Ja naozaj nestarám ju diagnostikovať.
Takže, poďme sa jednoducho povedať, užívateľ je to rozbité.
A potom, ja idem robiť res.end,
a to je skratka zápisnica.
Pripomeňme, že posledný Keď som robil res.write
a potom som urobil res.end.
Pokiaľ sa chcete len zaslať jeden riadok výstupu,
môžete jednoducho urobiť to všetko naraz s res.end s argumentom,
a že to bude odoslanie čo sa chybové hlásenie
vnútri tohto objektu do prehliadača.
To bolo celkom oblúku spomínam pred chvíľou.
Nemám potuchy, čo to znamená na prvý pohľad.
Ale keď som požiadal súbor, ktorý neexistoval -
pardon, musíme spustiť Server znova.
Keď som požiadal o súbore že neexistovala, EISDIR,
takže niečo o tom, to je adresár,
keď som urobiť nejaký náhodný string tam,
zrejme to znamená, že súbor ani neexistuje.
A to preto, že môj kód je jednoducho hovorí písať
sa bez ohľadu na Raw Chybová správa je,
takže nie je príliš užívateľsky prívetivý ale aspon som to manipulácia.
Inak, ak to nie je chyba, čo robím?
To isté ako predtým ražni z 200 OK, prostý -
text / plain typ myseľ a potom vypľuť dáta.
A to je dôvod, prečo som stále Obsah hello.txt, ktoré práve
potvrdiť, keď som sa pozrel na hello.txt,
je to doslova len ahoj, svet.
A keď som zmenil to ahoj, svet, uložte súbor,
znovu na server, obnovte stránku.
Teraz som si túto verziu.
Takže som naozaj len reimplemented webový server
ako je už mnoho rokov, ale pomocou node.js.
Ale môžeme to urobiť ešte čisto.
Dovoľte mi, aby som otvorila async-1.sú.
Teraz si všimnite, som dodal ďalší modul tentoraz
zrejme modul cesta.
Teraz, to je dobrý príležitosť sa pozrieť
na to, čo dokumentácie vyzerá.
Node.js je dokumentácia.
Rovnako ako PHP Myslím, že je vlastne celkom dobrý
a priamočiara.
Ak idem do Node.js a Google a hľadať Node.js cestu,
to, čo uvidíte, sa zvyčajne je priamy odkaz na adresu URL
že som dal sem pred chvíľou.
Tak / api je oficiálne miesto ísť na dokumentáciu.
A to, čo uvidíte v hornej časti
oficiálnej dokumentácie uzla je všetky metódy a
alebo vlastnosti vnútro tento konkrétny modul,
z ktorých jeden sa nazýva spojenie.
A spojenie je pomocná funkcia že mi bude, aby
že nebude obťažovať s všetky plusy.
A to sa pridal bonus, ako uvidíte,
od dokov je tiež normalizuje výslednej cesty.
Takže, ak používateľ alebo máte bodky alebo dot bodky alebo akákoľvek ich kombinácia
z týchto druhov relatívnej cesty, medzi upsides
tejto metódy je, že sa pripojil to bude čistiť všetko, čo sa
a dá vám kánonický Cesta bez akejkoľvek
z týchto bodov alebo dot bodky.
Takže, je to dobrá vec všeobecnej bezpečnosti aspoň
ak máte kontrolu vráti hodnotu, ktorá nie som
V tomto jednoduchom prípade.
Ale chcel som ho použiť.
Tak, teraz som vytvoriť cestu k trochu programovo
s path.join miesto Raw zreťazenie.
Tak, to je trochu čistejšie ako predtým.
A teraz Všimol som si, že som trochu inteligentnejšie skôr
než len slepo pokúsiť sa prečítať súbor,
Chystám sa skutočne zavolajte fs.stat.
Takže, ak ste oboznámení
s low-level C funkcie a C, dokonca aj PHP.
Mnoho knižníc má Táto funkcia stat vráti
v podstate štatistiky na súboru, veľkosť súboru,
oprávnenia, názov a podobné veci,
a tiež implicitne, ak súbor existuje, alebo nie,
a ak je to súbor alebo adresár
alebo symbolický odkaz alebo niečo iné.
Takže teraz nevšimol, že som volanie fs.stat.
A potom zrejme podľa k dokumentácii,
Mala by som sa vrátiť omylom objektu
alebo Null nasledovaný o štatistiky objekte.
Ale poďme skontrolovať, node.js.fs.
Tu je súbor Dokumentácia systému.
Pozriem sa na štatistiky.
Je tu oveľa viac funkcií tu.
Jejda, to stat synchronizácia, fs.stat.
Tak tu je to asynchrónny štatistiky (2).
To je, ak to znamená pamätať z hlavnej stránky,
kapitola 2 hlavnej stránke,
to znamená, že to je doslova len implementácia uzla
na nízkej úrovni Funkcie systému stat.
Takže, callback dostane dva argumenty, chyby a stat
kde stat je fs.stats objektu.
Takže poďme sa pozrieť, čo sa tento objekt má vyzerať.
Poďme kliknite na hypertextové prepojenie a vidím, že.
Štatistiky objekt obsahuje zrejme nejaký pomocná metóda,
je súbor, je adresár, je veľa ďalších vecí.
Je to "je" súbor, ktorý mi záleží o v tomto konkrétnom prípade.
Tak som tu.
Ak došlo k chybe, potom dovoľte mi, aby som len zachraňovať tentoraz
a prevziať.
Ak je to chyba, je to asi 404 súbor nebol nájdený.
Mohlo by to byť niečo iné
ale ja som bol trochu lenivý tu len sústrediť
o ďalšie zaujímavé detaily.
Ale pre užívateľa účely, súbor nie je nájdený,
v prípade, že bola nejaká chyba s uvedením súbor.
V opačnom prípade mi dovoľte, aby som skontrolujte, či súbor je skutočne aktuálny súbor.
Takže ak to nie je súbor existuje.
Niečo tam je, ale je to pravdepodobne adresár
alebo možno symbolický odkaz
alebo niečo iné, čo je funky v súborovom systéme.
Či tak alebo onak, užívateľ by ho nevidel.
Takže teraz, ja som jednoducho ísť napľuť
sa zvyčajne neoprávnenému 403.
Ale opäť len konvencie,
Mohol som použiť niečo v teórii.
A potom konečne, dovoľte mi, aby som skúste si prečítať súbor.
Takže mi dovoľte, aby som prejdite nadol.
A teraz nevšimol je miesto, kde kód môže byť trochu chaotický,
Všimnite si, že volám fs.readFile absolvovaní
v rovnakej ceste, rovnaký callback ako minule,
takže predchádzajúce verzie.
A potom, ak by som nájsť -
keď som sa ju nájsť, Aj vypľuť 500.
A keď som to nájsť, čo linka sa budeme k videniu?
Budeme vidieť fs napísať hlavičku 200 pravdepodobne
a res.end odoslanie Skutočná dáta.
Ale nevšimol.
A to nie je demonštratívny v najhoršom prípade.
Ale ja mám tento stat volanie tú, než som si nejaké veci.
Potom mám ďalšie asynchrónne volanie tu,
tak viac odsadenie.
Takže, len tak extrapolovať ak by ste mohli odtiaľto.
Aký problém má tendenciu nastať s jazyk ako JavaScript
v tomto prostredí, kde nemáte návratovej hodnoty
ale máte táto spätná volanie.
A samozrejme, je to len štýlová vec skutočnosť
že som sa držať odsadzovanie.
Ale vziať na ďalším logickým krokom.
Predpokladám, že tam bol jeden alebo dva alebo tri ďalšie funkcie
ktoré som potreboval na vykonanie, ktoré boli podľa prírody asynchrónne,
a preto len trochu držať odsadenie s nimi pracovať,
s nimi pracovať, zaoberať sa nimi.
Získate druh spätné volanie sakra, ako ľudia hovoria
kde začína váš kód získať veľmi široký
a úprimne povedané naozaj ťažké čítať.
Ako to je, môžem nejako sotva povedať, že toto je druh prúdu
že má tento druh
z štylisticky uhlová čo sa deje tu.
Takže, to nie je ideálne, pretože to môže veľmi rýchlo stať
nepraktické, aj keď dva asynchrónne volanie nie je
ako veľký problém.
Takže, mohli by sme sa tomu zabránilo, že jo?
Možno ste zahliadli, že Aj misclicked pred chvíľou.
V dokumentácii, viete, vyzerá to, že je statSync.
A statSync neberie spätné volanie ako argument.
To trvá len cestou, pretože to zrejme robí čo?
Vráti inštanciu z fs.stats.
Takže to môže byť vaša prvý inštinkt, že jo?
Zvlášť ak callback funkcie
a je asynchronicity pre vás málo nového, úprimne povedané,
Najjednoduchší prístup je pravdepodobne len problém vyhnúť sa všetkým
spoločne, vráťte sa do triedenia programovanie CS101 štýlu
kde budete volať funkciu alebo metóda vráti hodnotu,
volanie funkcie, vráti hodnota,
Funkcia vracia hodnotu.
A mohol by som použiť preto fs.statSync
ktorý je doslova rovnaký ale je to synchrónne verzia
čo znamená, že sa vráti hodnota.
To neprejde cenia na spätné volanie.
Ale prečo by to pravdepodobne suboptimálne riešenie uchyľovať
na synchrónnu funkciu?
Jo?
[Nepočuteľný Poznámka]
Presne tak, to trvá dlho.
Jenom spomalenie všetko dole.
Vzhľadom k tomu, rovnako ako Shake Shack alebo Chutné Burger, ak sa zbavili
tie bzučiaky a urobili sme z vás, zákazník stojí v čele
riadku, kým vaše jedlo je pripravený ešte predtým, než brať objednávky
osoby za budete zrejme
prostredníctvom put spomaľuje.
Ľudia začnú opúšťať, ste trochu kresliť paketov.
Môžete vytvoriť ľubovoľný počet analógiou tu.
Ale v skratke, je to asi nie je dobrá vec
pre podnikanie alebo pre server.
Takže asynchrónny kód zvyčajne dobré aspoň
v tomto prípade, ale rozhodne to začne spôsobiť pocit úzkosti.
A v tom, trúfam si povedať, kedy Prvý písania tejto veci,
to bude trvať trochu trochu zvykať.
Takže, poďme začať vybaviť ste s niektorými knižnicami
a techniky, aby sa to trochu jednoduchšie.
Takže, jeden z najčastejších Knižnice sú populárne knižnice
v týchto dňoch, to jeden volal async.js.
A rovnako ako mnoho Node.js knižnice alebo moduly,
To všetko sú open source.
Takmer všetci žijú a získať náboj úložisko, ktoré je druh
z stala de facto miesto pre uloženie týchto vecí.
A potom je tu Celá infraštruktúra
Pre inštaláciu týchto vecí volal NPM, Node Package Manager
ktorá, ak ste oboznámení s EvanTube je druh
zo ako aplikácie alebo aplikácie dostať.
Ak ste oboznámení s Red Hat a Fedora
ako je v zariadení, je to ako yum.
Ale je to uzol - to je správcu balíčkov len
pre tento konkrétny prostredie.
Takže, môžeme stiahnuť a nainštalovať veci, ako sú knižnice asynchrónne
a tiež ešte jeden s názvom podčiarkovník knižnicu alebo modul.
Ale tieto, ako ďaleko fs, HTTP, cesta,
to sú všetci prišli postavený do uzla.
Takže ak pôjdeme do docs API, budete skutočne vidieť, že vstavaný
do uzla dostanete zdarma Celá partia modulov.
Ale veľa milých ľudí na internet robili desiatky
ak nie stovky ďalšie knižnice
lepšie robiť veci alebo inak.
Takže, poďme sa pozrieť na ako táto knižnica funguje.
Takže, väčšina z tohto kódu je zhodný pre túto chvíľu.
Mám cestu bytia vytvorený až hore.
A teraz volám async.series.
Takže knižnica asynchrónne, je to len knižnica, ktorá vám umožní
odovzdať alebo zvýšiť typicky funkcie, aby sa tzv jeden
po druhej len na živočíšnom druhu zabrániť tomu, aby odsadenie problému,
a naozaj len duševné pocit úzkosti, že bude vždy vznikať
aspoň pri prvom ponoriť sa na vlastnú päsť
s programovaním asynchrónne.
Rovnako ako v stranou, ak ste si vzali 161 a vy ste sa zaoberal zámky
a zvýšiť podmienky a všetky toho, asynchrónneho kódu
a životného prostredia, ako Node.js je v skutočnosti oveľa,
oveľa jednoduchšie pravdepodobne
než v skutočnosti písanie vlákna kód.
Kedykoľvek máte vlákna kód,
máte vyvolávajú podmienky.
Musíte sa starať o dve vlákna obsahujúce
z rovnakých zdrojov, disku alebo v pamäti.
Krása JavaScript
v Node.js je tu doslova len jedno vlákno,
čo znamená, že prehliadač
alebo len server môže robiť jednu vec naraz.
Je to len na vás, programátor
udržať mentálny model ako si trochu fronty veci
a prísť na to, ako na objednávku kód.
Ale už nikdy nebudete musieť starať o zvýšenie podmienky
v úplne rovnakým spôsobom na aspoň s Raw kódom, ako je tento.
Takže je to trochu ťažko grack tu.
Ale - Takže dovoľte mi otvoriť sú dokumenty pre chvíľočku.
Async.js knižnica, ktorá Rovnako tak je veľmi googleable,
žije v GitHub repot ako veľa z nich.
Nemyslite si, že je to povrchné, že to nie je.
Dovoľte mi, aby som prejdite nadol do Read Me tu.
Takže, knižnica async poskytuje veľa
metód vnútri nej.
Napríklad, tam je metóda s názvom každého z nich
ktorý keď kliknem to len vidieť svoje dokumenty na chvíľu,
Jedná sa o funkciu alebo spôsob , Ktorý vám umožní robiť niečo
ako štyri každého ale paralelne.
Sú to všetko sa bude diať potenciálne paralelne.
A spôsob je každý len chystá sa vrátiť k vám, keď všetky
z iterácie sú kompletné.
Takže možno, že sa stalo jeden po druhom.
V ideálnom prípade, že štát, v podstate paralelne.
Ale táto metóda nie je zavoláme späť.
To nie je bzučať vaša bzučiak, kým sa všetky
z prvkov, ktoré máte opakoval po dokončení.
Takže, je to len príjemný spôsob,
ako sa vyhnúť použitie jednoduchý štyri slučky
ale v skutočnosti robí niečo asynchrónne.
Ale teraz ešte priamo vzťahujúce sa k tomuto príkladu,
Všimnite si, že je to Metóda série.
A dovoľte mi, aby som len vytiahnuť hore jednoduchý kánonický príklad.
Takže async knižnice, rad Metóda berie sa ako implicitné
hranatými zátvorkami v poli.
Aké sú údaje typy prvkov
v tomto poli na báze na jednoduchom príklade?
Jedná sa o rad funkcií.
Takže v C, mali by ste zavolať je funkcia ukazovateľov.
V JavaScriptu existuje viac správne odkazuje k funkciám
alebo anonymné funkcie.
A to len znamená, že pole
Samozrejme sa objednať z na hore nula.
Tak, oni udržovali poradí, ktoré je dobré
pre sériu, pretože rad samozrejme znamená niečo urobiť
aby nedošlo paralelne.
Tak, to len znamená, že táto funkcia bude vykonaný,
potom sa táto jedna, potom sa táto jeden, toto, potom toto,
však ich je
až nakoniec voliteľný callback je volaná.
Takže, všimnite paradigma tu.
A to aj napriek tomu, je knižnica, jeden človek je,
je to zástupca veľmi časté JavaScript paradigma
znovu pomocou spätných volaní.
Takže, všimnite si, čo tu robíte.
V prvej funkciou je prešiel v roku prostredníctvom tohto poľa,
ste definovali v anonymite Funkcie len s funkciou.
Ale upozornenie, že zrejme podľa tejto dokumentácie,
že anonymný funkcie by prijať argument, spätné volanie.
To bude ukazovateľ alebo odkaz na funkciu
že by ste mali zavolať, keď vaše kód je pripravený vrátiť hodnotu.
Takže znovu, na rozdiel od práve typicky procedurálne programovanie
kde ste zvyknutí okamžite vracia hodnoty
že jeden rozdiel pomocou knižnice takhle
v asynchrónnym programovaním viac všeobecne, je, keď ste pripravení
vrátiť hodnotu z databázy zo súboru,
z aritmetického výraz, je to na vás
volanie funkcie spätného volania.
A pekná vec o tejto knižnici
ak budeme čítať dokumenty starostlivejšie je, že,
vtedy a len vtedy, ak všetky Oblasť spätné volania nazývajú
bez objektu Error, bude celá vec podarí?
Takže inými slovami, v prípade, že sú 2,
v prípade, že sú 10 anonymné funkcie
v tomto poli preto v tejto sérii,
len vtedy, keď všetky z nich uspieť,
bude konečné voliteľné spätné považovať za úspešný?
Ak niekto z nich zlyhá každá funkcia
potom, čo nebude i byť vykonané.
Tak, to je pekný spôsob, ako triediť zo s daisy chain
že preruší predčasne ak sa niečo pokazí.
Takže to vidieť v kontexte, tu je to, ako by sme mohli znovu zaviesť
že predchádzajúci program.
Ja si cestu ako predtým, tak to je jednoduché.
Aj kopírovať vložte tento kód kostra
z dokumentácie tam async.series otvorené zátvorka,
otvoriť hranatú zátvorku.
A teraz Všimol som si jedného funkcie v tomto začiatku
sekundy, uvidíme kde sme sa ísť z toho.
A teraz Všimnite si, že je to trochu zložitejšie na prvom mieste
ale zamerať sa len na je riadok po riadku.
Fs.stat znamená, že sa štatistiky alebo čo nie o tejto ceste.
Nazvime to spätné volanie, keď je pripravený.
Tento kód je rovnaký ako predtým.
Ak je chyba, je tu jeden rozdiel hneď.
Opäť platí, že veľmi časté paradigma v Node.js programovania je
keď sa niečo pokazí a spätné volanie potrebuje vedieť
že podľa konvencie, prvý Argument na spätné volanie sa deje
, Že nie, ak je všetko v poriadku, alebo odkaz k objektu Error,
kapitál E. Je to ako chybu Trieda, ktorá existujú na celom svete
ale o tom viac inokedy.
Takže tým, že robí to, v prípade, že je chyba, čo je implikácia?
No na základe toho, čo som povedal séria robí,
Je-li čokoľvek zle, len trochu chcieť
zrušiť celú radu o anonymné volanie funkcie.
Tak, to stačí pre mňa len vrátiť spätné prechádzanie
V objekte Error.
Pretože ak stat dal me späť k chybe,
Mohol by som vytvoriť nový Chyba predmetom mojej vlastnej,
ale ja naozaj nestarám sa,
Chcem sa len prejsť bez ohľadu na Chyba je, že v skutočnosti sa stalo
takže môžem odovzdať ju tejto spätné volanie.
A len aby bolo jasno, návrat nie je nevyhnutne nutné.
V podstate chcem to urobiť ale chcel som sa to "vrátiť;
/ / Tak, že nie viac Kód tu vykonáva ".
Takže opäť ďalšie spoločné konvencie v JavaScripte,
aj keď nie ste vracia hodnotu samo o sebe,
Ak chcete odovzdať hodnotu funkciu spätného volania
ale potom budete chcieť k zastaveniu vykonávania
funkcie, ktorú ste v, triviálne, ako
ako to urobiť, je len volať sem vráti.
Ale nie je nič zlého,
máme len to, spiatočný spätné volanie chyba, aj keď to bude
vrátiť sa do nedefinovanej hodnoty.
Dobre, to nie je vráti hodnotu najpravdepodobnejšej.
Všetko, čo ich zaujíma, sú stravovanie ďalšie prevedenie.
Takže, môj Zjednotenie týchto dva riadky je len stylista
konvencie len majú číslo linky
kódu som napísal 2-1.
Takže čo iné?
V prípade, že to nie je chyba -
v skutočnosti, že je jasné, Mohol by som tiež vyhnúť
že tým, že robí ak inak.
Ale zase, ďalšie spoločné paradigma je kontrola
pre vaše chyby až hore a potom len vrátiť skôr než pokračovať
odsadenie kódu s elses a elses a elses.
Takže ak to nie je súbor, teraz, viete,
Chcem zvládnuť Trochu špeciálne.
Tak tu ako v jazyku Java alebo C + + alebo niekoľkých ďalších jazykov,
Tu je návod, ako môžete vytvoriť inštanciu objekt typu chyby prechádzanie
vo východiskovej správe nie súbor
a to je len trochu arbitrárny.
Ale ja signalizácia chyba z mojej vlastnej.
A to, čo robí tento posledný linka pravdepodobne znamenať?
Všetko je v poriadku.
Ak odovzdáte hodnotu null pre parameter chyba, že jednoducho znamená,
podľa dohovoru všetky je dobre.
Takže, to znamená, že to, čo sa stane logicky?
Ak je odovzdaný null na spätné volanie
to znamená, že tento anonymný Funkcie sa podarilo
aby som tak povedal.
Takže, čo by rada metóda predchádza a teraz sa na základe
na mojej verbálne definície skôr?
[Nepočuteľný Poznámka]
Presun na ďalší jeden, nie?
Ak by sa vrátil nenulový hodnota, to by jednoducho zrušiť
a nie viac anonymný Funkcie by sa nazýva.
Ale pretože to nemá, potom to sa nazýva ďalší.
Takže, logika je tu skoro rovnaká ako pred
a uvidíme, ako sa čistí to si ešte chvíľu.
Viem, že to je dosť veľa
absorbovať všetky verbálne a vizuálne.
Ale teraz nevšimol, druhý anonymné funkcie, ktoré chcem
vykonávať v sérii je pokúsiť sa prečítať súbor.
Nazvime to spätné volanie keď ste pripravení.
Ak je chyba, len signál je prostredníctvom spätné volanie
tak, že zvyšok tohle preruší.
Else return null.
Ale prečo mám okolo v dvoch argumentov?
No to čas, ak som čítal súbor a získať späť
ako premenná s názvom údaje,
Chcem to len znamenať všetko je dobre vracia null
Ako prvý argument.
Chcem sa vrátiť aktuálne údaje ako druhý argument.
Pretože keď som čítať ďalej v dokumentácii,
Všimnite si túto posledný kus kódu hranatá zátvorka znamená, že je
konci radu.
Boli tam len dva anonymné Funkcie v tejto sérii.
Pokiaľ došlo k chybe tu, potom Viem, že jeden z odkazov
v tomto reťazci tak, hovoriť zlyhalo.
Takže inými slovami, táto chyba bude objekt Error
že je null, ak niektorý zo títo chlapci sa nepodarilo.
A ak je to pravda, som len ísť na kauciu von a idem
povedať, 400, ktoré znamená, že žiadosť o zlyhaní,
To je veľmi všeobecný chybové hlásenie.
A potom, ja idem vytlačiť chybovú správu.
Takže, ja nie som obťažoval byť super anal tentoraz,
Nebudem rozlišovať medzi 500 a 404 a 403,
Som len trochu slepo vlna ma za ruku
a povedať niečo pokazilo.
Ale ak sa nič robil pokaziť,
Idem to poslať res.end odovzdávanie týchto údajov.
Teraz to vyzerá trochu záhadné.
Ale na druhú stranu, ak som čítal dokumentácie,
Druhý argument Tento konečný, záverečný callback,
chlap, ktorý je len vykonaný akonáhle radu sa vykonáva
vykonávanie alebo časť tam z, táto bude polia
zo všetkých druhých argumentov
ktoré boli odovzdané na spätné volanie.
Teraz sa ukazuje, že iba odkazujú v tejto sérii
že vlastne návrat do druhej Argument je to jeden tu.
Takže budem druhu na skok viery jednoducho použiť predpokladám,
na chvíľu, že Posledný je metóda
ktorý vám dáva posledný prvky poľa.
Pretože tieto polia že to boli prenesené
pre mňa má dve Indexy, nula a jedna.
Je to len nula nemá žiadnu hodnotu pretože ten chlap sa vracia -
neprechádza do druhej argument, ale ten chlap robí.
Takže výsledky držiak nula nie je nič,
Výsledky držiak jeden obsahuje to, čo,
ak ste po spolu až do tohto bodu?
Súbor, ahoj, svet obsah všetkého,
tak to je, ako som sa vlastne vytlačiť.
A dovoľte mi dokončiť jeden detail tu.
Ak sa mi tento druh starý Škola, či chcem, aby sa
v posledných prvky, keby som mohol robiť výsledky [results.length-1],
to je druh old school spôsob
prístupu posledný prvky v - alebo nulový index poľa.
Ale ako v strane, pripomínajú že som túto knižnicu
tu podčiarkovník, ktoré by konvencie je práve volal
doslova podčiarkovník znak, ktorý nie je zvláštne,
to jednoducho vyzerá skvele, ako znak dolára robí pre jQuery.
To je len pomocník Metóda zdôrazniť bodku posledný
že robí presne to, to isté.
A ak ste nikdy nepoužíval pred podčiarknuť JS ako
na strane klienta kódovanie
a na strane servera je nádherne užitočná knižnica
že toľko ľudí je popísané to rád jQuery obsahuje všetky
metód, ľudia si prial prišiel sa sám JavaScript.
OK.
>> Tak, ako celkom sa mi a Díval som sa v seriáli,
máte ako spätné volanie ako argument?
>> Áno.
>> Rovnako tak, keď sa vlastne ako tlak, ktorý v roku,
a ako to, čo to robí na mysli, keď stačí mať
ako callback a potom sa mi páči -
[Nepočuteľný Poznámka]
>> OK, dobrá otázka.
Takže mi dovoľte, aby som vytiahnuť async hlavná stránka tu
alebo dokumentácie GetHub.
Tak toto je kánonický štruktúra.
Ak hovor pomocou tohto najmä metóda radov,
sú dva veľké súčiastky.
Jedným z nich je rad anonymné funkcie
a dva je konečné spätné volanie funkcia, ktorá je v skutočnosti
vykonaný na veľmi konci radu.
Teraz, keď sme sa priblížiť na prvý trochu bližšie
z tých veľkých vecí, rad anonymných funkcií
podľa požiadaviek tohto Dokumentácia chlap má
byť anonymné funkcia, ktorá zoberie
v jednom argumente tzv spätné volanie alebo foo alebo bar, nezáleží na tom,
ale on volá to callback.
A to je druh vášho bzučiaka že Shake Shack vás ruky.
Jedná sa o prostriedky, ktoré môžete vrátiť hodnotu
k zákazníkovi, pretože vám Nemôžete jednoducho doslova vrátiť.
Musíte to urobiť spôsob, ako tohto spätného volania.
Vzhľadom k tomu, v prípade, vnútri tejto Funkcia je nejaký pomalý beh
kód ako databázu otázok, prečítajte si súbor zo súborového systému,
nechcete, aby tam čakať a blokovať všetky ostatné,
Ak chcete volať na spätné volanie.
Tak, to je doslova názov argumentu.
Ale ako v C, je majú ukazovatele na funkcie.
V Jave máte referenčné metódy systémové
a to isté tu v JavaScriptu.
To je premenná, ale jeho typ funkcie.
Takže jednoducho tým, že píše jeho meno či spätné volanie alebo foo
alebo bar, potom otvorte zátvorka a zatvoriť zátvorka,
ste prevedenie, ktoré na túto funkciu.
A okolo null, ktorý znamená, null chyba a jeden
čo znamená, že sa jedná o Údaje, ktoré chcem odovzdať palcov
A potom kus, aby bolo jasné, To je ďalšie spätné volanie.
A nie je to tzv callback,
je to len koncepčne je metóda callback funkcie
preto, že sa nazýva podľa definície
knižnice tohto autora, keď Celá séria bola dokončená
alebo jej podskupín, ak Chyba sa stalo predtým.
Takže, názov funkcie spätného volania, volanie funkcie spätného volania,
názov funkcie spätného volania, volanie funkcie spätného volania,
iný spätné volanie fungovať dohromady.
>> Teraz máme ako definovať spätné volanie?
>> Nie, pretože ten chlap prejde do poľa
o anonymné funkcie,
ukazovateľ na kód chce vykonať.
Presne tak, v poriadku.
Takže, prosím, povedať, že Kód je trochu jednoduchšie.
Takže, je to možné.
A ak ste rovnako ako ja, sa komfort aspoň vedieť,
to chvíľu trvá, než zvyknúť si na to.
Ale môžeme čistiť to sa trochu,
Nie je príliš veľa hodiť na pre vás ale tu je ďalší variant
a jeho použitie inej metódy
v rovnakej knižnice s názvom vodopád.
Nahor, z ktorých je Na rozdiel od mnohých, ak je každý
z tých anonymných funkcie popravený v podstate
nezávisle na každý z ostatných.
Vodopád ako názov napovedá, umožňuje na najvyššej FUNKCIE
tak nejako prejsť v hodnotách na spodnej funkciu,
Niečo ako kaskádu vody.
Takže hor sa na to je, že môžem trochu
zo použiť vo svoj prospech.
V async.waterfall, Všimnite si nasledujúce.
Môžem len zavolať fs.stat prechádzajúcej v ceste
že chcem, aby sa štatistické.
A potom si spomeňte, ako som mal anonymné funkcie
že mal dva argumenty chybovať,
ÝSLEDKY a potom som volal funkcia spätného volania ručne?
Inými slovami, je jednoducho byť jasné, pripomenúť, že skôr
v async 2, urobil som všetko tejto škaredé práce.
Zavolal som fs.stat prešiel v P,
vyhlásil môj vlastný anonymný funkcie.
Potom som skontrolovať, či chyba je nie je null a potom som to urobil,
inak som si, že sa celá Krása z nasledujúcich dohovorov
ako v Node.js je, že spätné volanie funkcia všeobecne slúžia
aby sa aspoň jeden argument, objekt chyby nasleduje nulou
alebo viac užitočné hodnoty.
Takže si všimnúť paradigma tu,
Tento callback funkcie som prehlasuje takto presne
paradigma, že tento človek je async knižnica robí.
Čo znamená, že to, prečo som Aj vykonáva svoj vlastný spätné volanie
metóda, kedy autor tohto Knižnica je mi doslova podal
na tanieri, aby som tak povedal, Callback funkcie môžem použiť?
Takže môžem len odovzdať referencie on mi dal
tak, aby bezprostredne, moja niekoľko riadkov
Kód stal jeden riadok kódu.
Teraz, kam pôjdeme s tým?
Ďalšie funkcie, ktorá Chcem spustiť,
ďalší anonymný funkcie v tomto poli
funkcií robí nasledujúce.
Upozornenie najprv stat je Prvý argument.
Takže niečo, čo má zmeniť už.
Teraz to chlap, ktorý napísal knižnicu -
a ja hovorím, že toho chlapa pretože je to chlap.
Ten chlap, ktorý napísal túto knižnicu je dokumentácia záruky
, Že v prípade, že funkcia tu mi odovzdá späť objekt Error
alebo null nasleduje kóma oddelený zoznam iných hodnôt,
bude uistite sa, že tí, ostatné hodnoty sú rúk
k tomuto anonymné funkcie v poradí zľava doprava.
A to, čo býval len Callback funkcie sám jednoducho
sa posledná takáto argumentácia.
Teraz neviem, kto som so zameraním na len ty vieš.
Ale teraz, čo je vziať tú?
Takže, vieme z dokumentácie
alebo pred pár príkladov
že fs.stat nakoniec očakáva, Spätné volanie s dvoma argumentmi,
objekt Error, ktorý je Objekt Error alebo null nasleduje
odkazom na štatistiky objektu.
Takže keď som si o tom myslíte, Chyba objektu kóma štatistiky námietky,
ktorý sa zmestí do paradigmy knižnice tejto osoby.
Takže, môžem len povedať, pretože Som ani druhý argument
že je to - že sa deje ktoré sa majú zasielať podľa fs.stat
na spätné volanie je err, štatistiky podľa definície tohto knižnice,
Môžem dať druhý názov argumentu je tu
alebo čo môžem premenovať
ak chcem nasledovať o spätné volanie.
Takže, môžem prejsť jeden cenia odtiaľto sem.
Teraz sú všetky tohto kódu však síce trochu záhadný je
aspoň kópie pasta pre najväčšiu časť z obdobia pred rokom.
Jediný rozdiel je v oznámení Tu som vyhlásil chybu
objekt, a teraz chcem získať trochu milovník.
Vlastne chcem vedieť, čo Chyba bola, takže budem
zastrčiť dovnútra tohto objektu A vlastnosť ľubovoľne nazvaný kód
takže viem, že to nie je súbor
ktoré by mali byť neoprávnené, je to HTTP 403.
Dovoľte mi pripomenúť, že pred Aj odovzdať objekt Error
na spätné volanie.
A potom sa konečne pokúsiť sa čítať súbor, takže v tomto prípade,
vodopád, som zlomený Kód z dvoch veľkých krokoch
do troch menších krokov.
Všimnite si krásu tu,
Môžem zavolať fs.readFile prechádzajúcej v ceste.
A potom tá ťažšia časť psychicky, je, že som len prejsť
V chlapa spätné volanie.
Vec, ktorú mi podal, som ísť prejsť do fs.readFile.
Vzhľadom k tomu, že sme všetci držať na rovnakej konvencie,
Prvý argument na spätné volanie je objekt Chyba alebo null nasleduje
podľa kómy alebo oddelené Zoznam užitočných vecí.
Takže, čo to teraz, a ak znamená, že Prečítajte si dokumentáciu, budem vedieť,
to, úplne posledný spätné volanie, ten chlap tu vonku
z hranatých zátvorkách sa deje ktoré majú byť odovzdané v Error objekte
alebo null, ktorý by som mal skontrolovať ako vždy s týmto kódom tu.
A potom samozrejme tejto metódy
v dokumentácii k chlapovi, posledný vrátená hodnota
z posledného metódy v mojom anonymný pole -
môj rad anonymných funkcií.
Takže, čo si návrat súbor
a ja som s použitím návrat voľne teraz.
Mám na mysli to, čo sa čítať súbor priechod ako argumenty
metódy spätného volania jeho rúk?
Dva argumenty, prvý je objekt Error, alebo null,
to je takmer vždy bude odpoveď.
A druhá vec sa deje na to, čo pre čítanie súboru?
Obsah súboru, údaje tak, ako ho nazývajú skôr.
Takže tým, že sa obmedzila na vyhlásenie ehm, mať za následok,
a skontrolujte, či chyby tohto je druh teraz nudné.
Inak, ja res.end prechádzajúcej v tomto výsledku.
To bude nepochybne nie synchronizovať v dokonale
kým sa skutočne napísať sami.
Ale teraz, sa vo vzdialenosti aspoň skutočnosť
, Že je to zrejme spoločné paradigma, pričom ak sa
a autori knižníc všetky druh palice
s týmto dohovorom metód spätného volania.
A prvý argument je objekt Chyba alebo null.
A druhý a tretí
a štvrtý objekty sú veci, staráme sa o, a my triediť
o dodržiavať pravidlá a dokumentácie.
Začali sme s kódom, ktorý úprimne povedané, je celkom škaredá.
A to aj napriek tomu, že posledný Príkladom je úprimne povedané celkom ťažké
zabaliť svoju myseľ okolo, to je aspoň opticky,
Vyzerá to, že je to oveľa pevnejšie.
A akonáhle sa dostanete pohodlne s tým, že je to tak oveľa jednoduchšie
a je to tak oveľa menej náchylné na chyby, ako tej predchádzajúcej príklad.
Takže mi dovoľte, aby som preukázať posledná vec tu.
Toto je verzia tri.
A - No, nechajme táto sám.
Nechaj ma ísť do niekoľkých ďalšie posledný veci ako oriešky.
Dobre, tak v serveri 2.
OK. Po prvé, akékoľvek otázky, Viem, že to je veľa
ale chcel viac pokyny, tak?
Nepovedal si dobrý Inštrukcie nutne.
Jo?
[Nepočuteľný Poznámka]
Správne, ty si v podstate zhovievavý k operačnému systému
prísť na to, ako sa žonglovať všetkých týchto lôpt naraz,
čítanie zo súboru, čítanie z databázy.
A to je danému serveru JavaScript sama o sebe, že je to jediný vlákno.
A v podstate, a v skutočnosti,
je tam jeden obrázok Nechcel som zvracať,
a to nie je nevyhnutne všetko, čo poučné
ale možno dáme Ste duševné modelu.
JavaScript sám a uzol
najmä sa to tzv event loop.
Pričom môžete myslieť z Node.js, program,
Je doslova ako nekonečnej slučky.
Je to len divoká slučka, čaká a čaká a čaká,
hľadá pre úlohy dokončiť.
A úloha by mohol byť, ísť priniesť niečo z databázy
alebo tu je hodnota z databázy alebo choď tento obrázok
z disku alebo tu požadovať od užívateľa.
Každý druh akcie, rovnako ako udalosť prehliadača riadený,
tak, aby server side event riadený.
A niektoré z tých vecí, predstavujú udalosti.
Takže niekto v Node.js, len napísal nekonečnú slučku,
veľký divoký slučka, čaká pre veci sa stane.
A pretože veci sa stane, že skončí vo fronte, že jo?
Iste, databázy môže vrátiť hodnotu.
A súborový systém, prevádzkové Systém môže vrátiť hodnotu
zhruba v rovnakom čase ale tam to asi bude
byť nejaký usporiadanie pre nich.
A Node.js sa chystá majú v podstate fronta
ako veľké pole alebo vektor, niektoré dátové štruktúry
ktoré tlmia všetky z tých vecí.
Vzhľadom k tomu, že môže doslova len rukoväť jeden z nich naraz.
Takže, ak ste vývojár,
písanie asynchrónny JavaScript Kód pomocou asynchrónneho
funkcie, budete umožňuje tento tzv event loop ísť
na ďalšie kliešť, nie?
Tak dlho, ako budete ihneď vráti ako všetky
z týchto asynchrónnych metód robiť ako čítanie súborov a stat,
okamžite vrátiť pretože callback nakoniec
dostane späť.
Akonáhle sa vrátite,
to znamená, že niekto iný môže sa objavila mimo sklad tu
alebo že môže dostať vyskočila off v prednej časti frontu tu.
A tak, že je v Skutočnosť, serializácie
o všetkom, čo sa deje,
aj keď všetky tieto veci možno sa deje paralelne
na vlákna systému.
Ale Node.js seba a server bol spustený
ako jedno vlákno.
A po strane, ktorá je t nemusíte nutne max
z počítača je schopnosť je obzvlášť
ak máte 16 alebo jadro aj 2 jadro počítača
a vy ste práve beží jedna inštancia uzla.
Ale ak si zase ste vziať niečo ako 161,
vyhnete obrovskú nočnú moru bolesti hlavy, pokiaľ ide
pretekať podmienky a zámky a semafor
a písať skutočne vlákna kód,
tak upsides a nevýhody.
OK. Takže, staré sem kódu, dovoľte mi navrhnúť, že začneme
zjednodušiť veci trochu.
Videli sme, servera pre jeden trochu pred ktorý vyzeral takto.
Tak, to je pravdepodobne celkom jednoduché.
Ale rovnako ako v celom svete PHP, tam sú rámce
ako Laravel a tam je veci ako Rails a Django,
To isté v Node.js svete.
A budeme míňať viac čas na to v stredu
a v ďalšom projekte.
Ale keď idem do Server 2 adresára,
Všimnite si tu pár paradigiem.
Tak to je - tam deje byť ekvivalentná príkladom
ale je to pomocou rámec tzv express.js,
ktorý je slobodný open source softvér, ako Rails a Django,
ako Laravel, že je len nakoniec bude
byť nedocenený dnes Pretože sme písali
také jednoduché príklady.
Ale verte nám.
To bude veľmi rýchlo stal vaším priateľom
, Pretože to ušetrí Ste veľa TDS kódu.
A spoločný vzor pre express.js aplikácie
Ak chcete mať app.js alebo server.js súbor, ktorý obsahuje logiku
z programu alebo na aspoň vstupný bod.
Môžete mať viac súborov.
Uzol modulu podadresár ktorý má knižnice
že ste si stiahli ako async
a vyjadrovať sa v iných krajinách.
A potom package.json, package.json vyzerá to,
a môžete ju vytvoriť ručne alebo nástroje vytvoriť pre vás
a to doslova súboru json
a zaujímavá časť je závislosťou tu.
Rovnako ako v Laravel, môžete mal tento adresár predajcu
a vy ste museli robiť starosti o obaloch a robí -
v skutočnosti aktualizácie sa Remeselník alebo podobné príkazy,
že ste knižnice ste nainštalovali,
Podobne sa package.json tu a spravovať knižnice
a verzie že vám záleží.
Takže, keď mám package.json, Nemôžem jednoducho robiť NPM,
Node Package Manager nainštalovať, to bude automaticky hľadať
v tomto package.json súboru.
Pozrite sa a uvidíte, mám majú najnovšiu verziu
všetkých predajcov moduly
v uzle podčiarkujú moduly adresár tu, alebo možno
v niektorých rodičov alebo predok adresár.
A ak nie, je to ísť si ich stiahnuť
a uvidíte veľa
HTTP vecí deje cez drôt.
Tak napríklad, dovoľte mi, aby som ukázať obsah
uzlových modulov len vyjadriť.
Nechaj ma ísť dopredu a smelo odstrániť uzol moduly
takže všetko, čo mám teraz je to.
A keď som to NPM nainštalovať, budete si musieť vybrať vidieť, že to bude čítať
že package.json súbor a sme videli výstup podobný
k tomu vo svete Laravel.
Je to sťahovanie celok veľa vecí, a to
pretože express v poradí závisí na celú bandou
z iných knižníc národov.
Takže, všetky z nich sú trochu sťahovanie rekurzívne.
Až teraz, keď som to v LS znova,
tam je moja uzol moduly adresár späť
a vyjadriť tak späť.
Takže je to len spôsob, ako zjednodušuje správu balíčkov.
Teraz, keď sa pozrieme na app.js súbor, to bude
byť návrat k Naše najskôr webový server
kde sme len pľuvať out "ahoj, svet".
Ale všimnite tu paradigmy,
Najprv sme vyžadujú výslovný modul, potom máme tento riadok
kódu, ktoré poznáte z dokumentácie.
Doslova liečbe, ktorá premenná modulu ako funkcie,
tak otvorené zátvorka zavrieť zátvorka znamená, spustite ho.
To bude zrejme vrátiť niečo, čo ideme
zvyčajne vyžadujú app.
Ako to funguje?
Ja naozaj neviem.
Nechám niekoho iného, ​​viete, na výslovnú svete napísať, že.
Chystám sa teraz stať na jeho alebo jej ramená tak, aby
aby svoju žiadosť beží trochu jednoduchšie.
Tu, ja idem si vypočuť na tomto konkrétnom porte
ktoré by mohli byť najviac čokoľvek.
A tu je kód, ktorý je možno viac pripomína teraz
z Laravel a routes.php.
Tak to je večera jednoduché, som práve chystá zadať trasu
za lomítkom hviezdy, takže všetko sa bude absorbovaná
podľa tejto obslužné rutiny žiadosti.
Paradigma pre psovoda vyžiadanie je jeho anonymný funkcie
so žiadosťou argumentu
a objekt reakcie rovnako ako predtým.
A res.send v expresných prostriedky odoslať nasleduje kód
tým, čo chcete poslať.
A samozrejme, môžete robiť niečo milovník
by vlastne odoslaním súbory alebo HTML
alebo dynamicky generované obsah.
Ale teraz, všetko, čo sme robili bola vypľuť Hello, world.
Ak pôjdeme do serveru tri, to je ešte milovník len
ukázať vám niektoré funkcie.
A my vám ukážeme ešte zvodnejšie verzia
z toho v stredu.
Ale ak ste niekedy počuli zo Socket IO možná,
tak, ako si myslím Jonathan alebo niekto povedal predtým,
jedna z vecí, Uzol je veľmi známy
, Je jeho reálnom čase správanie, nie?
Premýšľajte o PHP v MySQL, ak bolo implementovať chatu servera
v PHP, keď dvaja ľudia mohli otvorte okno prehliadača sa foo.com
a potom začať IMing každý ostatné, Alice v jednom okne,
Bob v sebe, takže každý z nich vidí jeho
alebo jej správy v druhé okno.
Ako by ste to urobiť v PHP a MySQL?
Použitie alebo nepoužitie Laravel druhu o nevýznamné, môžete mať
ako súbor index.php.
A musíš mať - v V niektorých prípadoch to má pľuvať
z formy, takže je tu bude forma HTML
že pravdepodobne predloží nie je cez normálne odoslanie formulára
ale Ajax asi, že jo?
Takže, na odoslať handler, takže zadáte do textového poľa,
stlačíte zadať a potom to dostane poslal na server cez Ajax.
Čo si potom vykonať na serveri?
Takže, máš index.php
alebo niečo bodka PHP, ktorý je dostal v parametri HTTP
od užívateľa, Alice alebo Bob rýchle správy, čo robíte
s tým, aby ho šíriť Bob a Alice, resp?
Mám na mysli vás doslova mať k dispozícii nástroje, s ktorými
aby to v min.
Tak, ako to, čo by ste robili?
Máte jednu minútu na vykonávanie tohto programu.
Jo?
[Nepočuteľný Poznámka]
Perfect. Dobre, tak máte databázu.
Máme málo vieme niečo o MySQL.
Takže, máte tabuľku to správy,
Možno je tu doba pečiatka, ID užívateľa,
Telo správy sám vytvorený, ktorý,
aktualizované a že všetko.
Takže môžete ukladať do databázy.
A predpokladám, Alice pošle prvá správa, ako sa Bob sa
táto správa sa z databázy?
>> Mohlo by to byť nejaký Ajax odpoveď, ktorá je neustále deje
späť do databázy hore dostať [nepočuteľné].
>> Presne tak.
Takže Bob kód, ktorý je kód rovnako ako Alice je proste tak nejako
zo symetrického vzťahu,
Prehliadač Bob má nejaký Ajax kód to je asi snáď každých 30
sekúnd ťahanie Server cez Ajax synchronizáciu,
sú tu nové správy?
Sú tam nové správy?
Každých 30 sekúnd sa deje byť druh optimálna
pretože sa musí čakať aj
ak Alice doslova práve poslal správu.
Takže, mohol prehliadač Bob každý druhý hit servera.
Ale to znamená, že Alice je Prehliadač je biť servera
každý druhý.
A čo Charlie [Predpokladá sa, pravopis]
a David [predpokladať pravopisu] a Edward [predpokladať pravopisu]
a každý ďalší list abecedy?
V čom je problém tohto prístupu?
Mnoho hitov nadmerných -
Myslím, že si práve efektívne Dávkovacie svoj vlastný zrak
alebo DDOSing, Distributed Denial of Service útok
na svojom vlastnom webe, ktoré majú všetky
z týchto užívateľov spúšťať JavaScript kód, ktorý je len ping
sakra zo svojho servera aj keď ľubovoľný počet,
80 percent času nikto nič nepovedal
v chatovacej miestnosti.
Ale vy ste len kontrolovať aby sa ubezpečil, ako.
Takže PHP v mnohých jazyky sú jednoducho nie je dobré
pre komunikáciu v reálnom čase.
Pretože v PHP odvolaní je tu žiadny centrálny pamäti, nie?
Máte objekty relácie ktorý vytvára ilúziu
centrálneho úložiska, ale to je na jednotlivých užívateľov.
Nemusíte mať globálny pamäti ako vy v Java Servlet
v známom prostredí alebo v iných rám funguje takto.
Node.js keď, máte globálnej pamäti, pretože máte
jeden server a že "môže spomenúť, že chce
o všetkých užívateľov.
A možno ešte majú databázu.
Ale pekná vec, o Node.js tiež je, že je to oveľa lepšie
než niečo ako PHP a vytvorenie ilúzie
pracovať s viacerými veci naraz.
A v tom, ako v stranou, môžete realizovať chatu serverov v PHP,
ale tie by zvyčajne robiť niečo, čo nazýva dlhý dopytovania
ktorým nemáte ping každý druhý server.
Ping na server, Server nereaguje na vás
o hore 30. sekúnd, doslova sedia
v slučke čakať a čakať.
A server skontroluje, ak je je tu nové dáta v databáze
a až potom, čo si všimol, "Oh, Tu je správa od Boba, "
to odpovedať na HTP serveru?
Takže efekt vo vašom prehliadači je, že ikona IE alebo Mozilla
alebo čo jednoducho stále točí po dobu 30 sekúnd naraz.
Ale hore je, že nie Máte 30 žiadostí o pripojenie
30 sekúnd, máte jeden.
Takže je to len dlhý polling.
Ale ešte lepšie v modernom webe prehliadača je niečo, čo nazýva
WebSocket, ktorý budete mať CS143,
môžete efektívne vykonať TCP spojenia z niekoľkých klientov
ako prehľadávača na serveri a zaveste na neho
bez použitia takmer ako mnoho zdrojov,
ako HTTP môže tradične robiť.
A Socket IO je Node.js knižnica
že je oveľa ľahšie vykonajte pripojenie soketu
alebo ilúzia tam v starých prehliadačoch
takže môžete realizovať tento v reálnom čase funkcia je.
Takže, tu je príklad.
Toto sa hore dostane Trochu zložitejšie
ale je to väčšinou skopírovať a vložiť z dokumentácie socket.io je.
Tu je teraz viac presný požiadavku psovod.
Je-li užívateľ požiadavku lomítko, čo súbor idem
sa zrejme slúži k nim?
Index.html.
A tam je nejaký nový veci tu potok
ktoré som vám ukážem, za chvíľu.
Ale to je len ďalší spôsob,
chytil sa podať trochu efektívnejšie
než len to fs.readFile.
Je to trochu múdrejší najmä pre veľké súbory.
Tak dlhý príbeh krátky, Tieto riadky len slúžiť
do súboru s názvom index.html
ktoré teraz predpokladať, obsahuje Formulár HTML, ktorú Alice
a Bob by mohol vzájomnú komunikáciu.
A konečne, io.sockets.on, takže pochádza z tejto línie sa tu.
Takže, ja som len čítanie Dokumentácia io.socket mi dáva
prístup k tzv WebSocket s prehliadačmi,
medzi prehliadačmi a server.
Počúvam pre špeciálne Pripojenie udalosť, ktorá znamená
keď používateľ prvýkrát hity server sa snaží
na otvorenie tohto pripojenia, som bude volať toto spätné volanie.
A teraz, idem vykonať nasledujúce kroky.
Každých päť sekúnd, čo budem robiť?
Budem vydávať alebo vysielanie ak si pamätáte poškriabaniu,
grafický jazyk by že vysielací bloky?
Takže, budete vyžarovať
alebo spustiť akciu s názvom ľubovoľne zo servera.
A bude to obsahujú Ping správu
a aktuálny dátum.
Tak, to je skutočná chatu servera, že Alice
a Bob môžete použiť, ale je to trochu automatizovaného servera chatu
kde sú správy len trochu sonar ping.
Je to len dátum v časoch, ktoré sú sú zasielané každých päť sekúnd.
Takže, keď som vlastne spustiť tento vec - a to je všetko.
Aby bolo jasné, tu dole, oznámenia to je len prihlásení tu.
Takže mi dovoľte, aby som zase slepé oko k tomu.
Nechaj ma to urobiť uzol app.js.
Nechaj ma ísť do môjho prehliadači.
Obnoviť domovskú stránku tu.
[Pause]
A dovoľte mi, aby som zatvorte inšpektor.
Každých päť sekúnd, mám demonštrácie, aj keď nie
Interaktívne pre človeka
z niečoho, čo je deje asynchrónne.
V oznámení prehliadača, nie je ikona pradenie.
Je to pomocou milovník funkcie Chrome v moderných prehliadačoch
udržiavať zásuvku Pripojenie pod kapotou
a to je to, čo sa nazýva všeobecne model pub / sub,
publish / subscribe modelu, kde sme neurobili
že úplne explicitne tu.
Ale to, čo je pekné o tom Všeobecne pub / sub paradigma je
že môžete mať jeden vydavateľa.
V tomto prípade centrálny server a všetky
jednotlivca prehliadače sú klienti.
Alices a Boby z svet sa môžu prihlásiť na to,
takže môžete prenášať správy medzi ľubovoľný počet užívateľov.
A aj keď už sme Nie je vidieť interaktivitu,
sme mali asi 12 liniek kódu jednoducho to urobiť.
A to asi nie je skok si predstaviť, ako by ste mohli bič
von súboru index.html ktorá má skutočnú podobu HTML,
trochu jQuery kódu s Ajax, ktorý neodošle denné
ale práve odošle čo Alice alebo Bob typ na serveri
a potom server bude odovzdávať ju.
A sľubujem, že zahliadnuť na jednu poslednú vec, ktorú práve
ťa podpichovať s tým.
Ak by sme ísť do potoka nula a jedna,
uvidíte kód, ktorý je práve trochu inak tu.
Len aby ste videli, Jedná sa o alternatívne
k tomu, čo som nazval fs.readFile metóda skôr, kedy,
môžete povedať Node.js, "Choď prečítajte si tento súbor do pamäte.
Ale či je to veľký jednoducho dať mi kus naraz. "
A možno viete z CS165
alebo 161 súborové systémy majú rôzne
Vlastnosti výkonu.
Možno budete chcieť prečítať v blokoch po 512 bajtoch
alebo 2KB alebo čokoľvek.
To je spôsob, ako optimalizovať dostať sa späť súboru iteratívne
takže môžete pľuvať ju o trochu rýchlejšie
do prehliadača, alebo kto je koniec klient.
Tak obrovské množstvo obsahu dnes a budeme sa potápať
do väčších detailov v stredu s Timom [predpokladať, hláskovanie]
najmä pri pohľade na tom, ako môže prekladať niektoré myšlienky
z prvej polovice Samozrejme Laravel a modely
do knižnice, že on sám napísal tzv Bookshelf.js
, Ktorý je stále viac populárne v komunite
, Pretože to vám dáva väčšinu z toho,
ak nie viac ako Funkčnosť výrečný
ktorý odvolanie je to, že knižnica pohľad z Laravel,
tak o tom viac a viac, ako
vyvinúť plnohodnotného aplikácie v stredu.
Budeme vidíte potom.