>> V redu.
Torej Cliffhanger je bil, kar je node.js, kot jo poznamo danes?
Kaj? Ja?
>> Bilo je kot Okvir pisanjem JavaScript
aplikacije v glavnem -
>> OK, da deluje.
>> - Vem všeč skupne uporabe, kot so -
ali nekaj, kar lahko naredite, je, kot so -
[Neslišno Opomba]
>> OK dobro.
Ja, tako da je okvir.
To je motor, s katerim ste mogoče izvršiti JavaScript kodo
Strežnik stran.
To lahko pomeni Najenostavnejši stvari
kot je pisanje ukazno vrstico pisava ni Python ali Bash
ali Ruby ali PHP, ampak samo v JavaScript sami
in jo izvrši na utripa ukazno vrstico.
Ali lahko dejansko vodijo je v spletnem strežniku.
In v bistvu znotraj node.js sam
Ta okvir je cel kup knjižnic, med katerimi so
V HTTP strežnik vgrajenih.
Torej, lahko dejansko napisati strežnik, kot bomo videli,
, v trenutku, super enostavno ki jih samo za razumevanje malo
HTTP in TCP in pristanišč.
In lahko micelij poslušanja spletni strežnik brez Apache,
brez Microsoftovega IIS.
Brez kakršne koli druge nameščene programske opreme,
lahko samo drstijo to in poslušati večino koli pristanišča
o sistemu, ki ste dovoljeno.
Torej tako in točk, Naj gredo in odprite
do tega na primer server-0.js.
Tako opazili, da vrh ta datoteka, samo kup
od nezanimivih pripomb, in potem je tukaj še nekaj
reprezentativnih vrstic kode da bomo videli recurringly.
Torej, var HTTP dobi zahtevajo "HTTP".
Tako vgrajen v node.js " infrastruktura je cel kup
modulov, ki so res samo knjižnice in vse je nekako
z blagovno prostor z posebni identifikator
kot je ta ena je "HTTP".
Tako da, kot v veliko jezike, kot sta Java in C + +
in C, samo takrat, ko uvoz ali vključujejo
ali v vozlišču govorijo zahtevajo modul počne svoje bitov.
In vse spomin zahteva, da se obremenjeno
v RAM in se zato uporablja.
Torej, ste nekako naložiti to knjižnice ali module na zahtevo.
To pomeni, da gredo naprej in zahtevajo
za ta program Knjižnica HTTP,
in se nanašajo na tej knjižnici način spremenljivko imenovano HTTP.
Toda ta simbol na levi strani bi lahko so bili imenovani karkoli, foo,
bar, Baz, ni važno.
Torej, za razliko od C + + in Java in C, kjer, ko zahtevajo
ali uvozite knjižnico, to nekako
of postane globalno dostopna,
node.js moduli bolj tesno imenski prostor.
Tako da sami - to funkcionalnost je dostopna samo v trenutku
s pomočjo tega imena spremenljivke.
Ne moreš kar začeti Tipizacijske metode, ki obstajajo
v njem prav tako kar je verjetno dobro,
ker potem je vaš imenski prostor ne dobijo niti približno tako nered
kot v veliko jezikih.
Vse je v redu, tako da zdaj kot skupni Predlagam, ustvarjanje HTTP strežnik
kot [domneva črkovanje] Jonathan je bilo mogoče, je dobesedno
tako enostavno, kot kliče ustvariti metodo strežnika znotraj
v HTTP modula.
Torej, ta se vrača reference
za neke vrste spletni strežnik.
Prišla je do Apache, ne nujno tako težka teža.
Ta je malo lažje.
In zdaj moram samo preprosto storite nekaj stvari.
Torej, najprej, dovolite mi, da se pomaknete na dno tukaj
in preskočite trener Postopek za trenutek.
In opazil to vrstico kode,
server.on ki je v bistvu pomeni, strežnik -
poslušati kot v jQuery kode,
poslušaj za dogodek imenovano zahtevo
in samo ugibati Kaj naj storim
ko zahteva za dogodek požari v strežniku.
Ja?
>> Pokličite funkcijo vodnika.
Torej, dobesedno izvršiti kodo, ki se sklicuje
s to spremenljivko in dejansko ne spremenljivka simbolu tod
kaj je to simbol nanaša?
No, to ime delujejo tu gor
in trener očitno traja dva argumenta.
Zakaj dve? No, če si preberite nobene dokumentacije
za ta poseben modul, ga bo povedal, da je trener
da se sklicuje bo Minilo je vsaj dva argumenta,
sklicevanje na zahtevo
in notranjost željo dobesedno pomeni zahtevo HTTP.
Torej, vsi tisti, HTTP glave da bi lahko odpoklic
od začetka semester ali kakšno pred razred
ali izkušnje kot dobil linijo in gostitelja črto
in User-Agent linijo, vse to je zaprta in bolj znotraj
to zahtevo predmeta.
In predmet odziv razporejene za izhodne podatke.
Torej, boste morali sklicevati na ugovarja, da se dogaja, da vam omogočajo
Za pošiljanje podatkov nazaj Brskalnik, ki ga kliče metode
na to zadnje trditve pozval Res za odgovor.
Vendar bi se to imenuje, foo ali bar, to so le konvencije.
Torej, zdaj, kaj naj naredim?
No, zdi se, da v notranjosti to super preprost spletni strežnik
da sem izvedbenih sem boš naredil naslednje.
Jaz bom napisala HTTP Glava s statusno kodo 200,
200 Pomen OK, vse je dobro.
In potem, bom prenesti na videz.
Kaj je podatkovni tip Drugi argument proti desni glavi?
>> To je predmet?
>> To je objekt s koliko ključi in vrednote?
Samo eno od vsakega, desno, ena ključna vrednost para.
Torej, "vrsta vsebine".
In edini razlog, Jaz sem ga citiral tukaj
ker bi bilo vezaj združevali za znak minus
ali nekaj takega.
Torej, moram ga citiram tukaj, Na en sam ali dvojne narekovaje.
Ampak še enkrat skupna paradigma
v JavaScript kodo je pogosto single quotes Te dni,
debelega črevesa in nato vrednost.
Torej, to je samo ti tipa um.
To je glava HTTP , ki je dobesedno dogaja
biti vsebina type vezaj debelega črevesa Besedilo slash jasno, da se dogaja
poslati iz Strežnik v brskalnik
tako da brskalnik ve ali vodijo to kot Raw besedilo
ali HTML ali kot slika ali film
ali Flash datoteko ali karkoli drugega.
Zdaj, kje dejansko želijo poslati v telesu strani?
No, samo z branjem dokumentacija
za objekt odzivni znotraj te knjižnice.
Vidim, da obstaja pravica način in da traja niz,
morda druge stvari, vendar minimalno niz.
In niz je tisto, kar je izpljunite v brskalniku.
V tem primeru njegova super preprosta, njena zdravo svet,
vendar bi bilo opne nosilec, html, zaklepaj,
oklepaj glava, blizu nosilec in tako naprej,
to bi lahko bilo Raw html.
Vendar smo vodenje primer preprosto jih samo pljuvanje
od najpreprostejših vrst uma ki je nedvomno text / plain.
In potem response.end samo pomeni tesno povezavo
in poslali vse, kar imam nekako buffered notranjosti
tega predmeta nazaj v brskalniku.
Končal sem. Vse je v redu.
Torej, zadnja stvar Jaz delam tukaj
in to je nekoliko samovoljno in mišljeno, da se ohladi,
se Pravim Strežnik končno prisluhniti
na določenem TCP privzeto pristanišča.
Spomnimo se od začetka iz razreda, da storitve -
ali jih po navadi edinstveno ga mora označiti s številkami,
AD je web, 443 temelji HTTP spletne strani, 22 je SSH, 21 je FTP
in 1337 je samo samovoljna ampak to je višja od 1024
kar pomeni, da na večini Sistemi, ga lahko uporabite
ne da bi bilo super uporabnik privilegijev.
Torej je to samo priročen.
Ampak 8080 je v off - skupni en, 8088, res nič velika
v tisočih so pogosti ampak to je samo še elita.
V redu, kaj se zgodi, ko sem dejansko vodijo to?
No, jaz ne le obiščite stran v brskalniku.
Ta datoteka se imenuje server-0.js.
Ker še enkrat, Apache je zdaj iz slike
v drugi polovici tečaja.
Če želim na spletni strežnik, moram napisati
in nato zaženete to spletni strežnik.
Vendar se izkaže, da je JavaScript tako na strani odjemalca
in na strani strežnika je razlaga jezik.
Torej, vse kar potrebujete, je tolmač.
Torej To je - če vztrajajo, da delujejo vozlišče in potem server-0.js,
Jaz lahko ali pa ne glej nekateri izhod odvisno
o tem, kaj knjižnice sem vključena, nič ne zdi, da se dogaja.
Ampak pustite me, da brskalnik in me spustili
na isti IP naslov mojih CS50 strank.
Vendar je to lahko samo tudi moj Mac
ali moj računalnik in nato pritisnite enter.
Ki dejansko izgleda kot Apache.
To je kot imenik uvrstitev sva pogledala
na v prvi polovici.
Torej, kaj sem naredil narobe?
Ja.
[Neslišno Opomba]
Točno tako, kajne?
Torej, Apache je še vedno poslušajo na privzeti port 80.
Čeprav sem se lahko spremeni, da se Jaz bi ga izklopite vse skupaj
vendar je še vedno teče.
Ampak ti fantje lahko Vsekakor sobivajo.
Sem preprosto moral dati debelo črevo 1337 in nato morda
ali morda ne poševnica na end za dostop do teh vrat
da ta strežnik teče naprej.
In zdaj vidim, da je hello, je svet vrnil.
In sem lahko udaril reload kot tolikokrat, kot si želim
je še vedno služijo up strani.
Pravzaprav, če sem odprla Chrome je Inšpektor, pojdite na omrežje
in potem ponovno naložiti celo stran,
opazili, da je dejansko bil tak Zahteva, da je bilo sporočilo poslano.
Če gledam na Raw viru,
Opazili moj brskalnik pošlje vse te stvari.
In potem odgovor Strežnik je super enostavno.
Obstaja 200.
Če to ni prenizka na zaslonu,
obstaja vrsta vsebine.
In potem node.js nekako samodejno
za mene dodal datum in vsi drugi stvari
da brskalniki običajno pričakujejo.
Torej, kaj je samo prikaz Malo preverite sanity.
Naj se vrnem na kodo v strežnik 0.js in me -
vsakič, ko sem šel v trener,
Naj povem console.log.
("Imeli smo obisk! ').
Ni mi treba prevesti ali kaj podobnega,
to je razlaga jezik.
Torej sedaj, mi gremo nazaj stran, osvežite eno, dve,
trikrat in pojdi nazaj k mojim oknom.
In zdaj vidim to.
No, da je čudno, Vidim šest linij.
Zanimivo spletno malenkosti, zakaj je Sem dobil šest zahtevo ne tri?
Ja?
[Neslišno Opomba]
Ja. Torej, kot veste, malo neumno ikona na vrhu
bara brskalnika, da veliko
od spletnih strani, ki se uporablja moči biti Harvard grb,
je morda logotip podjetja ali kaj podobnega.
Torej, brskalniki te dni nekako
od presumptuously da Dodatno zaprosilo HTTP
na skoraj vsaki spletni strani, ki boste obiskali preverjanje, če je
privzeto datoteko imenuje favicon.ico
v istem imeniku kot datoteko, ki jo zahteva.
In če je tako, se postavlja ikona tam.
Torej, vsi smo videli je točno to.
In v resnici, da vidimo, če bomo To lahko vidimo kot vrsto
ven le, "Imeli smo obisk".
Dovolite mi, da gredo naprej in izhod.
In jaz samo vem, to od gledaš dokumentaciji.
Tam je nepremičnina v notranjosti Zahteva objekt imenovan URL
ki se zgodi, da bo pot
, ki je bila zahtevana v dejanski URL.
Torej, če sem znova zagnati strežnik preprosto z vnovičnim zagonom vozlišče
na strežnik-0.js in Zdaj pa je to ena, dva,
tri in iti nazaj.
Tukaj je.
Slash je tisto, kar sem - človeški zahtevala
v favicon.ico je kaj brskalnik
presumptuously zahteval.
Vendar točka ni Toliko stvari favicon
ampak kako se upravlja strežnik.
Ja?
>> Zakaj je, da imajo da bo nekaj zahteva?
>> Zakaj ima to - z naravo, kako HTTP deluje.
Torej, lahko HTTP zahteva samo ena datoteka naenkrat.
Brskalniki lahko biti pameten v teh dneh
in obdržati TCP povezava odprta.
Če si vzel CS143 ali splošno seznanjeni z mreženjem,
tako da boste lahko dobili večjo učinkovitost
z ohranjanjem mreže Vtičnica odprta
izdelavo več HTTP zahteva serijsko nad njim
ampak oni so ena datoteka na zahtevo.
Torej, če boste obiskali nekaj podobnega -
Mislim, da lahko gremo na večina vseh spletnih strani.
Če greste na - dajmo potegnite navzgor Chrome je inšpektor tu.
To se vam lahko izpolnijo najbolj strani.
Pojdite na zavihek omrežja in pojdite na www.cnn.com.
In ko boste obiskali cnn.com, njena domača stran -
Vaš brskalnik namesto atrociously naredi - še vedno štejemo.
OK. Vsaj 289 HTTP zahteva, znova in znova.
In to je razlog, zakaj, ko obiščete predvsem napihnjeni spletnih strani,
oni počasi obremenitev Zaradi vsega
sredstev oni nakladanje.
Tako, da izgleda kot 298.
Morda obstaja nekaj Ajax dogaja na tej točki ali nekatere
sredstev, ki so le nizka.
Torej, vsak od teh je individualno prošnjo vrača
in tja in nazaj.
In to je, zakaj prej, čeprav čeprav smo se nekako pogovarjali
o tem nekoliko domišljisko kje si dal scenarij oznako,
absolutno naredi Razlika, če imate -
začela, da imajo veliko prometa in veliko
, da so zahtevane datoteke.
In vsak od tega predstavlja Verjetno slike, mediji datoteka,
Datoteka JavaScript, CSS datoteke ali podobno.
Torej, smo že do Nekatere 4 MB samo
pogled na današnje novice.
Dobro vprašanje.
Vse je v redu.
Torej, kaj so nekateri da čeprav upsides?
Dobro, vemo, kako narediti že s PHP spletne strani.
In mnogi od vas prišel do Razred vedo Django
in Python ali tirnice z Ruby.
Torej, zakaj potrebujemo še en jezik in infrastrukturo?
Kaj je node.js zlasti dobra, če veš?
[Pause]
Nekatere stvari?
Ne? Ja?
>> Vračanjem sporočil.
>> Torej, vračanjem sporočil.
Torej, to je res in to je res Za bolj tehničnega razloga
in da node.js in res JavaScript je še posebej
zelo primeren za asinhrona kodo,
če s katerim si ustvarite iluzija
početje mnogokratnik stvari naenkrat.
Torej, čeprav oni res dogaja serijsko,
dejansko je v večini primerov JavaScript obe strani odjemalca
in strežniški strani je single z navojem.
Ki bi, če ste ob 161 ali celo 61 pomeni, da -
tega programa vedo,
tolmač lahko dobesedno samo eno stvar naenkrat.
Vendar se to ni velik za nekaj takega kot spletni strežnik
, kjer boste lahko na desetine ali na stotine ali celo tisoče
uporabnikov, vsi poskušajo za dostop do vaše spletne strani
V istem trenutku.
In še, da predlagamo da jim ravnanje ena
Po drugi strani, ko Ostali posebno če nekaj
tistih zahtevo, kot smo videli, na CNN lahko zahteva služijo
do 300 datotek pred vami celo prišli do naslednjega uporabnika
, ki želi videti pravi novica.
Node.js je primernejša za okolja, kot je ta.
Ker tisto, kar se zgodi, je koli počasen proces teče
kot branje datotek iz diska ali poizvedovanje v zbirki podatkov, ali govorimo
kak drug strežniku mreže,
da tendenčno latenca, kajne?
Če ste si vzeli 61 ali 161 zlasti vse tovrstne
perifernih storitev ponavadi precej počasneje
kot da bi počel kaj v notranjosti Enako RAM in isti CPU
ki pravijo, v tem primeru Strežnik dejansko pelje.
Toda kaj je lepo o node.js je, da lahko -
in JavaScript bolj splošno je, da lahko narediš nekaj
in potem reči, "Hmm, to se dogaja
da bi mi vzeli nekaj milisekund ali celo nekaj sekund.
Dovolite mi, da nekako vilice, da off " vendar to ni res proces.
In potem, ko bo opravljeno počne da je počasen proces teče
kot oprijemalne vrstice iz baze podatkov ali branje datoteke. html
iz diska, bo nazaj k meni, ne
kot mi, da bi morali čakati na to.
Tako, da bo to bolj jasno.
To je moje sredstvo ki to bolje pozna.
Vse je v redu, tako da je to Pretresite Lopo na trgu.
To je neke vrste Skupno paradigma
za razlago asinhronost.
To je dejansko dobro primer, saj Shake Shack
in Okusno Burger, so izredno upočasni za to, kar počnejo.
Ampak bistvo je, da si res dober pri naročil
in ob svoj denar po ki ste čakali na hrano.
Torej, to je dejansko bolj dizajn kot alternativa.
Ker domnevam, hodiš v trgovina, kot je ta in imaš
na sprednji strani linije in ga postavi vaše naročilo in vam želimo
na burger, kot vem in znam povem, da traja najmanj pet
ali več minut dejansko dobili hamburger.
Torej bi bilo nekako slabega poslovnega modela
Če medtem ko čakate na vašem burger, Alice [domneva črkovanje]
Bob [domneva črkovanje] in Charlie [domneva črkovanje]
in vsi ostali čakanje v vrsti za vami
in ste dobesedno blokira linija čakala na svojo hrano.
Torej je očitno, na Shake Shack
in drugo hitro hrano mesta, ne počni tega,
počnejo kaj takega.
Ti dam brenčalo.
In nekako vam poslali na vaš način.
In vas pokličem nazaj bi to malo stvar vibrira
ali bliskavico, da bi dobili vašo pozornost.
Torej, to je dobesedno kaj?
Nekaj ​​podobnega node.js počne.
Če node.js ali JavaScript bolj običajno je v uporabi
in programer je dovolj pameten
uresničiti, "Veste kaj?
Karkoli moram narediti prav Tukaj lahko trajalo nekaj več
milisekund ali sekund.
Veš kaj?
Dovolite mi, da gredo naprej in ne call it sinhrono -
"Da je fant blokiranje vsi ostali v vrsti, "-
Naj gredo naprej in nekako umaknete
in jaz preprosto pokliče nazaj
ko se to dolgo vožnjo Operacija je končana. "
In pokliče nazaj seveda se namiguje v tem primeru
do funkcije povratni klic, Sklicevanje na vpenjalne glave kode
da bo dobil usmrčen če je vaš burger pripravljen,
podobno kot to stvar ima nekaj vrsta funkcionalnosti vgrajenih
da se začne vibracijski ali brenčanje, ko je čas za vas
da se imenuje nazaj sprednji strani linije.
Torej, kaj je to pomeni realno?
No, moramo naš način dela gor.
Torej, naj gredo naprej in to storiti najprej.
V strežnik-1.js, pustite me Prvo poenostavitev kodo
Tako bomo lahko otroške korake v smeri bolj prepričljiv problem.
To je popolnoma enaka Program, ki sem napisal prej.
Toda kaj se je spremenilo?
Tam je nekako rahlo skladenjske razlike
med tem in Različica 0 pred nekaj trenutki.
Kaj skoči ven na Vam bom, če se spomnite?
Ja Cynthia [domneva črkovanje]?
[Neslišno Opomba]
Ja. Torej, zdaj imamo linijo za funkcijo prevalili prijavite
Smo gotten znebila vrste
za nekoristno imenom Funkcija trener.
Neuporabni samo s tem, da pred celo kliče na enem mestu,
Res ne potrebujete izgubljati časa ji daje ime
in zaradi česar je težje preberete kodo zgoraj navzdol.
Torej, kaj je samo razglaša za inline je anonimna funkcija.
In delam dve drugi stvari.
Delam bolje Uporaba dot zapisa.
Tako kot v jQuery, veliko vozlišče Metode lahko priklenjeni skupaj.
Tako, da ko ste končali kliče nekaj, nimate
počakati na novo linijo in poklicati drugo metodo,
si lahko samo veriga ju povezuje.
In zato na ta način, ne moremo Res ta poostri.
Torej, to je dobesedno spletni strežnik v petih vrsticah
kode skupno razliko -
razliko, kar bi lahko normalno moraš storiti, da nastavite nekaj.
Če grem na strežniku 2. Zdaj, kaj je to.
V strežnik 2 - pravzaprav je pustil vrni se na ta strežnik 2.
Dajva zdaj odpirajo Async-0.js in reševanje tega problema pri roki.
Torej, najprej, pojdimo naprej in odprt
up Async-0.js v brskalniku.
Torej asinhron-0, spustite me nazaj v brskalniku.
Hit Reload.
In zdaj, to je vrsta sporočilo o napaki.
Dejansko sem videl 500 V inšpektorja Chrome.
Ampak me bolj natančno naj zahteva hello.txt.
OK. Torej, to se zdi, da deluje.
Torej asinhron-0.js ne zdi, da služijo up nekaj za poševnico.
To nima nobene podpore privzete datoteke.
Ampak, če sem izrecno zahteva hello.txt,
se zdi, da je treba podpirati.
Zakaj je tako?
No, kaj sem tukaj šli
in naredil je izvajala super preprost spletni strežnik
, ki dokazuje, kjer asinhronost so lahko koristni.
In da se izvaja takole.
Najprej sem s pomočjo HTTP modul spet,
ampak tudi FS ki verjetno pomeni?
Na splošno v CS, datotečni sistem.
OK datotečni sistem.
Zaradi tega so FORTH FS, datotečni sistem.
V redu, kaj se mi to dal?
Funkcionalnost, povezane z datoteke, kot so pridobivanje minilo,
odpiranje datotek, pisanje imeniki, branje imeniki
in vse to vrsto stvari.
Torej sedaj opazili, to kodo je enaka kot prej,
ustvariti strežnik, ki poteka anonimno funkcijo.
To je nekako arbitrarna.
To ni zelo varen spletni strežnik.
V bistvu, lahko dostopate najbolj vse datoteke na mojem trdem disku
ali na strežnik je težko voziti tako, da izvaja to kodo
ker sem le slepo ob predpostavki, da bom
zgrabi karkoli uporabnik zahteval v URL.
In bom je predpona s piko
tako da sem nekoliko varna
z besedami, karkoli datoteka jih lahko Zahteva ima vsaj začetek
V trenutnem imeniku.
Seveda obstaja nevarnost tukaj.
Ker če bi namesto vključujejo kaj?
Na njihovi poti, ki jih lahko nekako za delo okoli, da je preveč.
Pika, pika, kajne?
Torej, če uporabnik le postaviti piko, dot v URL, v teoriji,
, da bi lahko začeli že moja - in reči geslo datoteko.
Torej, se s tem ne misli Treba je zagotoviti,
to je mišljeno, da bo preprost.
Torej, tukaj imam spremenljivko, ki je združevanje piko
ki je prisoten imenik in zahteva URL
ki smo jih videli, preden se kot slash ali / hello.txt.
Torej sedaj, da postane malo bolj zanimivo.
Prvič, opazil dno.
Jaz sem poslušal na Enako port kot prej.
Torej resnično zanimiv Delo je notri tukaj.
Vsakič zahtevo pride po naravi
tega kodeksa, kaj počnem?
Kličem datoteko Metoda branja datoteke sistema,
poteka v sredino da želim prebrati.
In zdaj, to kaj je zanimivo tukaj,
to je z izvajanjem V asinhroni način.
Ne morete dobiti vrnitev vrednost iz branje datoteke.
V obvestilu Dejstvo je, da je no na levi strani izraz
na levi branje datoteke.
To ne vrne vrednosti.
Namesto tega poziva povratni klic delovati, ko je pripravljen
vam vrne odgovor.
Torej, še enkrat, da bo jasno, ker so v minulih dni,
v mnogih programiranje jeziku, če si hotel
prebrati spisa V točki PHP,
Datoteka podčrtaj dobili podčrtaj vsebine,
imate izraz v levo v vseh vrednosti po -
pred enačaj, to pomeni, da ste dodeljevanje
za to spremenljivko donosnost vrednost te funkcije.
To lahko storite v node.js, vendar pa imajo navadno
poklicati izrecno sinhrono različic funkcij všeč,
Mislim, da je prebral sinhronizacijo Datoteka ali sync brati datoteke.
Pozabil sem, kako so ga poimenovali.
In da bi dal vam vrne vrednost.
Ampak, če je ta datoteka na nekateri oddaljeni datotečni sistem
ali disk je samo naravno počasi, lahko traja 10 milisekund
ali 2 sekundi za te datoteke dejansko vrnil.
Medtem, nobena druga web Obiskovalci se servisirajo
vaš websit.
Ste blokiranje.
To je tisto, kar se imenuje blokiranje IO, vhodno / izhodne.
Torej, tukaj, to je veliko pametnejši.
Ker tisto, kar se dogaja node.js
da bodo ob razlagi je naslednji,
to se dogaja, da pokličete Metoda branja datoteke,
poskusite enega do spisa, ki je dobil Pot določena z vrednostjo P.
In potem, če in ko bo pripravljena vam vrne vsebino
datotečnega P, bo klic funkcija katerih podpis je
po dogovoru sledi.
Dve trditvi, prva ki je morda predmet Napaka,
Kapital E, to je objekt imenovano Napaka ali nična
če je ta napaka ni.
In drugi argument - sprejeti ugibanje - se bo kaj?
Imenuje se podatki očitno, vendar katere podatke je bolj konkretno?
Vsebina >>?
>> Vsebino hello.txt v tem primeru sem potegnil
v mojem brskalniku trenutek nazaj.
Torej, z drugimi besedami, da se glasi datoteko in mnogi node.js funkcije
kot na ne vrne vrednosti.
Pravijo naprimer in pass
za tiste callbacks, kaj bi so bile tradicionalno
vrne vrednost.
Glavo tega pristopa je
, da bi lahko rekli preberi datoteka T0.
Premoč Povratni klic ne zahteva en tick kasneje
tako rekoč T, je Morda se imenuje T1000,
tisoč klopi kasneje.
Vendar pa je, da Preostali del kode v tej datoteki,
če sploh bi takoj izvršiti, medtem ko node.js
in medtem ko datotečni sistem številke, kako brati
da datoteke in dobili nazaj k tebi.
Tako boste ustvarili to -
tako učinkovito iluzija
vzporednosti medtem najemnin počasnejši tekoči procesi ne
blokirajo pomembne stvari, del, ki servisiranje uporabnikov.
Torej, kako bomo to uredim?
To je zelo pogost node.js paradigma.
In tam je pot, samo da bi poenostavili to bomo videli pred seboj.
Najprej sem preveril, če Napaka ni nič.
Torej, če to ni napačna Nato je prišlo do napake.
Ne vem, kaj to je, Morda datoteka ne obstaja.
Nisem imel dovoljenja.
Ime poti je narobe.
Poljubno število stvari bi lahko šlo narobe.
Za zdaj bom samovoljno vrniti 500
ki je notranja napaka strežnika.
Nekaj ​​je šlo narobe.
Res ne skrbi ga diagnosticirati.
Torej, kaj je samo povedati, Uporabnik je zdrobljen.
In potem, bom storiti res.end,
in to je okrajšava zapis.
Spomnimo se, da je zadnji Tokrat sem naredil res.write
in potem sem res.end.
Če želite samo pošlje eno vrstico izhoda,
lahko samo narediš vse naenkrat z res.end z argumentom,
in da se dogaja, da pošljete ne glede na sporočilo o napaki
znotraj tega predmeta v brskalniku.
Bilo je precej iskrenja spomnim pred nekaj trenutki.
Nimam pojma, kaj je to mišljeno na prvi pogled.
Toda, ko sem zahteval datoteko, ki ne obstaja -
Ups, smo morali zagnati Ponovno strežnik.
Ko sem zahteval datoteko da ni obstajal, EISDIR,
tako nekaj o pri čemer je imenik,
če naredim nekaj naključno Niz tam,
očitno, da pomeni datoteka ne obstaja.
In to zato, ker moja koda je preprosto rekel, da napišete
vsem, kar Raw Sporočilo o napaki,
zato ni zelo prijazen do uporabnika ampak vsaj jaz tako ravnanje.
Drugega, če ne bi bilo napak, kaj počnem?
Isto kot prej spit Out OK 200, navaden -
text / plain tip um in nato izpljuni podatke.
In to je, zakaj dobivam Vsebina hello.txt ki pravkar
potrditi, če sem pogledal na hello.txt,
to je dobesedno samo Zdravo, svet.
In če sem to spremenilo Zdravo, svet, shranite datoteko,
zaženite strežnik, osvežite stran.
Zdaj pa sem dobil to različico.
Torej, sem res samo znova napisan spletnega strežnika
kot je obstajala za številne let, vendar z uporabo node.js.
Vendar pa lahko to storimo še bolj čist.
Naj se odprejo Async-1.js.
Zdaj, opazil sem dodal še en modul tokrat,
Očitno modul pot.
Zdaj, to je dobra priložnost za pogled
kaj dokumentacija izgleda.
Node.js je dokumentacija.
Kot so PHP Mislim, da je pravzaprav zelo dobra
in naravnost naprej.
Če grem na node.js in Google in iskanje node.js poti,
kar boste videli ponavadi je neposredna povezava na URL
da sem dal gor pred nekaj trenutki.
Torej / API je uradni kraj da gre za dokumentacijo.
In kaj boste videli na vrhu
od vozlišča uradni dokumentaciji je vse metode in
ali lastnosti zunanjost To še posebej modul,
ena, ki se imenuje pridruži.
In se pridružite je funkcija pomočnik da mi bo omogočilo
da se ne trudim z vse pluse.
In to je dodana bonus, kot boste videli
od pomola je tudi normalizira dobljene pot.
Torej, če uporabnik ali imate pike ali pike pike ali katere koli kombinacije
od teh vrst relativna poti, med temi upsides
v združeni metode je, da to bo čisto vse, da se
in vam Canonical Pot brez
teh lise ali pike piko.
Torej, to je dobra stvar Generalni direktorat za varnost vsaj
če ste preverjanje vrne vrednost, ki je nisem
v tem preprostem primeru.
Toda nisem ga želite uporabljati.
Torej, sem zdaj ustvariti tirnicah malo bolj načrtno
z path.join namesto Raw spoj.
Torej, to je malo čistejši kot prej.
In zdaj sem opazil, da malo bolj inteligenten in ne
kot le slepo poskusite prebrati datoteko,
Bom dejansko pokličite fs.stat.
Torej, če ste seznanjeni
z nizko stopnjo C funkcije in C, tudi PHP.
Veliko knjižnic imajo Ta funkcija stat vrne
v bistvu statistika o datoteki, velikost datoteke,
dovolilnice, ime in take stvari,
in tudi implicitno, če datoteka obstaja ali ne,
in če je datoteka ali imenik
ali simbolna povezava ali kaj drugega.
Torej sedaj opazil, da sem kliče fs.stat.
In potem je očitno po V dokumentaciji,
Moram se vrniti v Error Object
ali Null sledi s stats predmeta.
Ampak poglejmo to, node.js.fs.
Tukaj je datoteka Dokumentacija sistema.
Dovolite mi, da si za statistiko.
Tam je veliko več funkcij tukaj.
Ups, da stat sinhronizacija, fs.stat.
Torej, tukaj je asinhrona statistika (2).
To pomeni, če ste zapomni si od glavnih strani,
2. poglavje glavne strani
to pomeni, da je to dobesedno samo izvajanje vozlišče
nizke ravni Funkcija sistema stat.
Torej, povratni klic dobi dva Argumenti, napake in stat
kjer je stat fs.stats nasprotuje.
Pa poglejmo, kaj ta predmet naj bi izgledal.
Oglejmo kliknete hiperpovezavo in vidim, da.
Statistika objekt vsebuje Očitno nekateri metoda pomočnik,
datoteka je imenik, je kup drugih stvari.
To je "se" file, da mi je mar o v tem primeru.
Torej, tukaj sem šel.
Če je prišlo do napake, potem Naj samo rešile ta čas
in prevzeti.
Če je napaka, je bilo Najbrž 404 datoteke ni mogoče najti.
To bi bilo nekaj drugega
ampak sem pa malo leni tukaj samo zato, da se osredotoči
na bolj zanimivih podrobnosti.
Ampak uporabnikov namene, se datoteka ni najdena,
če je bila kakršna koli napaka navedbo datoteko.
V nasprotnem primeru naj preveri, če Datoteka je v resnici dejanska slika.
Torej, če to ni Datoteka, da obstaja.
Nekaj ​​je tam, ampak je verjetno imenik
ali morda simbolna povezava
ali kaj drugega, da je funky na datotečnem sistemu.
Kakorkoli, uporabnik ne bi smel videti.
Torej, zdaj, bom samo pljuvati
od konvencionalno nepooblaščeno 403.
Ampak spet samo konvencija,
Imam lahko uporabili nekaj drugega v teoriji.
In potem končno, dovolite mi poskusite prebrati datoteko.
Torej, dovolite mi, da se pomaknete navzdol.
In zdaj opazili, to je, če kodo lahko dobite malo grdo,
opazili, da kličem fs.readFile kratki
v isti poti, enaka povratni klic kot zadnjič,
tako da prejšnja različica.
In potem, če bi se mi zdi -
če jaz ne najdem, Sem izpljunila 500.
In če mi ga najti, kaj linije bomo videli tukaj?
Bomo videli FS pisanje glave 200 verjetno
in res.end pošiljanje dejanski podatki.
Ampak to opazila.
In to ni demonstrativen v najslabšem primeru.
Ampak imam to stat klic Tukaj, kot sem imel nekaj stvari.
Potem imam še en asinhroni klic tukaj,
tako bolj zamik.
Torej, nekako ekstrapolirati če bi lahko od tukaj.
Kakšen problem ponavadi nastane z jezik, kot so JavaScript
v tem okolju, kjer nimate vrednosti vračanja
ampak imate ti callbacks.
Seveda pa je to le stilistično stvar dejstvo,
da Držim zamikov.
Ampak vzemi to logičen naslednji korak.
Recimo, da je bilo eno ali dve ali tri druge funkcije
da sem potreboval za izvedbo, ki so po naravi asinhrono,
in zato si nekako voditi Feed za ravnanje z njimi,
za ravnanje z njimi, za ravnanje z njimi.
Dobiš neke vrste povratni klic pekel, kot ljudje rečejo
, kjer se začne vaša koda da bi dobili zelo širok
in odkrito res težko brati.
Kot je, ne morem nekako komaj povem, da je to neke vrste toka
da je to neke
slogovno kotno stvar, ki se dogaja tukaj.
Torej, to ni idealna, saj To lahko zelo hitro postane
nepriročno, čeprav sta dva asinhrona poziva ne
tak big deal.
Torej, lahko bi se temu izognili, kajne?
Morda ste zagledali, da Jaz misclicked pred nekaj trenutki.
V dokumentaciji, saj veš, izgleda, da je statSync.
In statSync ne bo povratni klic kot argument.
To traja le pot, ker to očitno počne kaj?
Vrne primerek od fs.stats.
Torej, to je lahko vaša prvi instinkt, kajne?
Še posebej, če povratni klic funkcije
in je asinhronost Malo novo za vas, odkrito povedano,
Najlažji pristop je verjetno samo bi se izognili problem vse
skupaj, pojdite nazaj na razvrščanje od CS101 slog programiranja
kje ste klic funkcije ali metoda vrne vrednost,
klic funkcije, vrne vrednost
funkcija vrne vrednost.
In sem lahko zato uporabite fs.statSync
ki je dobesedno enako ampak to je sinhrono različica
kar pomeni, da se vrne vrednost.
To ne gre vrednost na povratni klic.
Ampak zakaj bi to verjetno optimalna rešitev za to težavo treba zateči
na funkcije sinhronega?
Ja?
[Neslišno Opomba]
Točno, to traja dolgo časa.
Ti si samo upočasnjuje vse navzdol.
Ker podobno kot Shake Shack ali Okusno Burger, če so se znebili
teh brenčali in vas postavil, kupec stati na sprednji
vrstice dokler je hrana pripravljena Pred celo ob vrstni red
osebe zadaj očitno si
prek opcije upočasni.
Ljudje začnejo odhodu, si nekako pripravi pakete.
Lahko naredite poljubno število analogij tukaj.
Ampak na kratko, to je Verjetno ni dobra stvar
za poslovne ali za strežnik.
Torej asinhrona koda običajno dobro vsaj
v tem primeru pa je gotovo začne povzroči nekaj angst.
In v bistvu sem upal povedati, kdaj Prvi pisanjem te stvari,
da bo trajalo malo malo navaditi.
Torej, začnimo opremiti si z nekaterimi knjižnicami
in tehnike, da bi to malo lažje.
Torej, eden izmed najpogostejših Knjižnice so priljubljena knjižnice
Te dni, to ena imenovana async.js.
In kot veliko node.js knjižnice ali module,
vse to so open source.
Skoraj vsi so živi in ​​se pesto sklenjenih poslov, ki je nekako
o postal de facto prostor za shranjevanje teh stvari.
In potem je tukaj vsa infrastruktura
Za namestitev te stvari imenovano NPM, Node Package Manager
ki bi, če ste seznanjeni z EvanTube je nekako
iz podobnega app ali app dobili.
Če ste seznanjeni z Red Hat in Fedora
kot v aparatu to je kot yum.
Ampak to je vozlišče - to je Vodja paket pravkar
za to določenem okolju.
Torej, lahko prenesete in namestite Stvari, kot so knjižnice Async
in tudi še eno imenovano poudarjajo knjižnico ali modul.
Ampak ti kolikor fs, HTTP, pot,
tistih, ki so vsi prišli vgrajene v vozlišču.
Torej, če gremo na API docs, boste dejansko videli, da je zgrajena
v vozlišču dobiš zastonj Cel kup modulov.
Ampak veliko lepih ljudi na internet so se na desetine
če ne stotine druge knjižnice
narediti stvari bolje ali drugače.
Torej, dajmo si oglejte kako to deluje knjižnica.
Torej, večina tega kodeksa je enaka za trenutek.
Imam pot počutje ustvarili do vrha.
In zdaj kličem async.series.
Torej knjižnica asinhron, da je samo knjižnico, ki vam omogoča
prenesti ali dvig običajno v funkcije, da se imenujejo enega
po drugi strani le na vrsto prepreči, da bi težavo lahko stisne,
in res samo duševno angst, da bo vedno pojavijo
vsaj takrat, ko ste prvič potopite se v to sami
s programiranjem asinhrono.
Kot v prahi, če ste vzeli 161 in ste ukvarjal s ključavnicami
in dvig pogoje in vse tega, asinhrono kodo
in okolje, kot so node.js je dejansko veliko,
veliko preprostejše verjetno
kot dejansko pisanje multithreaded kode.
Kadarkoli imate multithreaded kode,
imate pogoje dvigniti.
Moraš skrbeti dve teme, ki vsebujejo
za iste vire disk ali pomnilnik.
Lepota JavaScript
V node.js je tam dobesedno samo ena nit,
kar pomeni, da brskalnik
ali strežnik lahko le eno stvar naenkrat.
To je samo odvisno od vas, programer
ohraniti duševno model kako si nekako čakalne vrste stvari
in ugotoviti, kako naročiti kodo.
Ampak nikoli ne bo treba skrbeti o dvig pogojev
v precej enak način pri vsaj z Raw kodo, kot je ta.
Torej, to je malo težko tukaj grack.
Ampak - Naj odprejo docs za nekaj trenutkov.
Async.js knjižnica, ki Podobno je zelo googleable,
živi v GitHub saksiju kot veliko od njih.
Ne mislim, da je nedorečena, saj ni.
Dovolite mi, da se pomaknete navzdol k mi preberi tukaj.
Torej, knjižnica asinhron ponuja cel kup
metod v njem.
Na primer, obstaja Postopek se imenuje vsak
ki bi, če sem to samo kliknite da vidim svoje docs za trenutek,
To je funkcija ali metoda , ki vam omogoča, da narediš nekaj
kot štiri posamezne vendar vzporedno.
Oni vse se bo zgodilo potencialno vzporedno.
In vsaka metoda je edina dogaja, da se vrnete na vas, ko vse
od ponovitev, ki so popolni.
Mogoče se zgodi eden za drugim.
V idealnem primeru se zgodi v bistvu vzporedno.
Vendar postopek ne vas pokličem nazaj.
To ne buzz vaš Zumer, dokler vsi
elementov, ki ste jih poudarili so nad končana.
Torej, to je samo lep način
izognemo z uporabo preprost štiri zanke
ampak dejansko počne Nekaj ​​asinhrono.
Ampak zdaj bolj neposredno povezana s tem primerom,
Opazili pa je to Metoda serije.
In povej mi samo potegnite navzgor preprost kanonično primer.
Torej Async knjižnice, serija Postopek traja leta, kot je implicitno
ki jih zadevajo oglati oklepaji v matriki.
Kaj so podatki Vrste elementov
v tem polju, ki temelji na enostaven primer?
To je nabor funkcij.
Torej v C, bi poklical njihovo delovanje kazalcev.
V JavaScript, obstaja več pravilno sklicuje na funkcijah
ali anonimni funkcije.
In to samo pomeni, nizi
Seveda se naročiti od nič gor.
Tako so imeli v svojih nogah vrstni red, ki je dobro
za serijo, ker serija seveda pomeni nekaj narediti
Da ne vzporedno.
Torej, to samo pomeni, da te Funkcija bo dobil izvršena,
potem je to ena, potem je to ena, ta, potem je to ena,
Vendar obstajajo številni
dokler končno opcija Povratni klic se imenuje.
Torej, opazil paradigmo tukaj.
In čeprav je to je knjižnica en mož je,
to je predstavnik zelo pogosti JavaScript paradigma
za ponovno uporabo naprimer.
Torej, opazil, kaj počnete tukaj.
V prvem funkcije, ki se sprejet po tej matriki,
ste določili anonimni Funkcija samo s funkcijo.
Ampak obvestilo, da je očitno v skladu s to dokumentacijo,
da se anonimna funkcija bi morala sprejeti argumenta povratni klic.
Da se bo kazalec ali sklic na funkcijo
da bi morali poklicati, ko vaš koda je pripravljen vrniti vrednost.
Torej še enkrat, za razliko od pravkar običajno postopkovno programiranje
kje ste navajeni nemudoma vrnejo vrednosti
da ena razlika z z uporabo knjižnice tako
V asinhrono programiranje več na splošno, je, ko ste pripravljeni
vrne vrednost iz podatkovna baza, iz spisa,
iz aritmetično izraz, to je odvisno od vas
poklicati funkcijo povratni klic.
In lepo stvar O tej knjižnici
Če beremo docs natančneje je, da
če in samo če vsi Območje callbacks imenuje
brez predmeta napak, bo vsa stvar uspelo?
Torej, z drugimi besedami, če obstajajo 2,
če je 10 anonimen Funkcije
v tem polju zato v tej seriji,
samo, če vse od njih uspe,
bo končno opcija povratnega klica se šteje za uspešno?
Če kdo od njih ne, vsako funkcijo
potem ne bo celo usmrtili.
Torej, to je lep način za sortiranje dne ob Daisy chain
da prekine predčasno če gre kaj narobe.
Torej, da bi se to v kontekstu, tukaj je, kako bomo lahko ponovno izvajati
da je predhodni program.
Dobim pot kot prej, tako je to preprosto del.
Kopiram prilepite to kodo skelet
Iz dokumentacije there async.series odprti oklepaj,
odpreti kvadratni nosilec.
In zdaj sem opazil še eno Funkcija tega začetku
sekunde, bomo videli kam gremo iz tega.
In sedaj opazili, da je malo zapleteno na prvi
ampak se osredotočajo le na je po vrsticah.
Fs.stat pomeni dobiti statistiko ali kaj ni v tej poti.
To imenujemo povratni klic, ko bo pripravljen.
Ta koda je enaka kot prej.
Če je napaka, obstaja ena razlika zdaj.
Še enkrat, zelo pogosti paradigma V node.js programiranja
če gre kaj narobe in callback mora vedeti
da je po dogovoru, prvi Argument za povratni klic, se bo
da ni, če je vse v redu ali reference na objekt napake,
kapital E. To je kot Error razred, ki obstajajo po svetu
vendar pa več o tem kdaj drugič.
Torej s tem, če obstaja napaka, kaj je posledice?
No temelji na tisto, kar sem je dejal serije počne,
je, če gre kaj narobe narobe, mi nekako želim
za prekinitev celo vrsto anonimnih funkcija klice.
Torej je dovolj za mene, da pravkar vrnil povratni klic opravljen
v objekta napake.
Ker če stat dal me nazaj napaka,
Lahko bi ustvarili novo Napaka predmet moje,
ampak jaz ne briga, da,
Rad bi posredovali vse, napaka je, da pravzaprav zgodilo
da bom lahko prenese te povratni klic.
In samo, da bo jasno, vrnitev ni nujno potrebno.
Jaz v bistvu želim, da to storijo ampak želel sem zdaj ne "vrnitev;
/ /, Tako da ni več code here izvaja ".
Torej spet ena skupna Konvencija v JavaScript,
čeprav niste vrnitvijo vrednosti po sebi
želite prenesti vrednost s funkcijo povratni klic
potem pa hočeš prepreči izvajanje
funkcije ste v, trivialna način
za to je, samo klic vrne tukaj.
Vendar pa ni nič narobe,
smo samo delaš povratni povratni klic napaki, kljub temu, da se dogaja
, da se vrnete v nedefinirano vrednost.
V redu, to ne najverjetneje vrne vrednost.
Mene zanima, je vkrcanje nadaljnje izvajanje.
Torej, moje zlivanje teh dve vrstici je le stilist
na konvenciji samo, da imajo število linije
kode sem napisal 2-1.
Torej, kaj še?
Če tam ni napaka -
pravzaprav mora biti jasno Jaz bi tudi izognili
da s tem, če drugega.
Toda enkrat, drugo skupna paradigma je prijava
za svoje napake, do vrha in nato samo vrnitev namesto naprej
zamakniti kodo z elses in elses in elses.
Torej, če to ni Datoteka, zdaj veste,
Želim, da to uredim Malo posebej.
Torej, tukaj kot v Java ali C + + ali nekaj drugih jezikov,
Tukaj je, kako lahko sprožajo ugovarja, da tip kratki napaki
v privzeto sporočilo ki ni datoteka
in to je samo nekoliko arbitrarna.
Ampak jaz sem signalizacijo napaka moja.
In kaj počne ta zadnja vrstica verjetno pomenilo?
Vse je dobro.
Če se boste peljali na ničlo za parameter napaka, da pomeni samo
po dogovoru je tudi vse.
Torej, to pomeni, da tisto, kar se bo zgodilo logično?
Če null minilo za povratni klic
to pomeni, da je ta anonimna Funkcija je uspelo
tako rekoč.
Torej, kaj naj bi serija Metoda je pred in zdaj ne temeljijo
moj besedni opredelitvi prejšnje?
[Neslišno Opomba]
Premaknete na naslednjo, kajne?
Če bi se vrnil neničelni vrednost, bi samo prekinitev
in ne več anonimno Funkcija se bo poklical.
Vendar, ker je ni, potem to bo pokličejo naslednji.
Torej, logika je tu precej enako kot prej
in bomo videli, kako očistiti To se še dodatno v trenutku.
Zavedam se, da je to neke vrste veliko
absorbirati vse verbalno in vizualno.
Toda zdaj opazili, drugi anonimna funkcija, da želim
izvršiti v seriji je da bi poskušali prebrati datoteke.
To imenujemo povratni klic Ko ste pripravljeni.
Če je napaka, samo ga signala s pomočjo odzivni
tako, da preostanek ta stvar prekine.
Else vrne null.
Ampak zakaj sem mimo v dveh argumentov?
No, tokrat, če sem prebral datoteko in dobili nazaj
kot spremenljivko podatkov
Rad bi samo pomenilo vse je dobro z vrnitvijo null
za prvi argument.
Želim, da se vrnete dejanski podatkov kot drugega argumenta.
Ker če sem brati naprej v dokumentaciji,
Opazili ta zadnji kos kode oglati oklepaj pomeni, da je
Konec serije.
Bilo je le dve anonimni Funkcije v tej seriji.
Če je prišlo do napake, potem pa se Vem, da eden od členov
v tej verigi, tako rekoč ni.
Torej, z drugimi besedami, ta napaka se bo objekt Napaka
da je nična, če katera koli od teh fantov ni uspelo.
In če je temu tako, sem samo bo bail out in bom
reči 400, ki pomeni zahtevo ne uspe,
To je zelo generično sporočilo o napaki.
In potem ti bom izpisal sporočilo o napaki.
Torej, jaz ne moti, da super anal tokrat,
Ne bom razlikovati med 500 in 404 in 403,
Jaz sem nekako slepo val roko
in reči, kaj je šlo narobe.
Ampak, če nič naredil narobe,
Jaz bom to poslati res.end posredovanje teh podatkov.
Zdaj pa to izgleda malce skrivnosten.
Ampak še enkrat, če sem prebral dokumentacijo,
Drugi argument ta zadnji, končni povratni klic,
Fant, ki se izvajajo samo ko je serija storiti
izvršitve ali del tam o, to se bo matrika
od celotnega drugega trditve
, ki so bili sprejeti za povratni klic.
Zdaj pa se izkaže, da povezati le te serije
ki dejansko vrnitev na sekundo Argument je to ena tukaj.
Torej bom nekako na preskok vere preprosto uporabo domnevam
za trenutek, da nazadnje je metoda
ki vam daje zadnji Elementi matrike.
Ker ta matrika da se je mimo
da me ima dve indicies, nič in ena.
To je samo nič nima vrednosti ker je ta fant vrne -
ne prenese na sekundo argument, ampak ta fant počne.
Torej rezultati nosilec nič ni nič,
Rezultati nosilec ena vsebuje kaj,
če ste bili po skupaj do te točke?
Datoteka, hello, svet vsebina domnevno
tako, da je, kako sem dejansko ga natisnete.
In pustite, da končam ena podrobnost tukaj.
Če naredim to vrsto old šola, če želim, da bi dobili
V zadnjih elementov, če bi lahko narediti Rezultati [results.length-1]
to je nekako old school način
dostopanja do zadnje elemente in - ali nič indeks matrike.
Ampak kot na strani, odpoklic da sem imel to knjižnico
tu podčrtaj, ki jih Konvencija je pravkar klical
dobesedno podčrtaj znak, ki ni posebno,
to samo izgleda kul kot znak za dolar pa za jQuery.
To je le pomočnik Metoda poudarjajo piko zadnji
da ne točno ista stvar.
In če ste nikoli uporabljena Pred poudarjajo JS tako
za odjemalca kodiranje
in strežniški strani je nadvse uporabna knjižnica
da se čim več ljudi, so opisane to všeč jQuery vsebuje vse
od metod, ljudje želeli prišel z JavaScript sama.
OK.
>> Torej, kot lepa k meni in Gledal sem v seriji,
imate kot povratni klic kot argument?
>> Da.
>> Tako kot ko dejansko kot spodbuda, ki jo v,
in kot tisto, kar počne pomeni, če imate le
kot povratni klic, nato pa všeč -
[Neslišno Opomba]
>> OK, dobro vprašanje.
Torej, mi potegnite navzgor asinhron Glavna stran tukaj
ali dokumentacijo o GetHub.
Torej je to kanonično struktura.
Če ste klic z uporabo tega posebna metoda serije,
tam je dve veliki deli z njo.
Ena je niz anonimni funkcije
dve je končno povratni klic Funkcija, ki je dejansko
izvaja na zelo Konec serije.
Zdaj, če bomo povečavo bliže na prvi
teh velikih stvari, Array anonimnih funkcij
z zahtevo po tem Dokumentacija tip je ima
biti anonimen Funkcija, ki traja
v en argument se imenuje povratni klic ali foo ali pa bar, da ni pomembno
vendar mu je to kliče povratni klic.
In to je neke vrste vaš Zumer da vas Shake Shack roke.
To je sredstvo, s katerim lahko vrne vrednost
za stranko, ker vam ne more samo ne dobesedno vrnil.
Moraš to storiti Tako te povratni klic.
Ker če znotraj tega Funkcija je nekaj počasen tek
Koda kot podatkovni bazi poizvedbe, preberite datoteke iz datotečnega sistema,
ne želite, da se počaka in blokirajo vse ostale,
želite poklicati povratni klic.
Torej, to je dobesedno ime argumenta.
Ampak kot v C, ki jih imajo funkcijo kazalca.
V Java imate Metode referenčnega sistema
in isto tukaj v JavaScript.
To je spremenljiv, vendar njen tip je funkcija.
Torej zgolj s pisanjem svoje ime ali povratni klic ali foo
ali bar, nato pa odprt oklepaj in blizu oklepaj,
ste izvršitve, da na to funkcijo.
In poteka ničelno ki pomeni null napaka in ena
kar pomeni, da je to Podatki, ki jih želim prenesti noter
In potem kos mora biti jasno, To je še en povratni klic.
In ni poklical povratni klic,
to samo konceptualno je Funkcija metoda povratni klic
ker se imenuje po definiciji
od tega avtorja knjižnice, ko Celotna serija je končana
ali podskupino teh, če Napaka se je zgodilo prej.
Torej, ime callback funkcijo, kliče funkcijo povratni klic,
ime funkcije povratni klic, kliče funkcijo povratni klic,
drugačna povratni klic deluje vse skupaj.
>> Zdaj imamo podobno opredeliti povratni klic?
>> Ne, ker ta tip bo prešla v vašem niz
od anonimnih funkcije,
kazalec na oznako želi izvesti.
Točno tako, vse v redu.
Torej, prosim, pravijo, da koda postane malo lažje.
Torej, lahko.
In če ste kot jaz, da udobje v vsaj vedel,
to traja nekaj časa, da navaditi na to.
Vendar pa lahko očistite to gor malo,
ne mečejo preveč na za vas ampak tu je še ena različica
in njegove druge metode
v istem knjižnici imenuje slap.
Glavo, ki je za razliko od serije kjer vsaka
tistih anonimen naloge izvajajo predvsem
neodvisno vsaka od drugih.
Slap, kot je ime kažejo omogoča najvišjem Funkcije
da nekako prenesti v vrednotah na spodnjem funkcije
Nekako kot kaskado vode.
Torej glavo tega je, da sem lahko nekako
za to uporabimo za mojo korist.
V async.waterfall, opazili naslednje.
Jaz lahko samo pokličem fs.stat poteka v sredino
da želim, da bi dobili statistika.
In potem se spomnim, preden sem imel anonimno funkcijo
da je imel dva argumenta storil napake,
EZULTATI in potem sem poklical Povratni klic ročno?
Z drugimi besedami, je samo, da je Jasno, opozarjajo, da prejšnja
v Async 2, sem storil vse, to grdo delo.
Poklical sem fs.stat opravil v P,
razglašena za moje anonimen funkcija.
Nato sem preveril, če je napaka ni nič, potem sem to storil,
sicer sem, da, celo Lepota po konvencij
kot v node.js je, da callback Funkcije na splošno so namenjeni
da sprejmejo vsaj en argument, predmet Napaka sledila ničlo
ali več uporabne vrednosti.
Tako obvestilo paradigmo tukaj,
to callback funkcijo sem razglasitvi sledi točno
paradigma, da je ta tip asinhron knjižnica počne.
Kar pomeni, da je to, zakaj sem Jaz izvedbenih svoj povratni klic
metoda, ko je avtor tega Knjižnica je dobesedno mi predaja
na pladnju tako rekoč callback funkcijo lahko uporabim?
Torej, lahko sem samo prenese v reference on mi je dal
tako da takoj, moji več vrstic
kode postala ena vrstica kode.
Zdaj, kam gremo s tem?
Naslednja funkcija, ki Rad bi izvršitev,
Naslednji anonimni Funkcija v tem polju
funkcij pa naslednje.
Obvestilo najprej stat je Prvi argument.
Torej nekaj, kar ima že spremenili.
Zdaj je ta tip, ki napisal knjižnico -
in sem rekel fant ker je fant.
Ta fant, ki je napisal to knjižnico je dokumentacija jamstva
da če je ta funkcija tukaj me prehaja nazaj predmet napaki
ali null sledi koma ločen seznam drugih vrednot,
on bo poskrbel, da so tisti, ostale vrednosti handed
na ta anonimno funkcijo V vrstnem redu od leve proti desni.
In kaj je bilo prav sam callback funkcijo preprosto
postane zadnji tak argument.
Zdaj pa ne vem, kdo sem osredotoča na samo ti veš.
Toda zdaj, kaj je odnese tukaj?
Torej, vemo iz dokumentacija
ali pred nekaj primerov
da fs.stat na koncu pričakuje, povratni klic z dvema argumentov,
objekt Napaka, ki je Napaka predmet ali null sledi
s sklicevanjem na stats nasprotuje.
Torej, če mislim, da je Error Object koma stats nasprotuje,
da se prilega v paradigmi knjižnice te osebe.
Torej, lahko sem samo povedati, ker Nisem z drugo trditvijo
to je to - to se dogaja se mimo fs.stat
za povratni klic, je napačno, stats po definiciji te knjižnice,
Ne morem dati drugega Ime argument je tukaj
ali karkoli ga lahko preimenujete
če želim sledila , ki ga povratni klic tukaj.
Torej, ne morem mimo enega vrednost od tu do tu.
Zdaj vse te kode, čeprav sicer nekoliko skrivnosten je
vsaj kopiranje pasta za večina del od prej.
Razlika je le obvestilo Tukaj sem razglasitvi napako
nasprotuje in sedaj želim da bi dobili malo Ljubitelj.
Pravzaprav hočem vedeti, kaj Napaka je bila, da bom
Podvrnuti znotraj tega objekta a premoženje samovoljno imenuje kodo
tako da vem, da To ni datoteka
da bi morala biti nedovoljena, to je HTTP 403.
Naj spomnim, da je pred Mimo objekta napake
za povratni klic.
In potem končno poskusite prebrati datoteke, tako da v tem primeru,
slap, sem zdrobljen koda iz dveh velikih korakov
v tri manjše korake.
Opazili lepote tukaj,
Lahko pokličete fs.readFile poteka v sredino.
In potem je najtežji del duševno, se sem prenese
V povratni klic njegovega bistva.
Stvar, ki me bo predaja, sem dogaja, da preide na fs.readFile.
Ker smo vsi drži istih konvencij,
Prvi argument za povratni klic, se predmet Napaka null sledi
s komo ali ločena Seznam uporabnih stvari.
Torej, kaj to pomeni zdaj, in če sem preberite dokumentacijo bom vedel
to, zelo zadnji povratni klic, ta tip tukaj zunaj
v oklepaju se dogaja da bi se prevalil na napake predmeta
ali null, ki naj preveri kot vedno s to kodo tukaj.
In potem po definiciji te metode
v dokumentaciji možakarja, zadnja vrednost vrnjene
od zadnjega metodi v mojem anonimni paleto -
moja paleto anonimnih funkcij.
Torej, kaj berejo datoteke vrnitev
in sem s pomočjo vrnitev ohlapno zdaj.
Mislim, kaj berejo Datoteka podaja kot argumente
na povratne metode njeno roko?
Dve trditvi, prva je predmet Napaka ali null,
to je skoraj vedno bo odgovor.
In druga stvar, ki se dogaja da bo kaj za branje datoteke?
Vsebina spisa, podatki, kot smo ga poimenovali prej.
Torej, ga preprosto razglasitvi napačno, povzroči,
in preverite za napake te je nekako dolgočasno zdaj.
Drugega, jaz res.end poteka na ta rezultat.
To bo nedvomno ne sinhronizirajo v popolnoma
dokler ne boste dejansko to napisali sami.
Ampak za zdaj, da Gostujoča vsaj dejstvo
da je očitno ta Skupno vzorec, pri čemer, če želimo
avtorji knjižnic vse vrste palico
s to konvencijo metod povratnega klica.
In prvi argument predmet ali null napaki.
In drugi in tretji
in četrti predmeti so stvari skrbimo in smo nekako
za upoštevanje pravil in dokumentacijo.
Začeli smo s kodo, ki Resnično je zelo grdo.
In čeprav zadnje Primer je odkrito nekako težko
zaviti vaš um okoli, to je vsaj vizualno,
Izgleda, da je veliko strožji.
In ko boste dobili udobno s tem, da je tako veliko lažje
in je tako veliko manj nagnjeni k bugs od tistega prejšnjega primera.
Torej, naj dokaže, ena zadnja stvar tukaj.
To je različica tri.
In - No, pustimo sam tole.
Naj grem v nekaj druge zadnjih stvari, kot so Dražljivke.
Vse je v redu, tako da v strežniku 2.
OK. Prvič, na vsa vprašanja, Vem, da je veliko
vendar si je želel več Navodila, tako?
Nisi rekel dober Navodila za nujno.
Ja?
[Neslišno Opomba]
Pravilno, ste v bistvu prizanesljiva do operacijskega sistema
da ugotovimo, kako manipulirati Vse te kroglic naenkrat,
branje iz datoteke, branje iz baze podatkov.
In to je ta strežnik brskalniku sam to je en sam navojem.
In v bistvu in v resnici,
tam je ena slika Nisem bruhala,
in to ni nujno vse to prosveti
morda pa bomo dal ti miselni model.
JavaScript sama in vozlišče
zlasti je to ti dogodek zanka.
, S katerim si lahko zamislite od node.js, program
je dobesedno kot neskončna zanka.
To je samo divje zanka, ki čaka in čaka in čaka,
išče nalog za dokončanje.
In naloga lahko najdete prinese nekaj iz baze podatkov
ali tukaj je vrednost od baze podatkov ali pojdi to sliko
iz diska ali tukaj zahteva od uporabnika.
Kakršnih koli dogodka, tako kot Dogodek brskalnikov pogon,
tako, kot je strežnik stranski dogodku.
In vsaka od teh stvari predstavljajo dogodke.
Torej nekdo v node.js, samo napisal neskončno zanko,
big wild zanka, ki čaka za stvari, da se zgodi.
In stvari se zgodi, da konča v vrsti, kajne?
Seveda, podatkovna baza Morda vrne vrednost.
In datotečni sistem, operacijski Sistem lahko vrne vrednost
na približno isti čas vendar pa je verjetno, da bo
da bi nekateri naročanje na njih.
In node.js bo imajo v bistvu čakalno vrsto
kot velik matriki ali Vektor, nekateri podatki struktura
da shranjuje vse od teh stvari.
Ker lahko dobesedno samo ročaj eden izmed njih naenkrat.
Torej, ko je razvijalec,
pisanje asinhrono JavaScript kodo, ki uporablja asinhroni
Funkcija, ki ste ga omogoča ta tako imenovani dogodek zanka iti
na naslednjo klopi, kajne?
Torej, dokler boste takoj vrniti kot vse
teh asinhronskih metod všeč branje datoteke in stat,
se takoj vrne ker povratni klic sčasoma
vrne.
Takoj, ko se vrnete,
to pomeni, da nekdo drug lahko dobijo izstrelil off staleža tukaj
ali da lahko dobijo izstrelil off pred vrsti tukaj.
In tako, da je v Dejstvo, serijsko
vsega, kar se dogaja,
čeprav vse te stvari se lahko dogaja vzporedno
na večnitne sistemu.
Ampak samo sebe in node.js Strežnik tekla
kot ena nit.
In navzdol strani, da je t vam ni nujno, max
iz vašega računalnika sposobnost, kot je zlasti
če imate 16 jedro ali še 2 jedro računalnik
in ste pravkar teče en primer vozlišče.
Ampak, če boste spet sem sprejeti nekaj podobnega 161,
boste izognili veliko nočno moro glavobolov, ko gre
dirko pogoje in ključavnice in semafor
in pisanje resnično multithreaded kode,
tako upsides in slabosti.
OK. Torej, nazaj na kodo tukaj, Naj predlagam, da začnemo
poenostaviti malo stvari.
Videli smo strežnik po eno malo Pred ki je izgledal kot ta.
Torej, to je verjetno zelo preprosta.
Toda tako kot v svetu PHP, obstajajo okviri
kot Laravel in tam stvari, kot Rails in Django,
ista stvar v node.js svetu.
In bomo porabili več Čas za to je v sredo
in v naslednjem projektu.
Ampak, če sem šel v Strežnik 2 imenik,
opazili nekaj paradigme tukaj.
Torej, to je - tja da je enakovredna Primer
vendar je s pomočjo Okvir imenuje express.js,
, ki je brezplačen open source programske opreme, kot Rails in Django,
kot Laravel, da je samo v končni fazi bo
da bo cenjeni danes Ker smo bili pisno
taki preprosti primeri.
Vendar nam zaupajo.
To bo zelo hitro postane tvoj prijatelj
saj bo rešil ste veliko TDS kode.
In skupna paradigma za express.js aplikacija
Da bi imeli app.js ali server.js datoteka, ki vsebuje logiko
vašega programa ali vsaj vstopna točka.
Lahko imate več datotek.
Vozlišče modul podimenik ki ima knjižnice
ki ste jih prenesli kot Async
in se izražajo v drugih.
In potem package.json, package.json izgleda takole,
in jo lahko ustvarite ročno ali orodja, jo ustvarite za vas
in to dobesedno json datoteka
in zanimiv del Je odvisnosti tukaj.
Tako kot v Laravel, si imel, da prodajalec imenik
in boste morali skrbeti o embalaži in delaš -
dejansko posodabljanje z Artisan ali podobne ukaze,
ki ste knjižnice jih namestili,
podobno z package.json tukaj in vam je uspelo knjižnice
in različice da vas skrbi.
Torej, če imam package.json, Jaz lahko preprosto storite NPM,
Node paket Manger namestiti, da se bo samodejno poiščete
V tem package.json datoteke.
Poglej in glej, moram imate najnovejšo različico
vseh prodajalcev modulov
v vozlišču poudarjajo moduli Imenik tukaj ali morda
v nekaterih staršev ali prednik imenika.
In če ne, je dogaja, da jih prenesete
in videli boste cel kup
HTTP stvari dogaja preko žice.
Torej, na primer, naj mi prikazal vsebino
vozliščnih modulov samo izraziti.
Dovolite mi, da gredo naprej in drzno zbrisati vozlišče module
tako da vse, kar imam zdaj je to.
In če mi NPM namestite, boste vidim, da se dogaja, da se glasi
da package.json datoteke in smo videli izhod podobno
to v Laravel svetu.
To je prenos celoto kup stvari in da je
ker Express pa odvisna od cel kup
drugih narodov knjižnic.
Torej, vse to so neke vrste se rekurzivno prenesli.
Do sedaj, če bom še enkrat v LS,
Tam je moj vozlišče moduli Imenik nazaj
in izraziti kot nazaj.
Torej to je samo način poenostavitev paket za upravljanje.
Zdaj, če pogledamo app.js datoteke, to se dogaja
da bo vrnitev k naša prej spletni strežnik
kjer smo samo pljuvati out "Zdravo, svet".
Opazil paradigme tukaj,
Najprej smo potrebno izrecno modul, potem imamo to linijo
kode, ki jo poznate Iz dokumentacije.
You dobesedno zdravljenje, ki spremenljivka modula kot funkcijo,
tako odprti oklepaj blizu oklepaj pomeni izvrševati.
To bo očitno nekaj, kar bomo vrnili
običajno zahtevajo aplikacijo.
Kako deluje?
Res ne vem.
Jaz bom pustil nekdo drug, saj veste, v izrecnih svetu pišejo, da je.
Grem zdaj stojijo na njegova ali njena ramena, tako
da bo mojo vlogo teče malo enostavnejše.
Tukaj bom poslušal na tem določenem pristanišču
da bi bilo najbolj karkoli.
In tukaj je koda, ki je morda bolj spominja zdaj
od Laravel in routes.php.
Torej, to je večerja preprost, sem šele tekoč, da določite pot
za slash zvezdo, tako da je vse se dogaja, da se absorbira
s to zahtevo trener.
Paradigma za odpravnika je njegov anonimni funkcija
z zahtevo argument
in predmet odziv tako kot prej.
In res.send v izrecnih sredstvi pošljete sledi koda
ga karkoli hočeš poslati.
In seveda, lahko naredite nekaj Ljubitelj
ga pravzaprav pošilja datoteke ali HTML
ali dinamično vsebina.
Ampak za zdaj, vse, kar smo naredili je izpljunil Pozdravljen, svet.
Če gremo v strežniku tri, To je tudi ljubitelj le
da vam pokažem nekaj funkcionalnosti.
, Mi pa vam bomo pokazali, celo bolj seksi različica
to sredo.
Ampak, če ste kdaj slišali vtičnice IO morda,
tako da mislim, Jonathan ali je nekdo rekel prej,
ena od stvari, vozlišče je res znana
za je njegova realnem času obnašanje, kajne?
Pomisli, PHP v MySQL, če so za izvajanje strežnika za klepet
v PHP, pri čemer bi dve osebi odpre okno brskalnika na foo.com
in začnite IMing vsak drugi, Alice v enem oknu,
Bob v drugo, tako da vsak od njih vidi njegov
ali njena sporočila v drugo okno.
Kako bi lahko to naredil v PHP in MySQL?
Uporabo oziroma neuporabo Laravel vrste nematerialnih, imate lahko
kot index.php datoteko.
In moraš imeti - v V nekaterih primerih pa ima pljuvati
od obliki, tako da je bo oblika HTML
da verjetno ne navaja prek običajne oddajo obrazca
ampak Ajax verjetno, kajne?
Torej, na submit trener, tako da vnesete v polje z besedilom,
ste zadeti nastopiti, nato pa ga dobi pošlje na strežnik preko Ajax.
Kaj morate storiti, potem storite na strežniku?
Torej, imaš index.php
ali kaj dot PHP, ki je prejeta v HTTP parametra
od uporabnika, Alice in Bob instant sporočilo, kaj storiti
s tem, da njeno razmnoževanje Bob in Alice, v tem zaporedju?
Sem ti pomeni dobesedno so orodja, s katerimi
to storiti v vašem min.
Torej, kot kaj bi ti naredil?
Imate eno minuto, da izvajanje tega programa.
Ja?
[Neslišno Opomba]
Popolna. V redu, torej imaš zbirko podatkov.
Vemo le malo bit o MySQL.
Torej, imate tabelo To je sporočila,
morda je krat žig, ID uporabnika,
telo sporočila sama ustvarila, da
posodobljeno to in vse to.
Torej, shranite v zbirko podatkov.
In domnevam, Alice pošlje Prvo sporočilo, kako priti Bob
da je sporočilo zdaj od baze?
>> Morda bi bilo nekaj Ajax odziv, ki se nenehno dogaja
nazaj v podatkovni bazi top dobili [neslišno].
>> Točno tako.
Torej, Bob je koda, ki je koda Enako kot Alice je nekako
simetrične razmerja,
Brskalnik Bob ima nekaj Ajax kodo to je verjetno mogoče vsakih 30
sekund vleče strežnik preko Ajax sinhronizacijo,
obstajajo nova sporočila?
Ali obstajajo nova sporočila?
Vsakih 30 sekund se bo da bi nekako optimalna
ker je treba čakati tudi on ima
Če Alice dobesedno pravkar poslal sporočilo.
Torej, lahko brskalnik Bob vsak drugi hit strežnik.
Toda to pomeni, Alice Brskalnik je hitting strežnik
vsako sekundo.
Kaj pa Charlie [Domneva črkovanje]
David [domneva črkovanje] in Edward [domneva črkovanje]
in vsak drugi črka abecede?
Kaj je problem tega pristopa?
Veliko zadetkov pretiranih -
Mislim, da si pravkar učinkovito Doziranje svoj vid
ali DDOSing, Distributed Denial of Service napadi
na svoji spletni strani, ki jo imajo vse
od teh uporabnikov teči javascript Koda, ki je samo ping
heck iz svojega strežnika tudi če poljubnim številom,
80 odstotkov časa nihče ni rekel ničesar
v klepetalnici.
Ampak ste samo preverjam zagotoviti takega.
Torej PHP v veliko jeziki so le niso dobri
za prave komunikacije časa.
Ker v PHP odpoklic pa je no osrednji spomin, kajne?
Imate sej predmetov ki ustvarja iluzijo
za centralno shranjevanje vendar , ki je na na uporabnika.
Nimate globalnega pomnilnika kot si ti v Java Servlet
V poznajo ali v drugih Okvir deluje tako.
Node.js čeprav, imate globalna spomin, ker imate
en strežnik in da "lahko spomnim se želi
o vseh uporabnikov.
In morda še imajo bazo podatkov.
Ampak lepo stvar o node.js Tudi to, da je veliko bolje
kot nekaj podobnega PHP in ustvarjanje iluzije
voditi večkratne stvari naenkrat.
In v resnici, kot v prahi, lahko izvajati klepet strežnikov v PHP,
vendar bi običajno storijo nekaj, kar ti dolgo polling
pri čemer ne boste ping Strežnik vsako sekundo.
Ping strežnik, Strežnik se ne odziva na vas
za navzgor od 30 sekund, dobesedno sedi
v zanki čaka in čaka.
In preverjanja strežnika, če tam je novi podatki v bazi
in šele, ko mu jo vidi, "Oh, tukaj je sporočilo od Bob "
Ali je odgovor na HTP strežnik?
Torej učinek v vašem brskalniku je, da je ikona IE ali Mozilla
ali karkoli samo ohranja predenje za 30 sekund hkrati.
Ampak glavo je, da si ne imajo 30 povezovalne zahteve
v 30 sekundah, ki jih imate.
Zato je pozval dolgo pozivanje.
Ampak še bolje v sodobnem spletu brskalnikov je nekaj, kar se imenuje
WebSocket, ki ste vzeli CS143,
lahko povzroči, da TCP povezava od A strank
kot brskalnik na strežniku nato pa visijo na njej
brez uporabe zelo blizu toliko sredstev
kot HTTP morda tradicionalno storiti.
In Socket IO je node.js knjižnica
da je veliko lažje da v vtičnico povezave
ali iluzije tam V starih brskalnikov
tako da lahko ta izvaja realnem času funkcionalnost je.
Torej, tukaj je primer.
Ta stvar do vrha dobi malo bolj zapletena
ampak to je predvsem kopiranje in lepljenje od socket.io 's dokumentacije.
Tukaj je zdaj bolj Natančna odpravnika.
Če uporabnik zahteva slash, kaj datoteka bom
biti očitno služijo do njih?
Index.html.
In tam je nekaj novega stvari tukaj tok
ki vam bom pokazal, čez nekaj trenutkov.
Ampak to je samo še en način
iz oprijemalne datoteka Malo bolj učinkovito
kot samo delaš fs.readFile.
To je malo pametnejši še posebej za velike datoteke.
Tako da skrajšam zgodbo, te vrstice samo, da služijo
up datoteki z imenom index.html
ki je za zdaj prevzeti vsebuje oblika HTML, s katero Alice
in Bob morda seboj komunicirati.
Nazadnje io.sockets.on, tako da to prihaja iz te vrstice tukaj.
Torej, jaz sem samo branje Dokumentacija io.socket mi daje
Dostop do ti WebSocket z brskalnikom,
med brskalnikom in strežnik.
Jaz sem poslušal za posebne povezava dogodek, ki pomeni
ko uporabnik hits strežnik poskuša
, da se odpre to povezavo, da sem bom poklical ta klic nazaj.
In zdaj, bom storiti naslednje.
Vsakih pet sekund, kaj bom naredil?
Grem oddaja ali oddaja če se spomnite, praskajte,
grafični jezik, bi ki oddaja, bloki?
Torej, boš oddajajo
ali sproži dogodek z imenom samovoljno iz strežnika.
In to se dogaja, vsebuje Ping sporočilo
in trenutni datum.
To je torej dejansko chat strežnik, ki Alice
Bob je mogoče uporabiti, ampak to je nekako avtomatiziranega server chat
kjer so sporočila nekako sonar Pinga.
To je samo datum, na trenutke, ki so se pošlje vsakih pet sekund.
Torej, če sem dejansko vodijo to stvar - in to je to.
Da bo jasno tukaj, obvestilo to je samo prijavite tukaj.
Torej, naj obrnejo slepo oko za to.
Bom jaz vozlišče app.js.
Naj grem k mojim brskalnikom.
Ponovno naloži domačo stran tukaj.
[Pause]
In mi zapre inšpektorja.
Vsakih pet sekund, imam demonstracija, čeprav ne
Interaktivna za prehrano ljudi
za nekaj, kar je dogaja asinhrono.
V obvestilu brskalnika, ni icon predenje.
To je z uporabo Ljubitelj funkcijo Chrome v sodobnih brskalnikov
ohranja vtičnico povezava pod pokrovom
in to je tisto, kar se imenuje splošno modela pub / sub,
objavi / naročite modela, kjer nismo storili
da je precej jasno tukaj.
Ampak kaj je lepo o tem splošno pub / sub paradigma
da lahko en založnika.
V tem primeru Osrednji strežnik in vse
posameznika brskalniki so stranke.
Alices in Bobi iz svet lahko naročite,
tako da lahko pošiljanje sporočil med poljubno število uporabnikov.
In čeprav spet smo Ne vidim interaktivnost,
smo imeli morda 12 vrstic kode, samo, da to storijo.
In to je verjetno ne preskok predstavljati, kako bi lahko bič
iz spisa index.html da ima resnično obrazec HTML,
Malo jQuery kode z Ajax, ki ne pošlje podnevi
ampak samo pošlje karkoli Alice ali vrsto Bob na strežnik
in potem strežnik to bo rele ven.
In obljubim, da pogled na eno stvar samo
da se zafrkavali s tem.
Če gremo v potoku nič, ena,
boste videli kodo, ki je pravkar malo drugačna tukaj.
Samo, da ste ga videli, To je alternativa
s tem, kar sem poklical fs.readFile Postopek prej, pri čemer,
vam lahko povem node.js "Pojdi preberite to sliko v spomin.
Ampak, če je to velik daj mi kos naenkrat. "
In morda veste iz CS165
ali 161 datotečne sisteme imajo različne
lastnosti zmogljivosti.
Morda boste želeli prebrati v blokih 512 bajtov
ali 2 kilobajtov ali karkoli.
To je optimizirati način dobili nazaj datoteke ponavljajočim
tako, da ga lahko pljunil ven malo hitreje
na strani ali kdor končni odjemalec.
Torej ogromno vsebine danes in bomo potapljati
v podrobnosti v sredo s Timom [domneva črkovanje]
predvsem gledaš, kako smo mogoče prevesti nekatere ideje
iz prve polovice Seveda Laravel in modeli
v knjižnici, ki je sam Napisal imenuje Bookshelf.js
ki je vedno bolj priljubljena v skupnosti
saj vam daje večina tega,
če ne več kot Funkcionalnost zgovorna
katerega odpoklic je, da Knjižnica vpogled Laravel,
tako bolj na to in še več, kako
razviti popolne apps v sredo.
Bomo videli potem.