>> Olgu.
Nii pinge oli, mis on node.js kui sa tead seda täna?
Midagi? Jah?
>> See oli nagu raames kirjalikult JavaScript
rakendused üldjoontes -
>> OK, mis töötab.
>> - Ma tean, nagu tavalisemad nagu -
või midagi saab teha, on nagu -
[Kuuldamatu Märkus]
>> OK hea.
Jah, nii see on raamistik.
See on mootor, mille abil võimalik täita JavaScript kood
server saidile.
See võib tähendada lihtsamaid asju
nagu kirjutamine käsurealt script ei Python või Bash
või Ruby või PHP, kuid ainult JavaScript ise
ja täidesaatva seda vilgub käsureale.
Või tegelikult võite käivitada ta jooksul veebiserver.
Ja tegelikult jooksul node.js ise
Selle raames on terve hunnik raamatukogude mille hulka
HTTP server sisseehitatud.
Nii saab tegelikult kirjutada server nagu me näeme
vaid hetk, super lihtsalt lihtsalt mõista natuke
HTTP ja TCP ja sadamates.
Ja saate kudema kuulamine veebiserver Apache,
ilma Microsofti IIS.
Ilma muude tarkvara,
võid lihtsalt kudema see ja kuulata kõige sadamasse
poolt, mis olete lubatud.
Nii juhtumi võrra lase mul minna ja avada
kuni see näiteks server-0.js.
Nii teate, et tippu Selle faili lihtsalt kamp
on ebahuvitav kommentaare ja siis seal on paar
tüüpiliste rida koodi et me näeme kordumatult.
Niisiis, var HTTP saab nõuda "HTTP".
Nii sisseehitatud et node.js " infrastruktuur on terve hunnik
moodulid, mis on tegelikult lihtsalt raamatukogud ja kõik on omamoodi
nime ruumi kordumatu tunnus
nagu see on "HTTP".
Nii et nagu palju keeltes nagu Java ja C + +
ja C, ainult siis, kui importida või sisaldavad
või sõlme rääkida vaja moodul teeb oma bitti.
Ja kogu mälu nõuab saada koormatud
RAM ja seetõttu kasutatakse.
Nii, teil on mingisugune koormus see raamatukogud või moodulite nõudlus.
See tähendab, et edasi minna ja nõuda
Selle programmi HTTP raamatukogu
ja vaadake, et raamatukogu viis muutuja nimega HTTP.
Aga see vasakpoolne sümbol võiks on kutsutud midagi, suva,
baar, Baz, see ei ole oluline.
Seega erinevalt C + + ja Java ja C kus kui vajate
või importida raamatukogu see lihtsalt omamoodi
ning muutub ülemaailmselt kättesaadavamaks,
node.js moodulid tihedamalt nimeruumi.
Nii et ise - see funktsionaalsus pääseb ainult hetkel
teel selle muutuja nimi.
Sa ei saa lihtsalt alustada määramismeetoditega, mis eksisteerivad
see õige tee mis on ilmselt hea,
sest siis oma nimeruumi ei saa pooltki nii täis
kui palju keeli.
Olgu, nüüd ühine näitavad, luues HTTP server
Jonathan [eeldada õigekirja] oli võimalik sõna otseses mõttes
nii lihtne kui helistaja luua server meetod sees
HTTP mooduli.
Niisiis, see on tagasi viide
mingi veebiserver.
See tuli Apache, ei tingimata raske kaal.
See üks on natuke lihtsam.
Ja nüüd, ma pean lihtsalt lihtsalt teha mõned asjad.
Nii et esimene, las ma kerin alaserva siin
ja jätke handler meetod hetkel.
Ja teate see koodirida
server.on mis on Sisuliselt tähendab server -
kuulama nagu jQuery koodi
kuulake sündmus kutsutakse taotluse
ja võtke lihtsalt oletus Mida ma peaksin tegema
kui taotluse korral tulekahjud server.
Jah?
>> Ooteaeg funktsioon käitleja.
Seega, sõna otseses mõttes ellu kood, mis on viidatud
Käesoleva muutuja ja tegelikult mitte muutuja sümbol siin,
Mis on see sümbol viidates?
Noh, see nimi toimivad siin
ja handler ilmselt võtab kaks argumenti.
Miks kaks? Noh, kui sa just loe no dokumentatsioon
Selle konkreetse mooduli, siis öeldakse, et käitleja
mis saab tugineda saab läbinud vähemalt kaks argumenti,
Viidates taotlusele,
ja sees on soovi korral sõna-sõnalt tähendab HTTP taotluse.
Niisiis, kõik need HTTP päised et võite meelde tuletada
alates algusest semester või mõne eelneva klass
või kogemus, nagu saada liin ja vastuvõtva line
ja User-Agent line, kõik see kapseldatud ja rohkem sees
Selle taotluse objektiks.
Ja vastus objekti järjestatud väljaminevate andmeid.
Nii, teil on viide vastuväiteid, mis toimub, et saaksite
saatma teabe tagasi Brauseri helistades meetodid
selle viimane argument nimega Res vastust.
Aga see võiks kanda nime foo või baar, see on lihtsalt konventsioonidega.
Nüüd, mida ma pean tegema?
Noh, tundub, et sees Selle super lihtne veebiserver
et ma rakendamisel, ma olen teeme järgmine.
Ma kirjutan HTTP header olekukoodiga 200,
200 tähenduses OK, kõik on hästi.
Ja siis ma lähen edasi ilmselt.
Mis on andmetüüp Teine argument on õige pea?
>> See on eesmärk?
>> See objekt kui palju võtmeid ja väärtusi?
Lihtsalt üks iga, paremale, üks põhiväärtus paari.
Niisiis, "sisu tüüp".
Ja ainus põhjus Ma tsiteerin siin on
sest sidekriipsuga võiks olla conflated jaoks miinusmärgiga
või midagi sellist.
Nii, mul on seda tsiteerida siin kõrbema või jutumärkidega.
Aga jälle ühine paradigma
JavaScript kood on sageli ülakoma nendel päevadel,
käärsoole ja seejärel väärtust.
Nii, see on lihtsalt niinimetatud meeles tüüp.
See HTTP päis see on sõna otseses mõttes läheb
olla rahul sidekriips tüüp koolon tekst kaldkriipsuga tavaline, et toimub
tuleb saata server brauser
nii et brauser teab kas käivitada nagu Raw tekst
või HTML või Pilt või film
või flash faili või midagi muud.
Nüüd, kus ma tegelikult tahan saata kehas lehel?
Noh, lihtsalt lugemine dokumentatsiooni
jaoks vastus objekt sees see raamatukogu.
Ma näen, et seal on parem meetod, mis võtab string,
võibolla muid asju, kuid minimaalselt string.
Ja string on see, mis sülitama brauseris.
Sel juhul tema super lihtne, tema tere,
kuid see võiks olla opne sulg, html, sulg,
sulg pea lähedal sulg ja nii edasi,
see võiks olla Raw html.
Aga me hoida näiteks lihtne, lihtsalt sülitada
välja lihtsam meeles tüüpi mis on vaieldamatult text / plain.
Ja siis Response.end lihtsalt tähendab ühenduse sulgeda
ja saadab kõik mul omamoodi puhverdatud sees
Selle objekti tagasi brauseris.
Ma olen teinud. Hea küll.
Niisiis, viimane asi, mida Ma teen siia
ja see on mõnevõrra meelevaldne ja pidi olema lahe,
on ma ütlen server lõpuks kuulata
teatud TCP vaikimisi port.
Meenuta algusest klassi, et teenused -
või sa tavaliselt üheselt identifitseerib need numbrid,
AD on web, 443 on HTTP põhineb veebilehed, 22 on SSH, 21 on FTP
ja 1337 on lihtsalt meelevaldne aga see on suurem kui 1024
mis tähendab kõige süsteemid, võin seda kasutada
ilma super kasutaja õigused.
Nii et see on lihtsalt mugav.
Aga 8080 on off - ühine üks, 8088, tõesti midagi suurt
tuhandetes nagu ühine aga see on lihtsalt rohkem eliit.
Olgu, mis juhtub kui ma tegelikult käivitada?
Noh, ma ei ole lihtsalt külastada brauseris lehe.
See fail nimega server-0.js.
Kuna uuesti Apache nüüd välja pilt
et viimane pool muidugi.
Kui ma tahan web server, ma pean kirjutama
ja seejärel käivitage see web server.
Aga selgub, et JavaScript nii kliendi poolel
ja serveri poolel on tõlgendada keeles.
Niisiis, kõik, mida ma vaja on tõlk.
Nii See on - kui nõudma joosta sõlm ja siis server-0.js,
Mul võib olla või ei näe mõned väljund sõltuvalt
kohta, mida raamatukogud Olen lisanud, midagi tundub toimuvat.
Aga lubage mul minna brauser ja lase mul minna
Lisa sama IP aadressi minu CS50 klientidele.
Aga see võiks lihtsalt samuti on minu Mac
või minu arvuti ja seejärel vajutage enter.
See tegelikult välja näeb Apache.
See on nagu kataloog loetletakse vaatasime
at esimesel poolel.
Niisiis, mida ma valesti tegin?
Jah.
[Kuuldamatu Märkus]
Täpselt nii, eks?
Niisiis, Apache on ikka kuulata on vaikimisi port 80.
Kuigi ma võiks muuta, Ma võiksin selle välja lülitada kõik kokku
aga see on ikka töötab.
Aga need kutid kindlasti koos eksisteerida.
Ma lihtsalt panna koolon 1337 ja siis võib-olla
või äkki ei kaldkriipsuga juures aasta lõpuks, et seda port
et see server töötab.
Ja nüüd ma näen, et Tere, maailm on tagasi.
Ja ma ei tabanud reload kui mitu korda, kui ma tahan,
see on ikka teenivad kuni leheküljel.
Tõepoolest, kui ma avada Chrome'i inspektor, minge võrku
ja siis lehte ümber laadida,
märgata, et tegelikult oli see taotlus, mis saadeti.
Kui ma vaatan Raw allikas,
teate minu brauser saadab kõik need asjad.
Ja seejärel reaktsiooni server oli super lihtne.
On 200.
Kui see ei ole liiga madal ekraanil
on sisutüüp.
Ja siis node.js omamoodi automaatselt
minu lisatud kuupäev ja kõik muud kraami
et brauserid tavaliselt oodata.
Niisiis, lihtsalt vaata vähe meelerahu kontrolli.
Lubage mul minna tagasi kood server-0.js ja andke mulle -
iga kord, kui ma minema käitleja,
lubage mul öelda console.log.
("Meil oli külaline!").
Ma ei vaja kompileeri või midagi sellist,
see on tõlgendanud keeles.
Nüüd lubage mul minna tagasi Lehe laadida üks, kaks,
kolm korda ja mine Tagasi minu akna.
Ja nüüd ma näen seda.
Noh, et on kummaline, Näen kuus rida.
Huvitavad web tühiasi, miks ei Ma saan kuus taotlust mitte kolm?
Jah?
[Kuuldamatu Märkus]
Jah. Nii, nagu te teate natuke loll ikooni ülaosas
brauser bar, et palju
veebisaite kasutada võiks olema Harvard hari,
see võib olla firma logo või midagi sellist.
Niisiis, brauserid need päevad sort
on pretensioonikas teha täiendavaid HTTP taotluse
peaaegu igal veebilehel, mis külastatavate olemasolu kontrollimine
vaikimisi faili nimetatakse favicon.ico
samas kataloogis fail, mida taotletakse.
Ja kui on, siis see paneb ikoon seal.
Nii et kõik me näeme Just nii.
Ja tegelikult, vaatame, kas me näen seda pigem kui tüüp
välja lihtsalt, "Meil oli külaline.
Lubage mul minna ja väljund.
Ja ma tean ainult seda alates Vaadates dokumentatsiooni.
On vara sees taotluse objekt nimega URL
mis juhtub olema tee
mida taotleti tegelik URL.
Niisiis, kui ma uuesti serverisse lihtsalt Kasutage sama sõlme
server-0.js ja Nüüd ei see üks, kaks,
kolm ja minna tagasi.
Siin see on.
Slash on, mida ma - inimese palus
aastal favicon.ico on mis brauser on
pretensioonikas esitanud.
Aga asi ei ole nii palju favicon stuff
aga kuidas server töötab.
Jah?
>> Miks see on olema mingi soov?
>> Miks see on - iseloomust kuidas HTTP toimib.
Niisiis, HTTP saab taotleda ühe faili korraga.
Brauserid saab smart nendel päevadel
ja hoida TCP Seoses avatud.
Kui te võtsite CS143 või üldiselt tuttav võrgustikke,
nii saad tõhususe kasvu
hoides võrgu pesa avatud
tegemisel mitu HTTP Taotluste seeriaviisiliselt üle
kuid nad on üks fail taotluse kohta.
Niisiis, kui sa külastad midagi sellist -
Ma mõtlen saame minna kõige veebilehtedel.
Kui te lähete - olgem tõmba Chrome'i inspektor siin.
See võib saada täita kõige lehel.
Mine võrku tab ja minna www.cnn.com.
Ja kui sa külastad cnn.com, oma kodulehekülg -
Teie brauser pigem metsikult teeb - endiselt lugedes.
OK. Vähemalt 289 HTTP Taotluste ja jälle.
Ja see on põhjus, miks, kui külastate eriti ülespuhutud veebilehed
nad aeglane laadimine sest kõik
vara nad laadimist.
Niisiis, tundub 298.
Võib olla mõned Ajax toimub selles kohas või teatud
vara on lihtsalt madal.
Niisiis, kõik need on isikliku taotluse naasmine
ja tagasi, edasi ja tagasi.
Ja sellepärast varem, isegi kuigi me nagu rääkisime
sellest mõnevõrra luulelennuliselt kui paned script tag,
absoluutselt teeb vahe, kui teil on -
see hakata palju liiklus ja palju
failide taotletakse.
Ja iga selle moodustab ilmselt pilt, meediumifaili
JavaScript-faili, CSS faili vms.
Niisiis, me oleme juba kuni mõned 4 megabaiti lihtsalt
vaatama tänased uudised.
Hea küsimus.
Hea küll.
Niisiis, milline on mõned tasa, kuigi?
Just, me teame, kuidas teha veebilehti juba PHP.
Ja paljud tulid sisse klassi teades Django
ja Python või rööbaste Ruby.
Niisiis, miks me vajame veel ühte keel ja infrastruktuuri?
Mis on node.js eriti hea, kui tead?
[Paus]
Mõni asi?
Ei? Jah?
>> Ülekandeala sõnumeid.
>> Niisiis, ülekandmiseks sõnumeid.
Nii et see on tõsi ja see on tõsi, jaoks rohkem tehnilist põhjust
ja et node.js ja tegelikult JavaScript on eriti
sobis hästi asünkroonne kood,
kui mille loote illusioon
teeme mitut asja korraga.
Seega, isegi kui nad on tegelikult toimub seeriatena,
tõepoolest enamikel juhtudel JavaScript nii kliendi poolel
ja server pool on ühe keermestatud.
Mis siis, kui te kasutate 161 või isegi 61 tähendab, et -
Selle programmi tea,
tõlk võib sõna otseses mõttes ainult üks asi korraga.
Aga see ei ole suur midagi nagu web server
kus peate võib-olla kümneid või sadu või isegi tuhandeid
Kasutajate kõik üritavad juurdepääsu oma veebilehele
päris samal ajal.
Ja veel, mis viitavad et nende käitlemise üks
pärast teiste peale muu eriti kui mõned
nende nõudmisel, kui nägime CNN võib nõuda teenindavad
kuni 300 faili enne isegi saada järgmisele kasutajale
kes tahab näha, ütleb uudised.
Node.js sobib paremini keskkondades niimoodi.
Sest see, mis juhtub, on iga aeglase töötab protsess
nagu lugemine faili kettalt või päringu andmebaasi või räägib
mõne muu võrgu server,
mis kipub olema latentsus, eks?
Kui sa ei võta 61 või 161 eriti kõik see sort
perifeerse teenused kipuvad olema palju aeglasem
kui teed midagi sees Sama RAM ja sama protsessor
et öelda, sel juhul server on tegelikult töötab.
Aga mis on tore node.js on see, et saate -
ja JavaScript üldisemalt on see, et saab midagi teha
ja siis öelda: "Hmm, see läheb
võtta mind paar millisekundit või isegi paar sekundit.
Lubage mul omamoodi toidulauale et ära " kuid see ei ole tõsi protsess.
Ja siis, kui ta on teinud teed et aeglane töötab protsess
nagu haardeseadised read andmebaasi või lugemine fail. html
kettalt, siis saada tagasi mulle pigem
kui mind ootama seda.
Nii, et muuta see selgemaks.
See on minu abil muutes selle rohkem tuttav.
Olgu, see on Shake Shack väljakul.
See on omamoodi ühine paradigma
selgitamiseks asynchronicity.
See on tegelikult hea Näiteks kuna Shake Shack
ja maitsev burger on märkimisväärselt aeglane, mida nad teevad.
Aga point on selles, et nad tõesti hea tellimuste
ja võtta oma raha pärast mis sa ootama oma toitu.
Nii on see tegelikult paremini disain, kui alternatiiv.
Sest arvan, et sa kõndida Selline pood ja sul
et ees rida ja sa oma tellimuse ja soovid
Burger, kui suudan ütle, see võtab vähemalt viis
või rohkem minutit tegelikult saada burger.
Niisiis oleks omamoodi halb ärimudel
kui kui oled oodanud oma burger, Alice [eeldada õigekirja]
ja Bob [eeldada õigekirja] ja Charlie [eeldada õigekirja]
ja kõik teised on järjekordi selja taha
ja te olete sõna otseses mõttes blokeerimine line ootab oma toidu.
Nii et ilmselt kell Shake Shack
ja muu kiirtoit kohtades ei tee seda,
nad midagi sellist teha.
Nad annavad teile summeri.
Ja nad omamoodi saadan sulle teed.
Ja nad helistada tagasi muutes selle väikse asja vibreerima
või flash saada oma tähelepanu.
Niisiis, see on sõna otseses mõttes, mida?
Midagi node.js teeb.
Kui node.js või JavaScript üldisemalt on kasutatud
ja programmeerija on piisavalt targad,
realiseerida, "Tead mis?
Mida ma pean tegema, õigus siin võiks teatud arv
millisekundit või sekundites.
Tead mis?
Lubage mul minna ja mitte nimetame seda sünkroonselt -
"See mees blokeerimine kõik teised rida, "-
Lubage mul minna ja justkui kõrvale astuma
ja lihtsalt helistada ise tagasi
kui et kaua kestnud operatsioon on lõpule viidud. "
Ja tagasi helistada muidugi on vihjates sel juhul
et tagasikutse funktsiooni, viide padruniga kood
et saavad täidetud kui oma burger on valmis,
palju selline asi on mõned objekti funktsionaalsus sisseehitatud
et ta hakkab vibreeriv või sumin, kui see aeg, kus saab
mida nimetatakse tagasi ees rida.
Niisiis, mida see tähendab reaalselt?
Noh, me peame töö meie tee üles.
Niisiis, lubage mul minna ja seda esimest.
In server-1.js, lubage mul kõigepealt lihtsustada kood
et saaksime beebi samme ahvatlevamaks probleem.
See on täpselt sama programm, mille ma kirjutasin enne.
Aga mis on muutunud?
Seal on omamoodi väike süntaktiline erinevus
selle ja versioon 0 hetk tagasi.
Mis hüppab läbi kui te mäletate?
Jah Cynthia [eeldada õigekirja]?
[Kuuldamatu Märkus]
Jah. Nüüd on meil rida funktsiooni möödutakse sisse
Me oleme saanud lahti sort
ning kasutult nimega handler funktsioon.
Useless ainult, et enne isegi nimetades seda ühes kohas,
Ma tõesti ei vaja raisata aega andes talle nime
ning raskendades loe kood ülevalt alla.
Niisiis, lihtsalt kuulutada inline on anonüümne funktsioon.
Ja ma teen kaks asja.
Ma teen paremini kasutamise dot märke.
Nii nagu jQuery, palju sõlme Kasutada võib aheldatud kokku.
Nii et kui sa oled teinud helistaja midagi, sa ei pea
ootama uue liini ja kutsuda teine ​​meetod,
saate lihtsalt kett neid koos.
Ja nii sel viisil saame tõesti pingutada selle üles.
Niisiis, see on sõna otseses mõttes veebiserver viis rida
koodi kokku erinevalt -
Erinevalt mida sa võiksid tavaliselt pean tegema, et mingi aja kokku.
Kui ma minema server 2 Nüüd, teeme seda.
Server 2 - tegelikult olgem tagasi tulla, et server 2.
Olgem nüüd avada async-0.js ja Selle probleemi lahendamiseks käepärast.
Nii et esimene, lähme käia ja avatud
üles async-0.js brauseris.
Nii async-0, lase mul minna tagasi brauserile.
Tulemus reload.
Ja nüüd, see on selline veateadet.
Tõepoolest ma näen 500 Chrome'i inspektor.
Aga las ma täpsemalt taotleda hello.txt.
OK. Nii näib, et see töötab.
Nii async-0.js ei tundu teenida kuni midagi kaldkriipsuga.
See ei ole vaikimisi failide tugi.
Aga kui ma selgesõnaliselt taotleda hello.txt,
mis tundub olevat toetamine.
Miks see nii on?
Noh, mida ma olen käinud siin
ja teinud rakendatakse super lihtne veebiserver
mis näitab, kus asynchronicity võib olla kasulik.
Ja see on rakendatud järgmiselt.
Esiteks, ma kasutan HTTP mooduli uuesti
kuid ka FS mis ilmselt tähendab?
Üldiselt CS, failisüsteemi.
OK failisüsteemi.
Seega edasi FS, failisüsteemi.
Olgu, mida see mulle anda?
Funktsionaalsus on seotud faile, näiteks saada möödas,
failide avamisel, kirjutades kataloogide lugemise kataloogid
ja kõik sellised asjad.
Nüüd teate, see kood on sama nagu enne,
luua server, mis kulgeb anonüümsel funktsioon.
See on selline meelevaldne.
See ei ole väga turvaline veebiserver.
Tegelikult, sa võiksid pääseda kõige tahes faili oma kõvakettale
või server on raske autot käivitades see kood
sest ma olen lihtsalt pimesi eeldades, et ma lähen
haarata iganes kasutaja taotletud URL.
Ja ma lähen eesliide seda dot
nii et ma olen veidi ohutuks
öeldes tahes faili nad saavad taotlus peab vähemalt algus
praeguses kataloogis.
Muidugi on olemas oht siin.
Sest kui nad selle asemel hulka, mida?
Oma tee, võivad nad omamoodi töö ümber, et liiga.
Dot, dot, eks?
Seega, kui kasutaja lihtsalt panna punkt, dot URL teoreetiliselt
nad võiksid alustada saada minu - ja öelda salasõna faili.
Niisiis, see ei ole mõeldud olema tagatud,
see on mõeldud olema lihtne.
Nii et siin, mul on muutuja, mis on ahel dot
mis on olemas kataloog ja taotluse URL
nägime enne IS nagu kaldkriips / või hello.txt.
Nüüd, kui ta saab veidi põnevamaks.
Esiteks teate allosas.
Ma kuulan edasi samasse porti enne.
Nii et tegelik huvitav töö on sees siin.
Iga kord, kui jõuab oma olemuselt
Selle koodi, mida ma teen?
Ma helistan fail süsteemi faili lugeda meetod,
kulgeb tee et kui ma tahan lugeda.
Ja nüüd on see mis on huvitav siin
see on rakendamisega asünkroonselt meetod.
Sa ei saa tagasi väärtus read faili.
Tegelikult teate, on no vasakpoolne avaldis
vasakule read faili.
Ta ei tagasta raha.
Pigem nõuab callback töötada, kui see on valmis
teile tagasi vastuse.
Nii et taas, et oleks selge, arvestades ajastu,
Paljudes programmeerimine keeles, kui sa tahad
loe faili puhul punktis PHP,
file alakriips saada rõhutada sisu,
sul on vasakul väljend kõikides väärtus pärast -
enne võrdusmärk, see tähendab, et sa oled määrates
selle muutuja tagasipöördumist väärtus selle funktsiooni.
Seda saab teha, et node.js, kuid siis tavaliselt on
helistada selgesõnaliselt sünkroonne versioonid funktsioone nagu,
Ma arvan, et lugeda sync fail või sync lugeda faili.
Ma unustasin, kuidas nad nimetasid seda.
Ja mis annaks Teile tagastatav väärtus.
Aga kui see fail on mõnes kaugemas failisüsteemi
või ketas on lihtsalt loomulikult aeglane, see võib võtta 10 millisekundit
või 2 sekundit, et fail tegelikult tagasi tulla.
Vahepeal ei ole muud web külastajad teenindatava
teie websit.
Sa varjad.
Seda nimetatakse blokeerides IO, sisend / väljund.
Nii et siin on see palju targemaks.
Sest see, mis node.js läheb
teha tõlgendamisel on järgmine,
see läheb helistada Faili lugemine meetod,
proovige üks üles fail, kes sai tee poolt määratud väärtus P.
Ja siis, kas ja kui see on valmis teile tagasi sisu
faili P, siis helista funktsioon, kelle allkiri on
kokkuleppeliselt järgmised.
Kaks argumenti, millest esimene mis on võib-olla viga objekt
kapitali E, see on objekti nimetatakse viga või Null
kui seal ei ole sellist viga.
Ja teine ​​argument - võtma oletus - saab olema see, mis?
Seda nimetatakse andmete ilmselt vaid Mis on andmete konkreetsemalt?
>> Sisu?
>> Sisu hello.txt Näites Tõmbasin
up minu brauser hetk tagasi.
Nii teisisõnu lugeda faili ja paljud node.js funktsioonid
nagu hetkel ei tagasta väärtust.
Nad kutsuvad kutse, ja edasi
neile kutse, mis oleks on olnud traditsiooniliselt
tagastatav väärtus.
Segamini on see lähenemisviis
et võite helistada Faili lugemine T0.
Callback funktsioon võiks ei saa nimetada üks linnuke hiljem
niiöelda T, siis võiks nimetada T1000,
tuhat puugid hiljem.
Aga asi on selles, et ülejäänud koodi seda faili
kui mõni oleks kohe täidetakse samas node.js
ja kui failisüsteemi arvud, kuidas lugeda
et fail ja saada see sulle tagasi.
Nii loote -
nii tõhusalt illusioon
paralleelsuse samas lastes Aeglasem protsessid ei ole
blokeerida olulised asjad, osa, mis teenindamiseks kasutajad.
Niisiis, kuidas me sellega hakkama?
See on väga levinud node.js paradigma.
Ja seal on nii, siis on lihtsustada see on me näeme enne mööda.
Ma kõigepealt kontrollida, kas Viga ei ole null.
Niisiis, kui see ei ole vale siis ei olnud viga.
Ma ei tea, mis see on, võibolla faili ei ole olemas.
Ma ei ole õigusi.
Failinimega on vale.
Kõik mitmeid asju võiks valesti minna.
Sest nüüd ma lähen suvaliselt tagasi 500
mis on sisemine serveri viga.
Midagi läks valesti.
Ma tõesti ei hooli diagnoosida seda.
Niisiis, lihtsalt ütle kasutaja on see katki.
Ja siis ma lähen teha res.end,
ja see on stenografisti märke.
Tuletame meelde, et viimane aeg tegin res.write
ja siis ma tegin res.end.
Kui tahad ainult Kirjuta üks rida väljund,
saab lihtsalt teha kõik korraga koos res.end koos argument,
ja mis toimub saata olenemata veateadet
sees Selle objekti brauseris.
See oli päris kaarest meenutada hetk tagasi.
Mul pole aimugi, mida see tähendas esimesel pilgul.
Aga kui ma palusin fail, mida polnud olemas -
oops, meil on vaja käivitada server uuesti.
Kui palusin fail et ei ole olemas, EISDIR,
nii midagi see on kataloog,
kui ma mõne juhusliku string seal,
ilmselt see tähendab, et fail ei ole üldse.
Ja see on, sest minu kood lihtsalt öeldes, et kirjutada
välja olenemata Raw Veateade,
nii ei ole väga kasutajasõbralik aga vähemalt ma käitlemine.
Else, kui see ei olnud viga, mida ma teen?
Sama asi nagu enne sülitada välja 200 OK, tavaline -
text / plain meeles tüüp ja siis sülitama andmed.
Ja sellepärast ma saan sisu hello.txt mis lihtsalt
kinnitada, kui ma vaatasin kell hello.txt,
see on sõna otseses mõttes lihtsalt hello, world.
Ja kui ma seda muutnud Tere, maailm, salvestage fail,
uuesti, server, asendusostu lehekülge.
Nüüd, kui ma selle versiooni.
Niisiis, ma olen tõesti lihtsalt reimplemented veebiserver
kui on olemas palju aastat, aga node.js.
Aga me saame seda teha isegi puhtamalt.
Lubage mul avada async-1.js.
Nüüd teate Ma lisades teise mooduli seekord
ilmselt tee moodul.
Nüüd on see hea võimaluse vaadata
milliste dokumentide välja näeb.
Node.js on dokumentatsioon.
Nagu PHP on minu arvates tegelikult päris hea
ja otse edasi.
Kui ma lähen node.js ja Google ja otsida node.js tee,
mida näete tavaliselt on otselink URL
et panin siin hetk tagasi.
Nii / api on ametlik koht minna dokumentatsioon.
Ja mida sa näed ülaosas
sõlme ametlik dokumentatsioon on kõik meetodid ja
või omadused sees selle konkreetse mooduli
millest üks on nn liituda.
Ja liituda on abistaja funktsiooni et läheb lubage mul
et ei segaks kõik plussid.
Ja see on lisatud boonus kui näete
dokid on see ka normaliseerib saadud tee.
Seega, kui kasutaja või sa ei dots või dot punktid või mistahes kombinatsiooni
nende liiki suhteline radade seas tasa
of liitunud meetodiks on see läheb puhastada kõik see üles
ja teile kanooniline tee ilma
need täpid või dot dots.
Nii, et see on hea asi üldine turvalisuse vähemalt
kui loed tagasi raha, mida ma ei ole
selles konkreetses lihtne juhtum.
Aga ma ei taha seda kasutada.
Niisiis, ma nüüd luua tee natuke rohkem programmiliselt
koos path.join asemel Raw ahel.
Nii, et see on natuke puhtam kui varem.
Ja nüüd teate ma oleks vähe targema pigem
kui lihtsalt pimesi proovige lugeda faili
Ma tegelikult kutsuvad fs.stat.
Niisiis, kui sa oled tuttav
Madala C funktsioonid ja C, isegi PHP.
Palju raamatukogud on Selle funktsiooni stat tagasi
peamiselt statistika kohta, faili suurus,
õigused, nimi ja asju,
ja kaudselt ka kui fail on olemas või mitte,
ja kui see on faili või kataloogi
või sümboolne link või midagi muud.
Nüüd teate, ma olen kutsudes fs.stat.
Ja siis ilmselt vastavalt dokumentatsioonile,
Ma peaksin tagasi aastal Error objekt
või Null järgneb poolt statistika objekti.
Aga vaatame seda, node.js.fs.
Siin on fail dokumentatsiooni.
Lubage mul otsida stats.
Seal on palju rohkem Funktsioonide siin.
Oops, et stat sync, fs.stat.
Nii et siin, see on asünkroonne statistika (2).
Seda tähendab, kui sa mäletan peamine lehekülge
2. peatükk pealehel
see tähendab, et see on sõna otseses mõttes lihtsalt sõlme rakendamise
madala taseme süsteemi funktsioon stat.
Niisiis, tagasihelistamise saab kaks argumentide viga ja stat
kus stat on fs.stats vastuväiteid.
Vaatame, mida see objekt peaks nägema.
Olgem kliki hüperlink ja ma vaatan seda.
Stats objekt sisaldab Ilmselt mõned helper meetod,
on fail on kataloog, on hunnik muid asju.
See on "on" file et ma hoolin umbes sellel konkreetsel juhul.
Nii et siin ma lähen.
Kui seal oli viga, siis las ma kautsjoni seekord
ja eeldada.
Kui on viga, see oli arvatavasti 404 faili ei leitud.
See võiks olla midagi muud
aga ma oleks natuke laisk siin lihtsalt keskenduda
on rohkem huvitavaid detaile.
Aga kasutaja eesmärkidel, faili ei leitud,
kui seal oli viga nimetades faili.
Muidu lase mul vaadata, kas fail on tõepoolest tegeliku faili.
Nii et kui see ei ole fail, see on olemas.
Seal on midagi olemas, kuid see on ilmselt kataloog
või äkki on sümboolne link
või midagi muud, mis on funky failisüsteemi.
Mõlemal juhul on kasutaja ei tohiks näha.
Nüüd, ma lihtsalt sülitada
välja tavaliselt volitamata 403.
Aga jälle lihtsalt konventsiooni
Ma oleks võinud kasutada midagi teoorias.
Ja siis lõpuks, lubage mul proovige lugeda faili.
Seega, las ma kerin.
Ja nüüd märgata on see, kus kood võib saada veidi segane,
teate, et ma helistan fs.readFile möödaminnes
sama tee, sama tagasihelistamisse nagu viimane kord,
nii eelmise versiooni.
Ja siis, kui ma leida -
kui ma ei leia seda, Ma sülitama 500.
Ja kui ma ei leia seda, mida line me siin näha?
Me näeme, fs kirjuta päise 200 ilmselt
ja res.end saatmine tegelikud andmed.
Aga märka seda.
Ja see ei ole demonstratiivne ning halvimal juhul.
Aga mul on see stat kõne siin, kui mul on mõned asjad.
Siis on mul veel üks asünkroonne kõne siin
nii rohkem taandus.
Niisiis, just selline üldistusi kui sa saaksid siit.
Mis probleem kipub tekkida keeles nagu JavaScript
selles keskkonnas, kus sa ei pea tagastamine väärtused
vaid sa pead Nende kutse,.
Ja muidugi, see on lihtsalt stilistilise asi asjaolu
et ma saan taandrida.
Aga seda, et järgmine loogiline samm.
Oletame, et on üks või kaks või kolm muud funktsioonid
et mul on vaja täita, et olid olemuselt asünkroonne,
ja seetõttu sa lihtsalt selline hoida taandrida neid lahendab,
käepide neile, et nendega hakkama.
Sa saad sorti callback kurat kui inimesed kutsuvad seda
kui teie kood algab saada väga lai
ja ausalt öeldes väga raske lugeda.
Mis see on, ma saan mingi vaevu öelda, et see on omamoodi voolu
et on selline
ning stiililiselt nurgaga asi toimub.
Niisiis, see ei ole ideaalsed, kuna see võib väga kiiresti muutuda
kohmakas, kuigi kaks asünkroonne kõned ei
nii suur asi.
Nii saaksime vältida seda, eks?
Teil võib olla vilksamisi, et Ma misclicked hetk tagasi.
Dokumentatsioonis, tead, see näeb välja nagu on statSync.
Ja statSync ei võta tagasihelistamise argumendina.
See võtab lihtsalt tee, sest see ilmselt teeb?
Ta naaseb näiteks kohta fs.stats.
Nii et see võib olla teie esimene instinkt, eks?
Eriti kui callback funktsioonid
ja asynchronicity on vähe uusi teid, öeldes,
Lihtsaim võimalus on ilmselt lihtsalt vältida probleemi kõik
kokku, minge tagasi sorteerima kohta CS101 stiilis programmeerimine
kus te helistate funktsiooni või meetod, tagastab väärtuse,
helistada funktsioon, naaseb väärtus,
funktsioon tagastab väärtuse.
Ja ma kasutan seetõttu fs.statSync
mis on sõna-sõnalt samad aga see on sünkroonne versioon
mis tähendab, et ta naaseb väärtus.
See ei liigu väärtust tagasihelistamise.
Aga miks see arvatavasti suboptimaalsest vastukaalu kasutama
sünkroonse ülesandeid?
Jah?
[Kuuldamatu Märkus]
Täpselt nii, see võtab kaua aega.
Sa lihtsalt aeglustub kõike ette.
Sest palju nagu Shake Shack või Maitsvad Burger, kui nad lahti
nende Summerid ja tehtud teid, klient seista ees
liini, kuni teie toit on valmis Enne isegi kui võtta, et
isiku taga sa ilmselt
läbi put aeglustub.
Inimesed hakkavad lahkumist sa omamoodi teha pakettides.
Sa ei saa teha number analoogiaid siin.
Aga lühidalt öeldes, et see on ilmselt ei ole hea
äri-või server.
Nii asünkroonne kood on tavaliselt hea vähemalt
sel juhul, kuid kindlasti hakkab tekitada ängi.
Ja tegelikult ma julgen öelda, kui kõigepealt kirjalikult see kraam,
siis võtan natuke natuke harjumist.
Nii, alustame varustada teile mõned raamatukogud
ja tehnikaid teha see veidi lihtsam.
Niisiis, üks kõige tavalisemaid raamatukogud on populaarne raamatukogud
Nendel päevadel, see üks nn async.js.
Ja nagu paljud node.js raamatukogud või moodulid,
need kõik on open source.
Nad peaaegu kõik elavad ja saada hub hoidlates, mis on omamoodi
on saanud de facto koht, kus hoida neid asju.
Ja siis on Kogu infrastruktuur
paigaldamiseks need asjad nimetatakse NPM, Sõlme Package Manager
mis siis, kui sa oled tuttav koos EvanTube on selline
samasuguste app või app saada.
Kui te olete juba tuttav Red Hat ja Fedora
kui seadme see on nagu yum.
Aga see sõlme - see on paketi manager lihtsalt
Selle konkreetse keskkonna.
Nii võime alla laadida ja installida asjad async raamatukogu
ja ka teine ​​kutsutud rõhutada raamatukogu või moodul.
Aga need niipalju fs, HTTP, tee,
need on kõik tulnud ehitatud sõlme.
Nii et kui me läheme API Docs, saate tegelikult näha, et ehitatud
arvesse sõlme saate tasuta terve hunnik mooduleid.
Aga palju toredaid inimesi Internet on teinud kümneid
kui mitte sadu teiste raamatukogude
teha asju paremini või erinevalt.
Niisiis, võtame pilk kuidas see raamatukogu tööd.
Niisiis, kõige selle koodi identsed hetkel.
Mul tee on loodud üleval.
Ja nüüd ma kutsun async.series.
Nii async raamatukogu, see on ainult raamatukogu, mis võimaldab teil
edasi või tõsta tüüpiliselt ülesandeid, et saada nn ühe
pärast teiste lihtsalt mingi vältida taandus teema
ja tõesti lihtsalt vaimne Angst, mis alati tekib
vähemalt siis, kui esimene sukelduda kuni selle ise
programmeerimise asünkroonselt.
Nagu kõrvale, kui te olete võtnud 161 ja olete tegelenud lukud
ja tõsta tingimused ja kõik selle, asünkroonne kood
ja keskkonnale, nagu node.js on tegelikult palju,
palju lihtsam väidetavalt
kui tegelikult kirjalikult multithreaded koodi.
Igakord kui on multithreaded koodi,
sul on tõsta tingimused.
Sa ei pea muretsema kaks niidid, mis sisaldavad
samade vahendite ketas või mälu.
Ilu JavaScript
aastal node.js on seal sõna otseses mõttes ainult üks niit,
mis tähendab, et brauser
või server saab ainult teha ühte asja korraga.
See on lihtsalt sinust, programmeerija
hoida vaimset mudelit kuidas sa omamoodi järjekorda asjad
ja nuputada, kuidas tellida kood.
Aga sa ei pea kunagi muretsema umbes tõsta tingimused
üsna samamoodi kokku vähemalt Raw kood niimoodi.
Nii, et see on natuke raske grack siin.
Aga - Nii et lubage mul avada docs hetkeks.
Async.js raamatukogu Samamoodi on väga googleable,
ta elab GitHub repot nagu palju.
Ärge arvake, et see on pealiskaudsed, see ei ole.
Las ma kerin alla kuni kuulete mind siin.
Niisiis, async raamatukogu näeb terve hulk
Meetodite sees on.
Näiteks seal on meetodit nimetatakse iga,
mis siis, kui ma vajutan seda lihtsalt näha oma docs hetkeks
see on funktsioon või meetod mis võimaldab teil teha midagi
nagu neli iga kuid paralleelselt.
Nad kõik juhtub potentsiaalselt paralleelselt.
Ja meetod iga on ainult läheb tagasi sind, kui kõik
on korduste on lõpetatud.
Nii et äkki nad juhtuvad üksteise järel.
Ideaalis nad juhtuvad sisuliselt paralleelselt.
Kuid meetod ei Helistan sulle tagasi.
See ei buzz summer, kuni kõik
elementide teil Itereeritud üle on lõppenud.
Nii, see on lihtsalt tore viis
vältida kasutades lihtne neli loop
kuid tegelikult teevad midagi asünkroonselt.
Aga nüüd enam otse seotud näiteks
märkate seal on see seeria meetodit.
Ja las ma lihtsalt tõmba lihtne kanooniline näide.
Nii async raamatukogud, seeria meetod võtab nii kaudseid
nurksulgudesse massiivi.
Millised andmed tüüpi elemendid
selles array põhineb on lihtne näide?
See on rida funktsioone.
Nii C, siis kutsuksin nad toimivad lähtekohtadeks.
JavaScript on rohkem õigesti viitab funktsioonidele
või anonüümseid funktsioone.
Ja see tähendab lihtsalt, massiivid
muidugi on tellitud nullist üles.
Niisiis, need on säilitanud et mis on hea
rea, sest seeria muidugi tähendab midagi
et mitte paralleelselt.
Niisiis, see lihtsalt tähendab, et see funktsioon saavad täidetud,
siis see üks, siis see üks, see üks, siis on see üks,
aga palju on
kuni lõpuks vabatahtlik tagasihelistamise nimetatakse.
Nii märkate paradigma siin.
Ja kuigi see on üks kutt raamatukogu
see on esindaja väga levinud JavaScript paradigma
ja uuesti kasutades kutse,.
Nii, teate, mida te teete siin.
Esimesel funktsioon on aastal vastu võetud selle kaudu array,
sa defineeritud anonüümne funktsioon lihtsalt koos funktsiooni.
Aga teate, et ilmselt kohaselt dokumente,
et anonüümne funktsioon peaks võtta argument tagasihelistamise.
See saab olema pointer või viide funktsioon
et siis tuleb helistada siis, kui teie kood on valmis tagasi raha.
Nii et taas, erinevalt lihtsalt tavaliselt menetluslikke programmeerimine
kus sa oled harjunud tagastamise väärtused kohe
et üks erinevus kasutades raamatukogu niimoodi
asünkroonselt programmeerimine rohkem Üldiselt, kui sa oled valmis
tagasi väärtus andmebaasi failist
alates aritmeetika väljendus, see on kuni teil
helistada tagasikutse funktsiooni.
Ja tore asi selle raamatukogu
Kui me loeme docs hoolikamalt, on see,
siis ja ainult siis, kui kõik kutse, ala nimetatakse
ilma Error objekt, siis kogu asi õnnestub?
Nii teisisõnu kui on 2,
kui on 10 anonüümne funktsioonid
selles array seetõttu selle seeria
ainult siis, kui need kõik õnnestub,
tahe lõplik vabatahtlik tagasikutse pidada edukaks?
Kui keegi neist ei, iga funktsioon
pärast seda ei tee isegi täide.
Nii, see on kena viis sorti võttes ketjuttaa
mis katkestab enneaegselt kui midagi läheb valesti.
Nii, et see on seoses siin kuidas me võiksime uuesti rakendada
et eelmise programmi.
Ma saan tee nagu enne, nii et see on lihtne osa.
Kopeerida kleebi see skelett kood
alates dokumentatsioon on async.series avatud sulgudes
avada nurksulg.
Ja nüüd teate mul on üks funktsiooni käesoleva alguses
ning teiseks, me näeme, kuhu läheme selle.
Ja nüüd teate, et see on veidi keeruline alguses
vaid keskenduda just see rida-realt.
Fs.stat tähendab saada statistika või mida ei ole selle tee.
Kõne see tagasihelistamise kui oled valmis.
See kood on sama nagu enne.
Kui on viga, seal on üks erinevus nüüd.
Jällegi väga levinud paradigma aastal node.js programmeerimine
kui midagi läheb valesti ja tagasihelistamise peab teadma
et konventsiooni esimese argument, et callback läheb
olevat, kui kõik on hästi või viitamisele Error objekt,
kapitali E. See on nagu viga klass, mis on olemas kogu maailmas
kuid rohkem, et mõni teine ​​kord.
Nii seda teed, kui seal on viga, mis see tähendas?
Noh selle põhjal, mida ma ütles seeria teeb,
on see, kui midagi läheb vale, me lihtsalt nagu tahaks
katkestada kogu seeria anonüümne funktsioon nõuab.
Seega piisab mulle lihtsalt tagasi tagasihelistamise möödaminnes
aastal Error objekt.
Sest kui stat andis mulle tagasi viga,
Ma võiks luua uue Error objekt oma,
aga ma tõesti ei hooli,
Ma tahan edasi iganes viga on see, et tegelikult juhtub
nii et ma ei liigu see sellele tagasihelistamise.
Ja lihtsalt olema selge, tagasipöördumine ei ole tingimata vajalik.
Põhimõtteliselt tahan ma seda teha aga ma tahtsin nüüd ei "tagasi;
/ / Nii, et mitte rohkem kood siia hukatakse ".
Nii et taas üks ühine konventsiooni JavaScript,
kuigi sa ei ole tagastamise väärtus per se,
soovid edastada väärtust et callback funktsioon
kuid siis tahad peatab täitmise
funktsiooni oled aastal, triviaalne tee
seda teha on lihtsalt helistada tagasi tulla.
Aga seal on midagi valesti,
me teeme lihtsalt tagasipöördumist callback viga, kuigi see läheb
naasta määramata väärtus.
Olgu, see ei tagastab väärtuse kõige tõenäolisem.
Ma hoolin on minemisel edasise täitmisega.
Niisiis, minu sulatamine nende kaks rida on lihtsalt stilist
Konventsiooni lihtsalt on mitu rida
Koodi Ma kirjutasin 2-1.
Mis siis veel?
Kui seal ei ole viga -
tegelikult peab olema selge Ma võiks ka vältida
et tehes kui mujal.
Kuid jällegi teise ühine paradigma kontroll
oma vigadest üleval ja siis lihtsalt tagasi mitte jätkama
taandama oma koodi elses ja elses ja elses.
Nii et kui see ei ole fail, nüüd sa tead,
Tahan sellega hakkama vähe spetsiaalselt.
Nii et siin nagu Java või C + + või mõne muu keele,
siin on, kuidas saab algväärtustan vastuväiteid tüüpi viga möödaminnes
aastal default sõnum mitte faili
ja see on vaid mõnevõrra meelevaldne.
Aga ma signalisatsiooni viga minu oma.
Ja mida see viimane line arvatavasti tähendama?
Kõik on hästi.
Kui teil liigu null jaoks viga parameeter, mis lihtsalt tähendab
kokkuleppeliselt kõik on hästi.
Niisiis, see tähendab, et see, mida juhtub loogiliselt?
Kui null on möödas et callback
see tähendab, et see anonüümne funktsioon on õnnestunud
nii rääkida.
Niisiis, mida peaks seeria meetod eelneb ja nüüd ei põhine
minu verbaalne definitsioon varem?
[Kuuldamatu Märkus]
Liigu edasi järgmise üks, eks?
Kui ta tagasi tuli mitte-null väärtus, see oleks lihtsalt katkestada
ja enam anonüümne funktsioon oleks saada nn.
Aga kuna see ei ole, siis See saab kutsutud järgmisele.
Niisiis, loogika on siin üsna sama nagu enne
ja me näeme, kuidas puhastada see üles veelgi moment.
Ma saan aru, et see on selline palju
neelavad kõik suuliselt ja visuaalselt.
Aga nüüd teate, teine anonüümne funktsioon, mida tahan
täita järjestikku on proovida lugeda faili.
Kõne see callback kui sa oled valmis.
Kui on viga, lihtsalt signaali, siis teel callback
nii et ülejäänud see kraam katkestab.
Else tagastamise null.
Aga miks ma siis kulgeb kahes argumendid?
Noh seekord, kui ma lugesin fail ja saada tagasi
kui muutuja nimega andmete
Ma tahan mitte ainult tähendama kõik on hästi, tagastades null
esimest argumenti.
Tahan tagasi tegeliku andmed teise väitega.
Sest kui ma loe edasi dokumentatsioonis,
teate selle viimase tüki kood nurksulg tähendab see
lõpuks seerias.
Seal oli ainult kaks anonüümne funktsioone selles seerias.
Kui seal oli viga siin, siis Ma tean, et üks lingid
selles ahelas nii rääkida ei õnnestunud.
Nii teisisõnu, see viga saab olema Error objekt
see on null, kui iga need kutid ei ole.
Ja kui see on nii, ma olen lihtsalt läheb kuivale ja ma lähen
st 400, mis tähendab palve ei toimi,
see on väga üldine veateate.
Ja siis ma lähen välja printida veateate.
Niisiis, ma ei vaevunud super anal seekord
Ma ei kavatse teha vahet vahemikus 500 kuni 404 ja 403,
Ma olen lihtsalt selline pimesi laine minu käsi
ja öelda, midagi läks valesti.
Aga kui midagi ei lähe valesti,
Ma saadan selle res.end läbivad need andmed.
Nüüd tundub see natuke segasena.
Aga jälle, kui ma lugesin dokumentatsioon,
teine ​​argument see viimane, lõplik tagasihelistamist
mees, kes on ainult täide üks rida on tehtud
täidesaatva või osa seal kohta, et see saab olema massiiv
Kõiki teise argumendid
mis võeti vastu et callback.
Nüüd selgub, et vaid viitavad selles seerias
et tegelikult tagasi teine argument on see siin.
Ma lähen sorteerida ning on hüpe usu lihtsalt kasutada Oletagem
hetkeks, et viimane on meetod
mis annab teile viimast massiivi elemente.
Kuna see massiiv mis kuramuse möödas
mulle on kaks indicies, null ja üks.
See on lihtsalt null ei ole väärtust sest see mees tagasi -
ei liigu teine argument, kuid see mees teeb.
Nii toob sulg null ei ole midagi,
Tulemused sulg üks sisaldab mis,
Kui olete jälginud mööda kuni see punkt?
Fail, tere, maailm sisu eeldatavasti
nii see on, kuidas ma tegelikult printida.
Ja las ma lõpetan üks detail siin.
Kui ma selline vana kooli, kui ma tahan saada
viimasel elemente, kui ma saaksin seda tulemust [results.length-1]
mis on omamoodi vana kooli viis
juurdepääsu viimase elemendid aastal - või null indeks array.
Aga nagu küljel meenutavad et ma pidin selle raamatukogu
siin alakriips mis poolt Kokkuleppest just helistas
sõnalt alakriips märk, mis ei ole eriline,
see lihtsalt tundub lahe nagu dollari märk ei jQuery.
See on vaid abiline meetod rõhutada dot last
mis teeb täpselt sama asi.
Ja kui sa ei ole kunagi kasutanud seda enne rõhutavad JS nii
kliendi poolel kodeerimine
ja server pool on imeliselt kasulik raamatukogu
et nii palju inimesi on kirjeldatud see meeldib jQuery sisaldab kõiki
meetoditest, inimesed soovisid tuli JavaScript ise.
OK.
>> Niisiis, nagu päris mulle ja Ma vaatasin sarja,
teil on nagu callback kui argument?
>> Jah.
>> Nagu nii, kui sa tegelikult nagu push et,
ja nagu, mida see tähendab, kui sa lihtsalt
nagu tagasihelistamisse ja tehke nagu -
[Kuuldamatu Märkus]
>> OK, hea küsimus.
Niisiis, lubage mul tõmba async pealehel siin
või dokumendid GetHub.
Seega see on kanooniline struktuuri.
Kui te helistate, kasutades seda konkreetse meetodi seeria
seal on kaks suurt osad ta.
Üks on massiiv Anonüümsete funktsioonide
ja kaks on lõplik callback funktsiooni, mis on tegelikult
täide viia väga lõpuks seerias.
Nüüd, kui me suurendada lähemale esimesel
need suured asjad, array Anonüümsete funktsioonide
poolt nõude käesoleva kuti dokumentatsioon
olla anonüümne funktsioon, mis võtab
üks argument nn callback või suva või baar, see ei ole oluline
aga ta helistab see tagasihelistamise.
Ja see on omamoodi oma summeri et Shake Shack kätt.
See on vahend, mille saate tagasi raha
kliendile, sest sa ei saa lihtsalt sõna otseses mõttes tagasi.
Sa pead tegema seda, mida viis see tagasihelistamise.
Sest kui sees selle funktsioon on mõned aeglane töötab
kood, nagu päringu andmebaasi, loe faili-süsteemi,
sa ei taha oodata seal ja blokeerida kõik teisedki,
soovite helistada tagasikutse.
Niisiis, see on sõna otseses mõttes nimi argument.
Aga meeldib C, siis on funktsioon sellest.
Java teil taustsüsteem meetodid
ja sama siin JavaScript.
See on erinev, kuid selle tüüp on funktsioon.
Nii lihtsalt kirjutada oma nimi kas callback või suva
või baari, siis avatud sulgudes ja lähedal sulgudes
sa sooritamist selle funktsiooni.
Ja ettenägematud null mis tähendab null viga ja üks
mis tähendab, et see on andmed, mida tahan edastada sisse
Ja siis patakas olema selge, see on teine ​​tagasihelistamise.
Ja see ei ole nn callback
see lihtsalt põhimõtteliselt on tagasihelistamise meetod funktsiooni
sest see on nn definitsiooni järgi
Selle autori teegi Kogu seeria on lõpetatud
või alamhulk, kui viga on juhtunud varem.
Niisiis, nimi callback funktsiooni kutsudes tagasikutse funktsiooni,
nimi tagasihelistamise funktsioon, kutsudes tagasikutse funktsiooni,
erinevat callback toimivad kõik koos.
>> Meil ​​on nüüd nagu define tagasihelistamise?
>> Ei, sest see kutt läheb oma valikut
Anonüümsete funktsioonide,
kursor kood ta tahab täita.
Täpselt, eks.
Niisiis, palun öelge, et kood muutub veidi lihtsam.
Niisiis, see on võimalik.
Ja kui sa oled nagu mina, võtma hingata vähemalt teada,
see võtab aega, et harjuda.
Aga me ei saa puhastada see on natukene,
ei visata liiga palju, et sa kuid siin on veel üks muutus
ja mõne muu meetodi
aastal samal raamatukogu nimetatakse juga.
Tagurpidi, mis on erinevalt seeria, kus iga
neist anonüümne funktsioonidele põhiliselt
sõltumatult Iga teised.
Juga nagu nimigi oletada võimaldab ülemiste funktsioonid
et selline liigu väärtused Lisa madalam funktsiooni
Omamoodi nagu kaskaad vett.
Nii pea käesoleva on see, et ma ei sorti
ning kasutada seda oma eelise.
In async.waterfall, märkate järgmist.
Ma ei helista fs.stat kulgeb tee
et ma tahan saada statistikat.
Ja siis pea meeles, enne kui ma oli anonüümne funktsioon
et oli kaks argumenti eksinud,
TULEMUSTE ja siis ma helistasin tagasikutse funktsiooni käsitsi?
Teisisõnu on lihtsalt olla selge, meenutada, et varasemate
aastal async 2, tegin kõik see vastik töö.
Ma helistasin fs.stat möödus P,
tunnistada oma anonüümne funktsioon.
Ma siis kontrollida, kas viga on mitte null, siis ma tegin seda,
muidu ma seda tegin, kogu Ilu järgmiste konventsioonide
nagu node.js, et callback funktsioonid üldiselt on mõeldud
võtta vähemalt üks argument, Error objekt, millele järgneb null
või rohkem kasulikku väärtusi.
Nii märkate paradigma siin
see tagasikutse funktsiooni ma kuulutatakse järgmiselt täpselt
paradigma, mis selle mehe async raamatukogu teeb.
Mis tähendab seda, miks on hea I rakendamisel oma tagasihelistamise
meetod, kui autor seda raamatukogu on sõna otseses mõttes võõrandada mind
vaagnal niiöelda callback funktsioon, mida kasutada?
Niisiis, ma ei saa lihtsalt liigu viide ta on andnud mulle
nii et kohe, minu mitu rida
Koodi saab üks rida koodi.
Nüüd, kus me minna seda?
Järgmine funktsioon, mis Tahan teostada,
Järgmise anonüümne funktsiooni selles massiivi
funktsioone ei järgmine.
Teate esimene stat on Esimene argument.
Seega midagi on muutunud juba.
Nüüd on see mees, kes kirjutas raamatukogu -
ja ma ütlen guy sest ta on mees.
See mees, kes kirjutas selle raamatukogu Kas dokumendid garantiid
et kui see funktsioon siin läbib mind tagasi Error objekt
või null järgneb kooma eraldatud nimekiri muid väärtusi,
ta tagab, et need muud väärtused on käega
Selle anonüümne funktsioon et vasakult paremale.
Ja mida varem lihtsalt callback funktsioon üksi lihtsalt
muutub viimane selline argument.
Nüüd ma ei tea, kes ma olen keskendudes lihtsalt tead.
Aga nüüd, mis on ära võtta siin?
Niisiis, me teame dokumentatsiooni
või enne paar näidet
et fs.stat lõpuks loodab tagasihelistamise kaks argumenti,
Error objekt, mis on Error objekt või null järgneb
viitega statistika vastu.
Nii et kui ma mõtlen, et Error objekt kooma statistika vastu,
mis sobib paradigma Selle isiku raamatukogu.
Niisiis, ma ei saa lihtsalt öelda, sest Ma ei ole teine ​​argument
et see on - mis toimub läbiminekuks fs.stat
et callback on eksinud, statistika määratluse kohaselt on selle raamatukogu
Ma ei pane teine argument nime siin
või mida ma ei nimeta see
kui ma tahan järgida poolt tagasihelistamise siin.
Niisiis, ma ei liigu üks Väärtustame siit siiani.
Nüüd on kõik see kood küll küll mõnevõrra segasena on
vähemalt koopia pasta Enamasti varem.
Ainus erinevus on see teave siin ma kuulutatakse viga
vastuväiteid ja nüüd ma tahan saada veidi Kasvataja.
Ma tegelikult tahan teada, mis viga oli, et ma lähen
parkima sees Selle objekti vara meelevaldselt nimetatakse kood
nii et ma tean, et see ei ole faili
mis peaks olema lubamatu, see on HTTP 403.
Lubage mul meenutada, et enne Annan Error objekt
et callback.
Ja siis lõpuks proovige lugeda faili, nii et sel juhul
juga, ma olen katki kood kaks suurt sammu
kolmeks sammhaaval.
Märka ilu siin
Ma ei helista fs.readFile kulgeb tee.
Ja siis raske osa vaimselt, on mul lihtsalt edasi
kuti tagasikutse.
Asi ta jagab mulle, ma olen läheb läheb fs.readFile.
Sest me kõik küljes Lisa sama konventsioonide
Esimene argument, et callback on Error objekt või null järgneb
poolt kooma või eraldatud nimekirja kasulikke asju.
Niisiis, mida see tähendab, et nüüd ja siis, kui ma dokumentatsiooni lugeda ma tean
Selle kõige viimane tagasihelistamist see kutt väljas
on nurksulgudes läheb tuleb sooritanud Error objekt
või null, mida ma peaks kontrollima Nagu alati seda koodi siin.
Ja siis definitsiooni järgi Selle meetodi
kuti dokumentatsioon, viimase raha tagasi
viimase meetodi minu anonüümne array -
minu rida anonüümseid funktsioone.
Nii, mis ei loe faili tagasipöördumist
ja ma kasutan tagasi lõdvalt nüüd.
Ma mõtlen, mida ei loe file pass argumentidena
et tagasihelistamise meetod oma kätega?
Kaks argumenti, esiteks on Error objekt või null,
See on peaaegu alati saab olema vastus.
Ja teine ​​asi läheb olla see, lugemis faili?
Faili sisu, andmed, nagu me seda nimetas varem.
Niisiis, lihtsalt kuulutatakse err, tulemuseks
ja kontrollige viga selles on omamoodi igav nüüd.
Else, ma res.end möödaminnes, et tulemus.
See on kahtlemata sünkrooni suurepäraselt
kuni te tegelikult kirjuta ise.
Aga nüüd, võtma kaugusel vähemalt asjaolu
mis on ilmselt seda ühine paradigma, mille kohaselt juhul, kui me
ja autorid raamatukogud kõik omamoodi kepp
konventsiooniga tagasihelistamise meetodeid.
Ja esimene argument on Error objekt või null.
Ja teise ja kolmanda
ja neljas objektid on asju me hoolime ja me sort
ning järgima reegleid ja dokumentatsiooni.
Alustasime kood, mis ausalt on päris kole.
Ja kuigi viimase Näiteks on ausalt selline raske
wrap meelt ümber, see on vähemalt visuaalselt,
tundub, et see on palju rangem.
Ja kui sa saad mugav koos, see on nii palju lihtsam
ja see on nii palju vähem altid vigu kui eelmises näites.
Niisiis, lubage mul näidata Üks viimane asi siin.
See on versioon kolm.
Ja - Ei, jätame ta üksi.
Lubage mul minna paar Muud viimase asju nagu õrritused.
Olgu, nii et server 2.
OK. Esiteks küsimusi, Tean, et see on palju
kuid sa tahtsid rohkem juhiseid, nii?
Sa ei öelnud, et hea juhendamine tingimata.
Jah?
[Kuuldamatu Märkus]
Õige, sa oled põhiliselt leebe operatsioonisüsteemi
nuputada, kuidas pettus kõik need pallid korraga
lugemine failist lugemine andmebaasi.
Ja see on see JavaScript server ise, et see on ühe keermestatud.
Ja sisuliselt ja tegelikult,
seal on üks pilt Ma ei oksenda,
ja see ei ole tingimata kõik mis valgustav
aga võib-olla me anname sa vaimne mudel.
JavaScript ise ja sõlm
eriti on see nn sündmus loop.
Kusjuures, võite mõelda kohta node.js programm,
on sõna otseses mõttes nagu lõputu silmuse.
See on lihtsalt metsik loop, oodates ja ootab ja ootab,
otsin ülesandeid täita.
Ja ülesanne võiks minna tõmbad midagi andmebaas
Või siin on väärtus andmebaasi või mine saada seda faili
kettalt või siin küsib kasutaja.
Mingit juhul nagu brauserid sündmustepõhine,
nii server Lisaüritus sõida.
Ja kõik need asjad moodustavad üritusi.
Nii keegi node.js, lihtsalt kirjutas lõputu silmuse,
suur metsik loop, oodates kraami juhtub.
Ja kui asjad ei juhtu, jõuab järjekord, eks?
Kindlasti andmebaas võib naasta väärtus.
Ja failisüsteemi, operatsioonisüsteemi süsteem võib naasta väärtus
umbes sama aeg aga seal on ilmselt läheb
olla mõned tellimine neile.
Ja node.js läheb sisuliselt järjekorras
nagu suur massiiv või vektor, mõned andmestruktuur
mis puhverdab kogu nendest asjadest.
Sest see võib sõna otseses mõttes ainult käepide üks neist korraga.
Seega, kui sa, arendaja,
kirjalikult asünkroonne JavaScript koodi kasutades asünkroonne
funktsioon, et sa seda võimaldav niinimetatud sündmus loop minna
Järgmise linnuke, eks?
Nii kaua, kui sa kohe tagasi, sest kõik
Nende asünkroonne meetodite tegema nagu lugeda faili ja stat
nad kohe tagasi sest tagasihelistamise lõpuks
saab tagasi.
Niipea kui sa tagasi,
see tähendab, et keegi teine ​​ei saa saada hüppasid maha stock siin
või et ta ei saa hüppasid välja ees järjekorda siin.
Ja nii on ka Tegelikult serialiseerimine
kõik, mis juhtub,
kuigi kõik need asjad saab toimub paralleelselt
on multithreaded süsteemi.
Aga node.js ise ja server jooksid
kui üks niit.
Ja alla poole, mis on Kas teile ei pruugi max
läbi arvuti võime on eriti
kui sul on 16 core või isegi 2 core arvuti
ja sa oled lihtsalt töötab üks eksemplar sõlme.
Aga kui sa oled jälle võtta midagi 161,
teil vältida suuri õudusunenägu peavalu, kui tegemist on
rassi tingimused ja lukud ja semafor
kirjutamisel ja tõeliselt multithreaded koodi,
nii tasa ja varjuküljed.
OK. Niisiis, tagasi kood siia andke mulle ettepaneku, et hakkame
lihtsustada asju natuke.
Nägime server üks natuke tagasi mis nägi välja selline.
Nii, see on väidetavalt üsna lihtne.
Aga nagu maailmas PHP on raamistikud
nagu Laravel ja seal asjad Rails ja Django,
sama asi node.js maailmas.
Ja me kulutame rohkem aega selle kolmapäeval
ja järgmine projekt.
Aga kui ma minema server 2 kataloogi,
märgata paar paradigmad siin.
Nii et see on - ei kavatse olla samaväärne näiteks
kuid see kasutab raames kutsutakse express.js,
mis on tasuta avatud lähtekoodiga tarkvara nagu Rails ja Django,
nagu Laravel, mis on lihtsalt lõpuks läheb
olla alahinnatud täna Sest me oleme kirjutanud
sellised lihtsad näited.
Aga meid usaldada.
See väga kiiresti saada oma sõber
sest see säästab sa palju TDS kood.
Ja ühine paradigma express.js rakendus
on app.js või server.js fail, mis sisaldab loogika
oma programmi või vähemalt sisenemispunkti.
Sul võib olla ka mitu faili.
Sõlme moodul alamkataloog mis on raamatukogudes
et olete alla nagu async
ja väljendada end teistega.
Ja siis package.json, package.json näeb välja selline,
ja saate luua käsitsi või vahendite loomiseks teile
ja see on sõna otseses mõttes Jon fail
ja huvitav osa on sõltuvused siin.
Täpselt nagu Laravel, siis olnud, et müüja kataloog
ja siis tuli muretseda umbes paketid ja teed -
tegelikult ajakohastamine koos Artisan või sarnaseid käske,
raamatukogud te on paigaldatud,
sarnaselt package.json siin ja teil õnnestub raamatukogud
ja versioonid et sa hoolid.
Niisiis, kui ma pean package.json, Ma lihtsalt teha NPM,
Sõlme Package Seimi paigaldada, see läheb automaatselt otsima
sel package.json faili.
Vaata ja vaata, kas ma on viimane versioon
kõik müüjad moodulid
aastal sõlme rõhutada moodulid Kataloog siin või ehk
mõnel vanemal või esivanem kataloog.
Ja kui ei ole, siis on lähed alla laadida
ja näed terve hulk
HTTP kraam läheb üle traadi.
Nii näiteks, las ma näitab teile sisu
sõlme moodulite lihtsalt väljendada.
Lubage mul minna ja julgelt kustutada sõlme moodulite
nii et kõik, mis mul praegu on see.
Ja kui ma NPM installida, siis saad näha, et see läheb lugenud
et package.json fail ja oleme näinud väljund sarnane
Käesoleva aasta Laravel maailmas.
See allalaadimine kogu hunnik asju ja see on
sest selgesõnalise omakorda sõltub terve hunnik
teiste rahvaste raamatukogud.
Niisiis, kõik need on omamoodi laetakse rekursiivselt.
Seni, kui ma teen LS jälle
seal on mu sõlme moodulite Kataloog tagasi
ja väljendada nagu tagasi.
Nii et see on lihtsalt viis lihtsustamise pakett juhtimine.
Nüüd, kui me vaatame app.js faili, see läheb
olema tagasipöördumine varem meie veebiserver
kus me lihtsalt sülitada out "hello, world".
Aga teate paradigmad siin
kõigepealt nõuame Express moodul, siis meil on see rida
koodi, mis sa tead, dokumentatsioonist.
Sa sõna otseses mõttes käsitada neid Mooduli muutuja funktsiooni
nii avatud sulgudes lähedal sulgudes tähendab käivitada.
See saab ilmselt tagasi midagi, mida me ei kavatse
Üldiselt nõuavad app.
Kuidas see töötab?
Ma tõesti ei tea.
Ma lasen kellelgi teisel, tead, otsestes maailmas kirjutan.
Ma lähen nüüd seista tema õlgadele nii
teha oma taotluse töötab veidi lihtsam.
Siin, ma lähen, et kuulata selle konkreetse sadama
mis võiks olla kõige midagi.
Ja siin on kood, mis on võibolla rohkem meenutab nüüd
kohta Laravel ja routes.php.
Nii et see on supper lihtne, ma olen lihtsalt läheb täpsustage marsruut
jaoks kaldkriipsuga täht, nii et kõik läheb imenduda
selle päringu menetleja.
Paradigma päringu menetleja on selle anonüümne funktsioon
palvega argument
ja vastus objekt just nagu enne.
Ja res.send ekspressi vahendid saadate kood, millele
ükskõik mis, mida soovite saata.
Ja loomulikult saate midagi Kasvataja
poolt tegelikult saates faili või HTML
dünaamiliselt loodud sisu.
Aga nüüd, kõik tegime aastal sülitama hello, world.
Kui me minna server kolm, see on isegi Kasvataja lihtsalt
näidata teile mõningaid funktsioone.
Ja me näitame teile, isegi seksikam versioon
Selle kolmapäeval.
Aga kui sa oled kunagi kuulnud Socket IO olla,
nii nagu ma arvan, Jonathan või keegi varem ütles,
üks neist asjadest, sõlm on tõesti tuntud
on selle reaalajas käitumine, eks?
Mõtle PHP MySQL, kui te peavad rakendama chat server
PHP, millega kaks inimest saanud avamiseks brauseriakna foo.com
ja seejärel alustada IMing iga muu, Alice ühes aknas
Bob teises et igaüks neist näeb oma
või tema sõnumeid muud aknas.
Kuidas te seda teha PHP ja MySQL?
Kasutamise või mittekasutamise Laravel sort on ebaoluline, siis võib olla
nagu index.php fail.
Ja sul on - in Mõnel juhul see sai sülitada
välja kujul, mistõttu ei saab olema HTML vorm
et tõenäoliselt esitab ei via tavaline vormi esitamise
kuid Ajax arvatavasti, eks?
Niisiis, on esitada käitleja, nii tipite tekstiväljale
sa Enter ja siis ta saab saadetakse serveri kaudu Ajax.
Mida sa siis teha server?
Niisiis, sul index.php
või midagi dot PHP, mis on saadud HTTP parameeter
kasutaja, Alice või Bob instant sõnum, mida te teete,
seda selleks, et propageerida seda Bob või Alice võrra?
Ma mõtlen siis sõna otseses mõttes on olemas vahendid, millega
seda teha teie min.
Nii nagu mida sa teeksid?
Teil on üks minut Käesoleva programmi rakendamise.
Jah?
[Kuuldamatu Märkus]
Perfect. Just nii, sul on andmebaas.
Me teame vähe natuke MySQL.
Nii, teil on tabel see sõnumite
äkki seal korda tempel, kasutaja ID,
sõnumi kehaosas ise loonud, et
ajakohastada, et ja kõik see.
Nii, teil salvestada andmebaasi.
Ja oletame, et Alice saadab esimene sõnum, kuidas Bob saada
et sõnum nüüd andmebaasist?
>> See võib olla mõned Ajax vastus, mis on pidevalt läheb
tagasi andmebaasi top saada [kuuldamatu].
>> Täpselt.
Nii Bob koodi kes koodi sama Alice on justkui
sümmeetriline suhe,
Bob brauser on mõned Ajax kood see ilmselt olla iga 30
sekundit tõmmates server kaudu Ajax sünkroniseerimine
kas on uusi sõnumeid?
Kas on uusi sõnumeid?
Iga 30 sekundit läheb olla lahke suboptimaalsele
sest ta peab ootama isegi
kui Alice sõnalt just saatis sõnumi.
Niisiis, Bob sirvija iga teine ​​tabas server.
Aga see tähendab, et Alice'i brauseri tabab server
iga teine.
Aga Charlie [Eeldada õigekirja]
ja David [eeldada õigekirja] ja Edward [eeldada õigekirja]
ja iga teise kirja tähestiku?
Milles probleem Selle lähenemise?
Palju tabamust liigne -
Ma mõtlen et sa oled lihtsalt tõhusalt Doseerimine oma nägemise
või DDOSing, Distributed Teenuste keelamise rünnak
oma saidil, lastes kõik
Nende kasutajate JavaScripti käitada kood, mis on lihtsalt pingi
kuradit välja oma server isegi kui suvalise arvu,
80 protsenti ajast keegi ei ole midagi öelnud
jututuba.
Aga sa lihtsalt kontrollida veenduda sellise.
Nii PHP palju keeles ei ole lihtsalt hea
reaalajas side.
Sest PHP tagasikutsumine seal puudub keskne mälu, eks?
Sul istungil objektid mis loob illusiooni
Kesk ladustamiseks, kuid see on kasutajate kaupa.
Sul ei ole globaalset mälu nagu te teete Java Servlet
tuttaval või teistes raam toimib niimoodi.
Node.js küll, sa ei pea maailma mälu, sest teil on
üks server ja see on võimalik mäletan, mida tahab
umbes logima.
Ja võite veel on andmebaas.
Aga kena asi node.js Ka see, et see on palju parem
kui midagi PHP ja luua illusiooni
juhtida mitut asja korraga.
Ja tegelikult, nagu kõrvale, saate rakendada chat serverite PHP,
aga sa tavaliselt teha midagi, mida nimetatakse pika küsitlused
kusjuures sa ei ping server iga teine.
Sa ping server, server ei reageeri te
jaoks ülespoole 30 sekundit, siis sõna otseses mõttes istub
tsüklina ootab ja ootab.
Ja server kontrollib, kas seal on uus andmebaasis
ja alles siis, kui te ei näe, "Oh, siin on sõnum Bob "
see vastata HTP server?
Nii mõju brauseris on see, et IE ikoon või Mozilla
või mis iganes muudkui ketramine 30 sekundit aega.
Aga pea on, sa ei tea on 30 ühenduse taotlusi
30 sekundi jooksul, teil on üks.
Nii see on, mida nimetatakse pika küsitlused.
Aga isegi parem tänapäeva web brauserid on midagi, mida nimetatakse
WebSocket, mis võtate CS143,
saate tõhusalt teha TCP ühendus kliente
nagu brauseri server ja seejärel riputada see
ilma ligi kui palju ressursse
HTTP võib traditsiooniliselt tegema.
Ja Socket IO on node.js raamatukogu
mis muudab palju lihtsam teevad pesa ühendused
või illusioonid seal at vanemate brauseritega
nii et saate rakendada seda reaalajas funktsionaalsus on.
Nii, siin on näide.
See kraam üleval muutub veidi keerulisem
aga see on enamasti kopeeri ja kleebi alates socket.io dokumentatsioon.
Siin on nüüd rohkem täpne päringu menetleja.
Kui kasutaja nõudmisel kärpida, mida faili ma lähen
olla ilmselt teenida kuni neid?
Index.html.
Ja seal on mõned uued kraami voog
kus ma näitan sulle vaid hetk.
Aga see on lihtsalt üks viis
haarata fail veidi tõhusamalt
kui lihtsalt teeme fs.readFile.
See on natuke targemaks eriti suuri faile.
Nii pikk lugu lühike, need read lihtsalt teenida
üles fail nimega index.html
mis nüüd eeldada, sisaldab HTML-vormi, mille Alice
ja Bob võib omavahel ühendatud.
Lõpuks io.sockets.on, nii et see pärineb see joon siin.
Niisiis, ma lihtsalt loen dokumentatsioon io.socket annab mulle
juurdepääsu niinimetatud WebSocket brauserit,
vahel brauseri ja server.
Ma kuulan erilist Kui ühendus, mis vahendid
kui kasutaja tabab server üritab
avada sellega seoses, ma olen kutsun seda tagasi helistada.
Ja nüüd, ma lähen teha järgmist.
Iga viie sekundi tagant mida ma teen?
Ma lähen välja paisata või eetrisse kui sa mäletad nullist,
graafiline keeles oleks et saade plokid?
Niisiis, sa lähed, et paisata
või vallandada üritus nimega omavoliliselt server.
Ja see läheb sisaldavad sõnum Ping
ning kuupäev.
Niisiis, see on tegelik chat server, et Alice
ja Bob saab kasutada, kuid see on omamoodi automatiseeritud chat server
kus sõnumid on justkui sonar pingi.
See on lihtsalt kuupäev aegadel, mis on saadetakse iga viie sekundi tagant.
Niisiis, kui ma tegelikult teha selle asi - ja see on kõik.
Et asi oleks selge siin, teate See on lihtsalt logib siia.
Niisiis, lubage mul pöörduda silma, et.
Las ma teen sõlme app.js.
Las ma lähen oma brauserit.
Värskenda kodulehekülg siin.
[Paus]
Ja las ma sulgeda inspektor.
Iga viie sekundi tagant, on mul demonstratsioon, kuigi mitte
interaktiivne inimese
midagi, mis on toimub asünkroonselt.
Brauseri teade, pole ketramine ikoonil.
Seda kasutades Kasvataja funktsioon Chrome kaasaegsete brauseritega
säilitada pesa ühendus all kapuuts
ja see on, mida nimetatakse tavaliselt pub / sub mudel,
avaldab / tellida mudel, kus me ei ole teinud
et päris selgelt siin.
Aga mis on tore see Üldiselt pub / sub paradigma
et teil on üks kirjastaja.
Sel juhul keskne server ja kõik
Üksikute brauserid klientidele.
Alices ja Bobs kohta maailm ei saa tellida,
nii saab relee sõnumeid vahel mõni hulk kasutajaid.
Ja kuigi taas me oleme ei näe interaktiivsust,
meil oli äkki 12 rida koodi lihtsalt seda teha.
Ja see ilmselt ei ole hüpe ette kujutada, kuidas sa võiksid piits
välja index.html fail mis on tõsi HTML kujul,
natuke jQuery koodi Ajax et ei saada päevasel
vaid lihtsalt saadab iganes Alice või Bob tüüpi server
ja siis server relee välja.
Ja ma luban, et pilguheit üks viimane asi, lihtsalt
õrritama teid.
Kui me minna oja nulli ja ühe,
näete kood, mis on lihtsalt natuke erinev siin.
Lihtsalt, et sa oled seda näinud, see on alternatiivne
mida ma helistasin fs.readFile meetod varem, kusjuures,
võite öelda node.js "Mine loe seda faili mällu.
Aga kui see on suur anna mulle tüki korraga. "
Ja te võite teada, CS165
või 161 failisüsteemid on erinevad
tööomadusi.
Võiksid lugeda plokkidena 512 baiti
või 2 kilobaiti või mis iganes.
See on optimeerida viis saada tagasi Faili korduvalt
nii et saate sülitage välja vähe kiiremini
brauser või kes lõpuks klient.
Nii suur hulk sisu täna ja me lähme sukelduma
üksikasjalikumalt kolmapäeval Tim [eeldada õigekirja]
eriti vaadates, kuidas me tõlkida mõningaid ideid
alates esimesel poolel Muidugi Laravel ja mudelid
arvesse raamatukogu, et ta ise kirjutas nimega Bookshelf.js
mis on muutunud järjest populaarne kogukond
sest see annab sulle kõige paremini see,
kui mitte rohkem kui funktsionaalsust väljendusrikas
mis meenutavad, et raamatukogu ülevaate Laravel,
nii rohkem, et rohkem kui
arendada küps apps kolmapäeval.
Me näed siis.