>> Rendben.
Tehát a Cliffhanger volt, mi node.js mint te is tudod ma?
Valami? Igen?
>> Olyan volt, mint a keretében írásban JavaScript
alkalmazások széles körben -
>> OK, ami működik.
>> - Tudom, mint közös célokra, mint a -
vagy valami, amit tehetünk, mint a -
[Hallható Megjegyzés]
>> OK jó.
Igen, ez a keret.
Ez a motor, amellyel végre tud hajtani JavaScript kódot
szerver oldalon.
Ez azt jelenti, a legegyszerűbb dolgok
mint az írás egy parancssori script nem Python vagy Bash
vagy a Ruby vagy PHP, de csak JavaScript önmagában
és futtatása egy villogó parancssorból.
Vagy akkor futtathatod belül a webszerver.
És valóban a node.js is,
ez a keret egy csomó A könyvtárak között, amelyek
A HTTP szerver beépített.
Szóval, akkor valójában írni szerveren mint látni fogjuk
csak egy pillanatra, szuper könnyen mellett csak a megértés egy kicsit
A HTTP és TCP és kikötők.
És akkor kapsz egy hallgató web szerver nélkül Apache,
anélkül, hogy a Microsoft IIS.
Nélkül más szoftver telepítve,
akkor csak kapsz ezt és hallgatni a legtöbb olyan port
a rendszerben, hogy a te szabad.
Így eset és a pontok, hadd menjen, és nyissa meg
ezt a példát, szerver-0.js.
Így észre, hogy a tetején ezt a fájlt, csak egy csomó
érdektelen megjegyzéseket, és akkor ott van egy pár
reprezentatív sornyi kódot , hogy majd meglátjuk, visszatérően.
Tehát, var HTTP kap szükség "HTTP".
Tehát beépített a node.js " infrastruktúra egy csomó
A modulok, amelyek valójában csak könyvtárak és minden sort
A név tér az egyedi azonosító
mint ez a "HTTP".
Annak érdekében, hogy, mint a sok nyelvek, mint a Java és a C + +
és a C, csak akkor, ha importálni vagy közé
vagy csomópont beszél szükség a modul teszi a bit.
És a memória van szükség, hogy a betöltött
a RAM-ba, és így használják.
Szóval, valami betölteni ezt könyvtárak vagy modulokat igény.
Ez azt jelenti, megy előre, és szükség
a program A HTTP könyvtár,
, és arra utalnak, hogy a könyvtár módon változó nevű HTTP.
De ez a bal oldali szimbólum lehetett hívták semmit, ize,
bár, BAZ, nem számít.
Tehát, ellentétben a C + + és Java, valamint C, ahol, ha szükséges
vagy importál egy könyvtárat, ez csak egyfajta
Az lesz globálisan elérhető,
node.js modulok szorosabban névtér.
Annak érdekében, hogy a saját - ezt a funkcionalitást csak elérhető az adott pillanatban
útján ez a változó nevét.
Nem lehet csak elindítani tipizálási módszerek léteznek
benne helyes módon ami talán jó,
mert akkor a névtér nem kap majdnem olyan zsúfolt
mint a sok nyelven.
Rendben, most, mint a közös javaslom, ami egy HTTP szerver
Jonathan [feltételezett helyesírás] lehetséges volt a szó szoros értelmében
olyan egyszerű, mint felhívni a létre szerver módszer belsejében
A HTTP-modult.
Szóval, ez visszatér A referencia-
valamilyen web szerver.
Jött az Apache, nem feltétlenül nehéz súly.
Ez az ember egy kicsit egyszerűbb.
És most, hogy csak egyszerűen csak egy pár dolgot.
Tehát először is, hadd lépjünk aljára itt
és hagyja ki a kezelő módszer egy pillanatra.
És észre ezt a kódsort,
server.on amely lényegében azt jelenti, server -
hallgat, mint a jQuery kódot,
hallgatni egy eseményt úgynevezett kérésre
és csak egy becslés Mit tegyek
Ha egy kérés esemény tüzek a szerver.
Igen?
>> A funkciót kezelőt.
Így, szó szerint hajtsa végre a kód, ami hivatkozott
ez a változó, és valójában nem változó szimbólum itt,
mi ez a szimbólum utalva?
Nos, ez a neve funkció itt
és a kezelő látszólag úgy két érv.
Miért kettő? Nos, ha csak olvasd el a dokumentációt nem
ehhez a modult, akkor fogják mondani, hogy a felvezető
hogy hivatkozni fog telt el legalább két érv,
hivatkozni kell a kérelmet,
és azon belül a kérésre szó szerint azt jelenti HTTP kérés.
Tehát mindazok a HTTP fejléc hogy lehet felidézni
elejétől a félév vagy egy korábbi osztály
vagy tapasztalat, mint a kap vonal és a fogadó vonal
és a User-Agent vonal, minden, hogy a van ágyazva, és több belső
A kérelem objektumot.
És a válasz objektum sorrendje kimenő adatokat.
Szóval, van egy hivatkozás egy tárgy, ami megy, teszi
hogy adjon tájékoztatást vissza a böngésző hívja módszerekkel
Ez utóbbi érv hívott Res a választ.
De ez nevezhetnénk foo vagy bár ez csak egyezmények.
Tehát most, mit tegyek?
Nos, úgy tűnik, hogy a belső ez szuper egyszerű webszerver
, hogy én vagyok a végrehajtási vagyok majd tegye a következőket.
Fogok írni egy HTTP fejlécet status kód: 200,
200 értelme OK, minden rendben van.
Aztán megyek átadni látszólag.
Mi a adattípusa a második érv, hogy jobb fej?
>> Ez egy tárgyat?
>> Ez egy objektumot hány kulcsokat és értékeket?
Csak egy a minden, igaz, az egyik legfontosabb érték a pár.
Tehát, "a tartalom típusa".
És az egyetlen ok, Idézem itt van
mert a kötőjel lehet összetévesztette a mínusz jel
vagy valami ilyesmi.
Szóval, van idézni itt, Egyetlen vagy dupla idézőjelek közé.
De megint közös paradigma
A JavaScript kód gyakran aposztrófot ezekben a napokban,
vastagbél, majd az értéket.
Szóval, ez csak a az úgynevezett elme típusát.
Ez egy HTTP header ez szó szerint folyik
a tartalom kötőjel típusú vastagbél text slash Világos, hogy folyik
kell küldeni a szerver a böngésző
úgy, hogy a böngésző tudja e futtatni ezt Formázatlan
vagy a HTML vagy egy kép vagy film
vagy egy Flash-fájlt, vagy bármi más.
Nos, hol is valójában akar küldeni a szervezetben az oldal?
Nos, csak az olvasó dokumentáció
A válasz objektum belsejében ezt a könyvtárat.
Látom, hogy van egy jobb módszer, és hogy egy karakterláncot,
Talán más dolgokat, de minimálisan egy string.
És a szöveg az, ami kiköp a böngésző.
Ebben az esetben a szuper egyszerű, a hello world,
de lehet opne konzol, html, záró zárójel,
nyitó zárójel fej, szoros konzol és így tovább,
ez lehet nyers html.
De mi tartja a példa egyszerű, mindössze köpködni
ki a legegyszerűbb elme típusok amely vitathatatlanul text / plain.
És akkor Response.End csak azt a kapcsolatot
és küldje el mindent amim van egyfajta pufferelt belül
az objektum vissza a böngésző.
Befejeztem. Rendben van.
Így, az utolsó dolog, Csinálok itt
és ez kissé önkényes, és azt jelentette, hogy hűvös,
A Mondom a server végre hallgatni
egy bizonyos TCP az alapértelmezett port.
Emlékezzünk elejétől osztály, hogy a szolgáltatások -
vagy általában egyedi azonosítja azt a számok,
AD a web, a 443-as HTTP alapú weboldalak, 22 SSH, 21 FTP
és a 1337 csak önkényes de ez magasabb, mint 1024
ami azt jelenti, a legtöbb rendszerek, tudom használni
anélkül super felhasználói jogosultságokat.
Tehát csak kényelmes.
De 8080-ben ki - a közös Egy, 8088, de tényleg semmit nagy
a több ezer közös de ez csak több elit.
Rendben, akkor mi történik amikor valóban futni ez?
Nos, én nem csak látogat Az oldal a böngészőben.
A fájl neve server-0.js.
Mert megint Apache most ki a kép
az utóbbi fél a kurzus.
Ha azt akarom, hogy web server, azt kell írni
majd futtassa ezt a webszervert.
De kiderül, hogy a JavaScript mind a kliens oldalon
és a szerver oldali egy értelmezett nyelv.
Szóval, minden, amire szükségem van tolmács.
Tehát ez - ha ragaszkodnak futtatni node majd szerver 0.js,
Én lehet, hogy nem látja valamilyen kimenetet függően
, amit a könyvtárak Én már bele, semmi sem történik.
De hadd menjek a a böngésző, és hadd menjen
hogy ugyanazt az IP címet az én CS50 ügyfelek.
De ez csak valamint, hogy a Mac-emet
vagy a PC, majd nyomd meg az Entert.
Ez valóban úgy néz ki, mint az Apache.
Ez olyan, mint a könyvtár lista néztünk
az első felében.
Szóval, mit csináltam rosszul?
Igen.
[Hallható Megjegyzés]
Pontosan, igaz?
Tehát, Apache még mindig figyel az alapértelmezett 80-as port.
Annak ellenére, hogy tudtam változtatni, Tudtam kikapcsolni össze az egészet
de ez még mindig fut.
De ezek a srácok természetesen egymás mellett.
Én egyszerűen csak meg kell tenni vastagbél 1337 és akkor talán
vagy talán nem slash at A végén eléréséhez a port
hogy ezen a szerveren fut.
És most látom, hogy hello, világ visszatért.
És én is hit reload, mint ahányszor csak akarok,
ez még mindig szolgál egy oldalt.
Sőt, ha én nyit a Chrome ellenőr, Hálózati
majd töltse be újra az egész oldalt,
észre, hogy valóban ez volt a kéréssel, hogy küldték.
Ha nézem a Raw forrás,
észre a böngésző elküldi az összes ilyen dolgot.
És akkor a válasz a szerver szuper volt egyszerű.
Ott van a 200-at.
Ha ez nem túl alacsony- a képernyőn,
ott van a tartalom típusát.
És akkor node.js a fajta automatikus
nekem hozzá a dátum és az az összes többi cucc
hogy a böngészők általában elvárják.
Nos, nézzük meg a kis józanság csekket.
Hadd menjek vissza, hogy a kód szerver-0.js, és hadd -
minden alkalommal, amikor bemegy A kezelő,
hadd mondjam console.log.
(Volt egy látogató! ').
Nem kell újrafordítani vagy ilyesmi,
ez egy értelmezett nyelv.
Tehát most, hadd menjek vissza Az oldal, újra egy, kettő,
háromszor, és menj vissza az ablakon.
És most látom ezt.
Hát ez furcsa, Látom, hat sorban.
Érdekes web trivia, miért Kapok hat kérést nem három?
Igen?
[Hallható Megjegyzés]
Igen. Szóval, ahogy tudod, a kicsit hülye ikonra a felső
a böngésző sáv, hogy sok
weboldalak használt hatalom egy Harvard címer,
lehet, hogy a cég logóját , vagy ilyesmi.
Tehát, böngészők ezekben a napokban sort
A elbizakodottságból hogy egy További HTTP kérés
szinte minden honlap, meglátogatja ellenőrzése, ha van
alapértelmezés szerint a fájl úgynevezett favicon.ico
ugyanabban a könyvtárban, mint A fájl, amit kért.
És ha igen, ez hozza Az ikon ott.
Tehát minden, amit látunk pontosan ezt.
És valóban, nézzük meg, ha látható, ez inkább fajta
ki csak, "Mi volt a látogató.
Hadd menjek előre, és kimenetet.
És én csak azt tudom, ezt a nézte a dokumentációt.
Van egy ingatlan belsejében kérésére objektum neve URL
amely történetesen az út
hogy a kért az aktuális URL.
Tehát, ha újraindítom a szervert egyszerűen újra lefolytatja csomópont
szerver-0.js és most már ez az egy, kettő,
három és menj vissza.
Ott van.
Slash, amit - az emberi kért
A favicon.ico is mi a böngésző
elbizakodottan kérő.
De a lényeg nem annyira favicon cuccot
de hogy a szerver működik.
Igen?
>> Miért, amelyek hogy valamilyen kérést?
>> Miért van ennek - a természet, hogyan HTTP működik.
Tehát, HTTP csak kérheti egy fájlt egy időben.
Böngészők lehet okos ezekben a napokban
és tartsa a TCP kapcsolat nyitva.
Ha volt CS143 vagy általánosan ismeri a hálózati,
így kap hatékonyság
tartása a hálózat Hüvely nyitott
abban, hogy több HTTP kéri sorozatosan rajta
de ők egy fájlt egy kérés.
Tehát, ha ellátogat valami hasonló -
Úgy értem, lehet menni a legtöbb olyan weboldalak.
Ha megy, hogy - hadd húzza fel A Chrome ellenőr itt.
Lehet, hogy töltse ki a legtöbb az oldal.
Menj a Network fülre és menj www.cnn.com.
És amikor meglátogatja cnn.com, a honlapján -
a böngésző, hanem atrociously teszi - még mindig számít.
OK. Legalább 289 HTTP kéri, újra és újra.
És ez az, amiért, amikor meglátogatja különösen dagadt honlapok,
ők lassan betölteni mert az összes
az eszközök ők betöltése.
Tehát úgy néz ki, mint a 298.
Előfordulhat, hogy bizonyos Ajax folyik ezen a ponton vagy valamilyen
Az eszközök csak alacsony.
Tehát, minden egyes ilyen egy egyéni kérelemre megy vissza
oda, oda-vissza.
És ez az, amiért a korábbi, még ellenére, hogy a fajta beszélgettünk
róla kissé fancifully ahová a script tag,
feltétlenül tesz különbség, ha van -
kezdődött, hogy egy csomó A forgalom és a sok
fájlok kérik.
És minden egyes ez jelent talán egy kép, egy médiafájl,
A JavaScript fájlt, CSS fájl vagy hasonlók.
Tehát te már akár mintegy 4 megabyte csak
hogy nézd meg a mai híreket.
Jó kérdés.
Rendben van.
Szóval, mi van néhány A upsides mégis?
Igen, tudjuk, hogyan kell weboldalak már a PHP.
És sokan jöttek be az osztály tudva Django
és a Python vagy a sínek Ruby.
Akkor, miért van szükségünk még egy nyelv és az infrastruktúra?
Mi node.js különösen jó, ha tudod?
[Szünet]
Néhány dolog?
Nem? Igen?
>> Átmosó üzeneteket.
>> Tehát, továbbítása üzeneteket.
Szóval ez igaz, és ez igaz a több technikai ok
és hogy a node.js és tényleg JavaScript különösen
jól illeszkedik az aszinkron kódot,
ha amelynek létrehozása Az illúzió
csinál több dolgot egyszerre.
Így, bár ők tényleg megtörténik sorba,
sőt a legtöbb esetben, JavaScript kliens oldali
és a szerver oldali egy menetes.
Amely, ha szedi 161 vagy akár 61 azt jelenti, hogy -
A program tudja,
A tolmács szó csak egy dolgot egyszerre.
De ez nem nagy olyasmi, mint egy web szerver
ahol lehet, hogy több tucat, vagy több száz vagy akár több ezer
A felhasználó összes próbál eléréséhez a weboldal
a nagyon egyben.
És mégis, hogy azt sugallják, hogy a kezelésük egy
a másik után, miután a más, különösen, ha néhány
azok kérésére mint láttuk A CNN szükség lehet szolgálja
akár 300 kép előtt is kap, hogy a következő felhasználó
aki azt akarja, hogy az mondja híreket.
Node.js jobban megfelel környezetekhez, mint ezt.
Mert mi történik, olyan lassú futás folyamat
mint például egy fájlt a lemezről vagy adatbázis-lekérdezések, vagy beszél
egy másik hálózati szerver,
amely hajlamos, hogy késleltetést, igaz?
Ha nem vesz 61 vagy 161 különösen az összes efféle
perifériás szolgáltatások általában sokkal lassabb
nem csinál semmit belsejében ugyanazt a RAM és a CPU ugyanazt
azt mondják, hogy ebben az esetben a szerver ténylegesen fut.
De mi a jó a node.js, hogy lehet -
és JavaScript általában az, hogy meg tudod csinálni valamit
majd azt mondják: "Hmm, ez megy
hogy vigyen néhány milliszekundum vagy akár csak néhány másodperc.
Hadd fajta villa, hogy ki, " de ez nem egy igazi folyamatot.
Aztán, ha kész csinál hogy a lassú futás folyamata
mint a rángatás sorok egy adatbázis vagy olvasni egy fájlt. html
lemezről, hogy lesz kap vissza hozzám, hanem
, mint én, hogy várni rá.
Tehát, hogy ez még világos.
Ez az én eszköze hogy ez ismerős.
Rendben, tehát ez a Shake Shack a téren.
Ez egyfajta közös paradigma
magyarázó asynchronicity.
Ez tulajdonképpen egy jó például azért, mert Shake Shack
és ízletes Burger figyelemre méltóan lassú, amit csinálnak.
De a lényeg az, hogy már nagyon jó rendelésfelvétel
és figyelembe a pénzt, miután amit várni az ételt.
Szóval, ez valójában egy jobb design, mint a másik.
Mert tegyük fel, bemész egy boltban, mint ez, és van
az első a sorban, és helyezett el annak érdekében, és azt szeretné,
a burger, amennyire tudok mondja, még legalább öt
vagy több percet is igénybe tényleg kap egy hamburgert.
Szóval, lenne kedves egy rossz üzleti modell
ha közben várja a Burger, Alice [feltételezett helyesírás]
és Bob [feltételezett helyesírás] és Charlie [feltételezett helyesírás]
és mindenki más sorban mögött
és akkor szó szerint blokkolja a vonal várja az ételt.
Tehát nyilvánvaló, hogy a Shake Shack
és más gyorsétterem helyeken, ne csináld ezt,
ők valami ilyesmit.
Adnak neked egy hangjelzés.
És egyfajta küldje utadon.
És hívnak vissza hogy ez a kis dolog rezeg
vagy a flash, hogy a figyelmet.
Szóval ez a szó, amit?
Olyasmi, mint node.js csinál.
Ha node.js vagy a JavaScript általánosabban használják
és a programozó elég okos ahhoz,
megvalósítani, "Tudod mit?
Bármit is kell tennie a jobb Itt is eltarthat bizonyos számú
A milliszekundum vagy másodperc.
Tudod mit?
Hadd menjek előre, és nem hívják szinkron -
"Ez a fickó blokkoló mindenki más a sorban, "-
hadd menjen előre, és fajta félreáll
és egyszerűen hívja magam vissza
amikor a hosszú futás művelet befejeződött. "
És hívja vissza természetesen van utalva, ebben az esetben
a callback függvény, a hivatkozás egy Chuck kód
hogy lesz végre amikor a burger készen áll,
ugyanúgy, mint ez a dolog egy kis fajta funkcionalitás beépített
hogy kezd rezgő vagy nyüzsgő, amikor itt az ideje,
hogy hívják vissza az első a sorban.
Szóval, mit jelent ez a jelent a gyakorlatban?
Nos, meg kell a munka az utat felfelé.
Szóval, hadd menjek előre és nem ez az első.
A szerver 1.js, hadd első egyszerűsíti a kódot
így tudjuk, hogy a baba lépéseket a vonzóbb probléma.
Ez pontosan ugyanaz a program, amit írtam korábban.
De mi változott?
Van egyfajta enyhe szintaktikai különbség
között, illetve 0 verzió egy perce.
Mi ugrik ki ha emlékszel?
Igen Cynthia [feltételezhető helyesírás]?
[Hallható Megjegyzés]
Igen. Tehát most, hogy van egy vonal funkció továbbadása be
Már ütött megszabadulni a sort
A feleslegesen neve függvény.
Haszontalan csak abban, hogy mielőtt még nevezni egy helyen,
Én nem igazán kell, hogy vesztegeti az idejét, így ez a név
, és így nehezebb olvasd el a kódot, fentről lefelé.
Nos, nézzük csak kijelentem inline egy névtelen függvény.
És én csinálok két dolgot.
Én, hogy jobb használata dot jelöléssel.
Szóval, mint a jQuery, sok csomópont módszereket lehet láncolva együtt.
Tehát, hogy ha egyszer kész hívás valamit, akkor nem kell
várni, hogy egy új sor és a hívás egy másik módszer,
akkor csak a lánc őket.
És így, tudjuk Tényleg húzza ezt fel.
Szóval, ez a szó szoros értelmében web server öt sorban
A kód teljes ellentétben -
ellentétben lehet, hogy általában meg kell tennie, hogy hozzanak valamit.
Ha elmegyek a szerverbe 2. Most csináljuk.
A server 2 - valójában nézzük jött vissza, hogy a Server 2.
Nézzük most nyit aszinkron-0.js és foglalkozzon a problémára.
Tehát először menjünk előre, és nyitott
up aszinkron-0.js a böngészőben.
Tehát aszinkron-0, hadd menjen vissza a böngésző.
Hit reload.
És most, hogy ez a fajta A hibaüzenet.
Valóban látok a 500 A Chrome a felügyelő.
De hadd pontosabban kérjen hello.txt.
OK. Szóval, ez úgy tűnik, működik.
Tehát aszinkron-0.js úgy tűnik, nem szolgálja ki valamit perjel.
Ez nem az alapértelmezett fájlok támogatása.
De ha kifejezetten kérheti hello.txt,
úgy tűnik, hogy támogatni.
Miért van ez?
Nos, amit én ment itt
és kész valósul egy szuper egyszerű webszerver
amely mutatja, hogy hol asynchronicity hasznos lehet.
És ez végre a következők szerint.
Először is, én vagyok a HTTP-modul ismét
hanem az FS amely Valószínűleg jelentése?
Általában a CS, fájlrendszer.
OK fájlrendszer.
Ezért oda FS, fájlrendszer.
Rendben, akkor mi ez ad nekem?
Funkcionalitás kapcsolatos fájlokat, mint a szerzés telt el,
fájlok megnyitása, írás könyvtárak, olvasás könyvtárak
és minden ilyesmi.
Tehát most veszi észre, ezt a kódot ugyanaz, mint korábban,
létre a szerver, átadva anonim funkciót.
Ez a fajta önkényes.
Ez nem egy nagyon biztonságos webszervert.
Sőt, akkor is elérheti a legtöbb olyan fájlt a merevlemezre
vagy a szerver kemény meghajtó végrehajtása ezt a kódot
mert én vagyok csak vakon feltételezve, hogy megyek
megragad, amit a felhasználó kért URL.
És fogok előtag azt dot
úgy, hogy én vagyok mértékben hogy biztonságos
azzal bármilyen fájlt tudnak kérelmet a legalább kezdetén
az aktuális könyvtárban.
Természetesen van egy veszély van.
Mert, ha helyette többek között mi?
Az útjukba, nem tudnak olyan A megkerüli ezt is.
Pont, pont, nem igaz?
Tehát, ha a felhasználó csak tesz pontot, dot az URL, elméletileg
tudtak kezdeni, hogy én - és azt mondják jelszó fájl.
Szóval, ez nem azt jelenti, biztosítani kell,
ez azt jelentette, hogy egyszerű.
Tehát itt van egy változó, amely a láncolata dot
amely jelen könyvtár és a kérelem URL
amit korábban láttunk IS mint a slash vagy / hello.txt.
Tehát most, akkor kap egy kicsit érdekes.
Először észre az alján.
Hallgatom a ugyanarra a portra, mint korábban.
Tehát a valódi érdekes munka belsejében van.
Minden alkalommal, amikor a kérelem jön a természet
ezt a kódot, mit csinálok?
Hívom fájl rendszer Read metódussal,
halad az út hogy szeretnék olvasni.
És most, hogy ez ami itt még érdekesebb,
ez a végrehajtás aszinkron módszer.
Ha nem kap a visszatérés érték olvasható fájl.
Valójában értesítés van nem bal oldali kifejezés
balra olvasási fájlt.
Ez nem ad vissza értéket.
Inkább arra kéri a visszahívás funkció, amikor készen áll
hogy vissza választ.
Tehát még egyszer, hogy világos, míg a tavalyi,
sok programozási nyelveket, ha akart
olvasni egy fájlt eset pontban PHP,
fájl aláhúzás kap aláhúzás tartalmak,
van egy bal oldali kifejezés minden érték után -
mielőtt az egyenlőségjel, azt jelenti, hogy te kiosztása
az, hogy a változó a visszatérés értékét a funkciót.
Meg tudod csinálni, hogy node.js, de általában
hívni kifejezetten szinkron változata funkciókat, mint például,
Azt hiszem, ez olvasható szinkron fájl vagy szinkron olvasni fájlt.
Elfelejtettem, hogyan nevezték el.
És, hogy adna akkor a visszatérési érték.
De ha ez a fájl a néhány távoli fájlrendszer
vagy a lemez csak természetesen lassú, akkor lehetne 10 ms
vagy 2 másodperc, hogy a fájl hogy valóban jöjjön vissza.
Eközben más web látogatók szervizben
az Ön websit.
Te blokkoló.
Ez az, amit a neve blokkoló IO, input / output.
Tehát itt, ez sokkal okosabb.
Mert mi node.js folyik
a mit tolmácsolás a következő,
meg fog hívni az olvasási metódussal,
próbálja meg egyet a fájl ki van utat által meghatározott értékkel P.
És ha és amikor ez kész , hogy vissza a tartalmát
a fájl a P, akkor hívja egy függvény, amelynek aláírás
megállapodás szerint a következő.
Két érvet, az első amely talán egy hiba tárgyat,
tőke-E, ez egy tárgy úgynevezett hiba vagy Null
ha nincs ilyen hiba.
És a második érv -, hogy a becslés - lesz mit?
Úgy hívják az adatok nyilván, de Mi a Data konkrétabban?
>> Tartalma?
>> Tartalma hello.txt A példában húztam
fel a böngészőben egy perce.
Más szóval, hogy olvassa el a fájl és sok node.js funkció
mint a nem térnek vissza értéket.
Úgy hívják visszahívások, és adja át
azoknak visszahívások mi lenne már hagyományosan a
vissza értéket.
A fejjel ez a megközelítés
amit nevezhetünk olvasd el a fájl a T0.
A visszahívás funkció hatalom nem nevezhető egy kullancs később
hogy úgy mondjam a T, akkor lehetne nevezni T1000,
ezer kullancsok később.
De a lényeg az, hogy a többi kód ebben a fájlban,
ha lenne, azonnal végre kell hajtani, míg node.js
és miközben a fájlrendszer kitalálja, hogyan kell olvasni
a fájlt, és kap vissza hozzád.
Így létre ezt -
olyan hatékonyan az illúzió
párhuzamosság közben bérlet lassabban futó folyamatok nem
blokkolja a fontos dolgokat, az a része, hogy a szerviz számára.
Szóval, hogyan kezeljük ezt?
Ez egy nagyon gyakori node.js paradigma.
És ez így igazságos, hogy egyszerűsítse ezt fogjuk látni, mielőtt végig.
Először ellenőrizni kell, ha A hiba nem null.
Tehát, ha ez nem hamis Aztán ott volt a hiba.
Nem tudom, mi ez, Lehet, hogy a fájl nem létezik.
Nem volt engedélyekkel.
Az elérési út rossz.
Tetszőleges számú dolog lehet baj.
Most fogok önkényesen vissza a 500
amely a belső szerver hiba.
Valami nem stimmel.
Nem igazán érdekel ennek megállapítására.
Nos, nézzük csak mondd a felhasználó számára, hogy eltört.
Aztán megyek tenni res.end,
és ez a rövidített írásmódot.
Emlékezzünk vissza, hogy az utolsó alkalommal csináltam res.write
majd én res.end.
Ha csak szeretné küld egy sor teljesítmény,
tudod csak csinálni egyszerre A res.end egy érv,
és hogy fog küldeni bármilyen hibaüzenet
belsejében az objektum a böngésző.
Ez elég ív emlékszem egy perce.
Fogalmam sincs mi ez jelentette az első pillantásra.
De amikor azt kérte a fájl nem létezik -
hoppá, meg kell futtatni a szerver újra.
Amikor kértem egy fájlt hogy nem létezik, EISDIR,
így valami hogy azt könyvtár,
ha némi random karakterlánc ott,
nyilvánvalóan azt jelenti, hogy a fájl nem is létezik.
És ez azért van, mert a kód egyszerűen azt mondja, hogy írjon
ki, amit a nyers Hibaüzenet van,
így nem túl felhasználóbarát de legalább én kezelem.
Különben, ha ez nem hiba, mit csinálok?
Ugyanaz, mint korábban nyárson ki a 200 OK, egy sima -
text / plain elme típusát és majd köpje ki az adatokat.
És ez az, amiért kapok a tartalma hello.txt amely éppen
megerősíteni, ha néztem A hello.txt,
ez szó szerint csak Helló, világ.
És ha megváltoztatta ezt hello, világ, mentse a fájlt,
futtassa újra a szerver, töltse újra a lapot.
Most értem azt a verziót.
Szóval, én már tényleg csak újraírásra a webszerver
ahogy létezett sok évben, de a node.js.
De meg tudjuk csinálni ezt még tisztábban.
Hadd nyit aszinkron-1.js.
Most veszi észre, én hozzá egy másik modul ebben az időben,
Úgy látszik, az útvonal modul.
Nos, ez egy jó lehetőséget, hogy
, amit a dokumentáció néz ki.
Node.js a dokumentációt.
Mint a PHP szerintem tényleg nagyon jó
és egyenesen előre.
Ha elmegyek node.js és a Google és keressük node.js utat,
mit fog látni általában közvetlen link URL
hogy tettem ide egy perce.
Tehát / api a hivatalos hely, megy a dokumentációt.
És mit fog látni a tetején
A csomópont hivatalos dokumentációja mind a módszerek és
vagy tulajdonságai belsejében az adott modul
amelyek közül az egyik az úgynevezett csatlakozni.
És csatlakozz a segítő funkció hogy fog, hogy engedje meg
, hogy ne zavarja a az összes pluses.
És ez a hozzáadott bónuszt látni fogod
A dokkok ez is normalizálja a kapott utat.
Tehát, ha a felhasználó vagy ha pont vagy képpontos pöttyökkel, vagy bármilyen kombinációban
Az ilyen jellegű relatív utak, többek között a upsides
A módszer lényege, hogy csatlakozott ez lesz tiszta minden, hogy akár
és kapsz egy kanonikus elérési út nélkül
azon pontok vagy képpontos pöttyökkel.
Szóval, ez egy jó dolog, általános biztonsági legalább
ha ellenőrzi a vissza értéket nem vagyok
ebben a konkrét esetben az egyszerű.
De én akarom használni.
Szóval, most létre az utat, a kicsit programból
A path.join helyett Nyers összefűzés.
Szóval, ez egy kicsit tisztább, mint korábban.
És most észre, én vagyok, hogy egy kicsit intelligensebb, hanem
mint vakon próbálja olvasni a fájlt,
Megyek, hogy ténylegesen hívja fs.stat.
Tehát, ha ismeri
az alacsony szintű C funkciók és C, még a PHP.
Sok könyvtárak Ez a funkció stat vissza
lényegében statisztikák egy fájlt, a fájl mérete,
a jogosultságokat, a név és hasonló dolgok,
és implicit ha a fájl létezik-e vagy sem,
és ha ez a fájl vagy könyvtár
vagy szimbolikus link vagy valami más.
Tehát most veszi észre, én vagyok hívás fs.stat.
És akkor látszólag szerint A dokumentáció,
Vissza kell mennem hiba objektum
vagy Null követte egy statisztikai objektumot.
De nézzük ezt, node.js.fs.
Itt a fájl rendszer dokumentációját.
Hadd nézzem meg a statisztika.
Van egy sokkal funkciók itt.
Hoppá, hogy a stat szinkron, fs.stat.
Tehát itt, ez aszinkron statisztika (2).
Ez azt jelenti, ha emlékszem, a fő oldal,
2. fejezete a főoldalon,
azt jelenti, hogy ez a szó csak egy csomópont megvalósítása
Az alacsony szintű rendszer működését stat.
Tehát, a visszahívás kap két érveket, hiba-és stat
ahol a stat egy fs.stats objektum.
Tehát lássuk, mi ez a tárgy kellene kinéznie.
Nézzük a hivatkozásra kattintva és látom, hogy.
A statisztika objektum Úgy látszik, néhány segítő módszer,
A fájl, könyvtár, az egy csomó más dolog.
Ez az "A" fájlt, hogy érdekel körülbelül ebben a konkrét esetben.
Tehát itt megyek.
Ha volt egy hiba, akkor hadd kisegíteni ezúttal
és feltételezik.
Ha van egy hiba volt, Valószínűleg a 404-es fájl nem található.
Lehet, hogy valami más
de most, hogy egy kicsit lusta itt, csak összpontosítani
az érdekesebb részleteket.
De a felhasználó célokra, a fájl nem található,
ha volt ilyen hiba amely a fájlt.
Egyébként, hadd ellenőrizze, hogy a fájl valóban egy létező fájl.
Tehát, ha ez nem fájl létezik.
Van ott valami, de ez valószínűleg egy könyvtárba
vagy talán egy szimbolikus hivatkozás
vagy valami más, ami funky a fájlrendszeren.
Akárhogy is, a felhasználó nem látom.
Tehát most, én csak fog köpni
ki hagyományos jogosulatlan 403.
De megint csak egy egyezményt,
Én is használtam valami mást elméletben.
És akkor végül, hadd próbálja olvasni a fájlt.
Nos, hadd lépjünk le.
És most észre, ez az, ahol a kód egy kicsit rendetlen,
észre, hogy hívom fs.readFile múló
ugyanazon az útvonalon, ugyanabban a visszahívási mint legutóbb,
így a korábbi verziót.
És akkor, ha én meg -
ha nem találom meg, Én kiköp a 500-at.
És ha én meg azt, hogy mi sorban fogunk itt látni?
Meg fogjuk látni a fs levelet header 200 valószínűleg
és a res.end elküldése a tényleges adatok.
De észre.
És ez nem demonstratív A legrosszabb forgatókönyv.
De van ennek a stat hívás itt, mint én néhány dolgot.
Aztán van egy másik aszinkron hívás van,
így több behúzás.
Szóval, csak egyfajta extrapolálni ha lehetne innen.
Mi a probléma általában felmerülő A nyelv, mint a JavaScript
ebben a környezetben, ahol a nincs visszatérési értékek
hanem van ezeket a visszahívások.
És persze, ez csak a stilisztikai dolog az a tény,
hogy én is beljebb.
De hogy ez a következő logikus lépés.
Tegyük fel, hogy volt egy- két vagy három más funkciókat
hogy kellett végrehajtani, hogy az voltak, a természet aszinkron,
és ezért csak ilyen folyamatosan beljebb kell kezelni őket,
kezelni őket, hogy kezelni őket.
Kapsz valami visszahívás pokol, ahogy az emberek nevezik
ahol a kód kezdődik hogy nagyon széles
és őszintén szólva nagyon nehéz olvasni.
Mivel, nem tudok valami alig mondani, hogy ez a fajta áramlás
hogy van ez a fajta
A stilisztikailag ferde dolog folyik itt.
Tehát, ez nem ideális, mert ez nagyon hamar
ormótlan, bár két aszinkron hívások nem
olyan nagy dolog.
Így tudtuk elkerülni ezt, ugye?
Lehet, hogy megpillantotta, hogy az Én misclicked egy perce.
A dokumentációban, tudod, úgy néz ki, van statSync.
És statSync nem veszi visszahívási érvként.
Mindössze az utat, mert ez látszólag mit csinál?
Visszatér egy példányát A fs.stats.
Szóval ez lehet a első ösztöne, nem igaz?
Különösen, ha callback függvények
és asynchronicity egy kevés új neked, őszintén szólva,
A legegyszerűbb megközelítés valószínűleg csak elkerülni a probléma minden
együtt, menj vissza rendezni A CS101 stílus programozási
ahol a hívás funkció vagy módszer, a visszatérési érték,
hívás funkció visszatér az érték,
függvény visszatérési értéke.
És tudtam használni, ezért fs.statSync
, amely szó szerint ugyanaz de ez a szinkron verzió
ami azt jelenti, hogy visszatér az értéket.
Ez nem felel meg a értéket a visszahívás.
De miért lenne ez valószínűleg a optimális megoldás igénybe
szinkron funkciók?
Igen?
[Hallható Megjegyzés]
Pontosan, ez hosszú időt vesz igénybe.
Te csak lassul le mindent.
Mivel ugyanúgy, mint a Shake Shack vagy ízletes Burger, ha megszabadultak
azoknak a csipogók és tette meg, az ügyfél az első állni
sor, amíg az étel kész mielőtt még figyelembe a rend
a személy mögött akkor nyilvánvalóan
helyezze át lelassul.
Az emberek kezdenek hagyva, Ön a fajta rajzol csomagokat.
Tudod, hogy minden számot analógiák itt.
De Röviden, ez valószínűleg nem egy jó dolog
üzleti vagy a szerver.
Tehát aszinkron kód általában jó legalább
ebben az esetben, de ez biztosan kezd okozhat némi szorongás.
És valóban merem mondani, ha először írom ezt a cuccot,
hogy lesz egy kis kicsit megszokni.
Nos, kezdjük felszerelni Önnek néhány könyvtárak
és technikákat, hogy ez egy kicsit könnyebb.
Tehát, az egyik leggyakoribb könyvtárak népszerű könyvtárak
Ezek a napok, ez a egy úgynevezett async.js.
És mint sok node.js könyvtárak vagy modulok,
ezek mind nyílt forráskódú.
Ezek szinte az összes élő és kap hub tárolók ami elég
Az lett a de facto helyen kell tárolni ezeket a dolgokat.
És akkor ott van a teljes infrastruktúra
telepítéséhez ezeket a dolgokat úgynevezett NPM, Node Package Manager
amely, ha ismeri A EvanTube kedves
hasonló app, vagy app kap.
Ha még nem ismeri A Red Hat és Fedora
mint az a készülék, ez olyan, mint yum.
De ez egy csomópont - ez a csomagkezelő csak
ehhez adott környezetben.
Szóval, mi is töltse le és telepítse dolgok, mint az aszinkron könyvtár
és egy másik néven a aláhúzás könyvtár vagy a modul.
De ezek amennyire fs, HTTP, útvonal,
ezek mind jönnek épített csomópont.
Tehát, ha megyünk az API docs, akkor valóban látni, hogy épül
a node kapsz ingyen egy csomó modulokat.
De a sok szép ember az internet már több tucat
ha nem több száz más könyvtárak
hogy a dolgok jobban vagy másképp.
Nos, vessünk egy pillantást hogy ez a könyvtár működik.
Nos, a legtöbb ez a kód azonos a pillanatban.
Van egy utat, hogy ig létrehozott tetején.
És most én hívom async.series.
Tehát az aszinkron könyvtár, ez csak egy könyvtár, amely lehetővé teszi,
átadni vagy emelés tipikusan funkciók, hogy hívják az egyik
a másik után, csak, hogy milyen elkerülhető, hogy a behúzás kérdés,
és tényleg csak a szellemi szorongás, amely mindig felmerülő
legalábbis amikor először merülni az, hogy ezt a saját
programozási aszinkron.
Mint félre, ha volna 161. és akkor már foglalkozott zárak
és felhívják a feltételeket, és minden az, hogy aszinkron kód
és olyan környezetben, mint node.js valójában sokkal,
sokkal egyszerűbb vitathatatlanul
mint a ténylegesen írásban többszálú kódot.
Bármikor van többszálú kódot,
megvan emelés feltételeket.
Önnek nem kell aggódnia két szál, amely
az ugyanazon erőforrásokért lemez vagy a memória.
A szépség a JavaScript
A node.js is van szó szerint csak egy szál,
ami azt jelenti, a böngésző
vagy a szerver csak egy dolgot egyszerre.
Csak rajtad múlik, a programozó
tartani a mentális modell hogyan fajta sorba a dolgokat
, és kitalálni, hogyan el, hogy a kódot.
De soha nem kell aggódnia a fel feltételek
egészen azonos módon a legalábbis a nyers kódot, mint ez.
Szóval, ez egy kicsit Nehéz grack itt.
De - Hadd nyit A docs egy pillanatra.
A async.js könyvtár, amely hasonlóan nagyon googleable,
él a GitHub repot mint sok közülük.
Nem hiszem, hogy ez vázlatos, ez nem az.
Hadd lépjünk le A Read Me itt.
Tehát a async könyvtár ad egy csomó
módszerek belsejébe.
Például ott van A módszer az úgynevezett minden,
amely, ha rákattintok ez csak hogy lássa a docs egy pillanatra,
ez egy olyan funkció vagy módszer , amely lehetővé teszi, hogy tegyen valamit
mint a négy-négy hanem párhuzamosan.
Ők minden fog történni potenciálisan párhuzamosan.
És a módszer csak az egyes fog visszatérni, ha az összes
Az ismétlések teljes.
Így talán történnek az egyik a másik után.
Ideális esetben, akkor megtörténhet lényegében párhuzamosan.
De a módszer nem visszahívlak.
Ez nem zúg a Csengő, amíg az összes
Az elem van megismételte több mint befejezték.
Szóval, ez csak egy jó módja annak
hogy elkerüljék a egy egyszerű, négy hurok
de valójában csinál valami aszinkron.
De most közvetlenebbül Az ehhez a példában
észre, itt van ez a sorozat módszer.
És hadd húzza ki a egyszerű kanonikus példa.
Tehát az aszinkron könyvtárak, sorozat a módszer a lehető hallgatólagos
A szögletes zárójelek tömbben.
Milyen adatok típusú elemek
ebben az array alapú egy egyszerű példát?
Ez egy sor funkciót.
Így a C, akkor hívja ellátásában mutatók.
A JavaScript, több megfelelő hivatkozások funkciók
vagy névtelen funkciókat.
És ez csak azt jelenti, tömbök
Természetesen sorrendben nullától akár.
Így, az általuk fenntartott megrendelést, ami jó
egy sor, mert sorozat természetesen azt jelenti, valami
annak érdekében, hogy ne párhuzamosan.
Szóval, ez csak azt jelenti, hogy ez a funkció lesz végrehajtva,
akkor ez egy, akkor ez a egy, ez egy, akkor ez az egyik,
de sok van
míg végül az opcionális callback.
Tehát észre a paradigma itt.
És még akkor is, ha ez az egyik fickó könyvtár,
ez képviselője nagyon gyakori JavaScript paradigma
Az újra a visszahívások.
Tehát, figyeld meg, mit csinálsz itt.
Az első funkció, hogy telt ezen keresztül tömb,
definiált egy névtelen funkció csak funkcióval.
De észre, hogy úgy tűnik, szerint a dokumentációban,
hogy a névtelen függvény hogy egy érv visszahívás.
Ez lesz a mutató vagy utalás arra a funkcióra,
hogy meg kell hívni, ha a kód készen áll, hogy visszatérjen egy értéket.
Tehát még egyszer, ellentétben csak jellemzően procedurális
ahol van szokva, hogy visszatérő értékek azonnal
hogy az egyik eltérés az egy könyvtár ilyen
aszinkron programozási több általában az, ha készen áll
vissza egy értéket adatbázis, fájlból,
egy számtani kifejezés, ez rajtad múlik
hogy hívja a callback függvény.
És a szép dolog erről a könyvtár
ha azt olvassuk a docs az, hogy alaposabban,
akkor és csak akkor, ha az összes A visszahívások nevezett területre
nélkül hiba tárgyat, majd az egészet sikerül?
Tehát más szavakkal, 2, ha vannak,
ha van 10 Névtelen funkciók
ebben a tömbben, ezért ebben a sorozatban,
ha mindet sikerül,
majd a végső opcionális callback sikeresnek tekinthető?
Ha valaki ezek nem minden funkció
után nem fog még akkor is végre kell hajtani.
Szóval, ez egy jó módja a sort , amelyek a lánc
hogy megszakítja idő előtt ha valami balul sül el.
Tehát, hogy ez összefüggésben van az, hogyan lehet újra végrehajtani
hogy az előzőt.
Kapok az utat, mint korábban, így ez a könnyebbik része.
Én másolni be ezt a csontváz kódot
A dokumentáció is async.series nyitott zárójel,
szögletes nyitó zárójel.
És most észre, van egy funkciója ebben az elején
a második, majd meglátjuk hová megyünk e.
És most veszi észre, hogy ez a kicsit bonyolult első
de a legfontosabb most a hogy soronként.
Fs.stat azt jelenti, hogy a statisztikai adatok vagy mi nem ezt az utat.
Hívjon visszahívás, ha készen áll.
Ez a kód ugyanaz, mint korábban.
Ha van egy hiba, van egy különbség van.
Ismét, a nagyon gyakori paradigma A node.js programozás
ha valami elromlik, és visszahívási tudnia kell
hogy a megállapodás szerint az első érv visszahívási megy
hogy nem, ha minden rendben van, vagy a hivatkozás egy hiba tárgyat,
tőke E. Ez olyan, mint egy hiba osztály, hogy létezik a világon
hanem inkább az, hogy egy másik alkalommal.
Tehát ezt, ha van egy hiba, mi a következménye?
Nos, az alapján, amit én mondta a sorozat nem,
, ha bármi rossz, csak olyan akar
megszakításához az egész sorozat A névtelen függvény hívások.
Így elegendő számomra, hogy csak vissza callback múló
Az Error objektum.
Mert ha stat adott vissza egy hiba,
Én is hozzon létre egy új Error objektum a saját,
de nem igazán érdekel, hogy,
Csak azt akarom, hogy adja át, amit a hiba, hogy ténylegesen meg is történik
így adja át ehhez a visszahívás.
És csak hogy világos legyen, a visszatérés nem feltétlenül szükséges.
Én alapvetően akarom ezt de azt akartam, most már "vissza;
/ / Úgy, hogy nincs több, kódot itt végrehajtja ".
Tehát ismét egy másik gyakori egyezmény JavaScript,
még akkor is ha nem vissza értéket önmagában,
szeretnénk átadni az értéket A callback függvény
de akkor szeretnénk megállítani végrehajtás
A funkció akkor ben, a triviális módon
Ehhez csak hívja vissza itt.
De nincs semmi baj,
mi csak ezzel visszatér visszahívás hiba még akkor is ez megy
vissza a meghatározatlan értéket.
Rendben, ez nem visszatérési értéke a legvalószínűbb.
Csak az érdekel egy beszállás további végrehajtására.
Szóval, a összemosása ezeknek két sor csak egy stylist
az egyezmény csak annyi vonal
kódot írtam 2-1.
Szóval, mi más?
Ha nincs hiba -
ténylegesen egyértelmű Én is elkerülhető
hogy ezzel, ha más.
De ismétlem, a másik közös paradigma ellenőrzés
a hibákat, tetején, majd csak vissza, nem pedig továbbra is
behúzni meg a kódot másnak és másnak és másnak.
Tehát, ha ez nem fájlt, most már tudod,
Azt akarom, hogy kezelni ezt a egy kicsit különleges.
Tehát itt, mint a Java vagy a C + + vagy néhány más nyelven,
itt van, hogyan lehet példányosítani egy kifogást típusú hiba múló
az alapértelmezett üzenet A nem fájl
és ez még csak kissé önkényes.
De én jelző hiba a saját.
És mit jelent ez az utolsó vonal feltehetően jelent?
Minden rendben van.
Ha át null a hibaparaméter, ez csak azt jelenti,
megállapodás szerint minden rendben van.
Tehát ez azt jelenti, hogy mi fog történni logikusan?
Ha a null át A visszahívás
azt jelenti, hogy a névtelen funkció sikerült
hogy úgy mondjam.
Szóval, mi kell a sorozat módszer megelőzi és most alapú
én verbális definíció korábban?
[Hallható Megjegyzés]
Lépjen tovább a következő, nem igaz?
Ha visszatért a non-null érték, akkor csak megszakítja
és nem több névtelen függvényt kapnánk hívott.
De mivel nem, akkor Ez lesz az úgynevezett jövő.
Tehát, a logika itt nagyjából ugyanaz, mint korábban
és majd meglátjuk, hogyan kell tisztítani ezt fel is egy pillanat alatt.
Tisztában vagyok azzal, hogy ez a fajta sokkal
hogy felszívja az összes szóban és vizuálisan.
De most észre, a második névtelen függvényt, amit szeretnék
végrehajtani a sorozat hogy megpróbálja olvasni a fájlt.
Hívjon visszahívás ha készen állsz.
Ha van egy hiba, csak jel útján a visszahívás
úgy, hogy a többi ez a cucc megszakítja.
Else return null.
De miért vagyok én halad Két érv?
Nos, ebben az időben, ha olvasok a fájlt, és vissza
a változó nevű adat,
Azt szeretné, hogy ne csak a jelent minden rendben van visszaküldésével null
Az első érv.
Szeretnék visszatérni a tényleges adatok a második argumentum.
Mert ha olvastam tovább a dokumentációban,
észre, az utolsó darab a kód szögletes zárójel azt jelenti, hogy ez a
a sorozat végén.
Már csak két névtelen funkciók ebben a sorozatban.
Ha volt egy hiba itt, akkor Tudom, hogy az egyik kapcsolat
ebben a láncban, így beszélni nem sikerült.
Más szóval, ez a hiba lesz Hibát tárgy
vagyis null ha ezek a srácok nem sikerült.
És ha ez a helyzet, én csak fogja kisegíteni, és megyek
mondani, 400 amely azt jelenti, hogy kérésre nem,
Ez nagyon általános hibaüzenet jelenik meg.
Aztán megyek nyomtassa ki a hibaüzenetet.
Szóval, én nem törődve azzal, hogy szuper anális ebben az időben,
Én nem fogok különbséget tenni 500 és 404 és 403,
Én csak egyfajta vakon hullám kezem
és azt mondják, valami elromlott.
De ha semmi nem baj,
Fogom küldeni ezt res.end halad az adatokat.
Most ez úgy néz ki, egy kicsit rejtélyes.
De újra, ha elolvastam a dokumentációban,
A második érv, hogy Ebben az utolsó, a végső visszahívás,
A fickó, csak végre egyszer történik a sorozat
végrehajtó vagy egy része ott az, ez lesz egy tömb
minden a második érvek
hogy sor került a visszahívás.
Most kiderül, hogy a egyetlen kapcsolat ebben a sorozatban
hogy valóban visszatér a második érv ez itt.
Így fogok rendezni az egy ugrás a hit egyszerűen használja tegyük
a pillanatban, hogy az utolsó egy olyan módszer
hogy megadja neked az utolsó elemeit egy tömbben.
Mivel ez a tömb ez továbbadása
Nekem két Indexek, nulla és egy.
Ez csak nulla nincs értéke mert ez a fickó visszatér -
nem felel meg a második érv, de ez a fickó csinál.
Így az eredmények konzol nulla semmi,
eredmények konzol egy tartalmaz, amit,
Ha már a következő végig eddig a pontig?
A fájl, a hello, világ tartalmat feltehetően,
Szóval így én valóban nyomtassa ki.
És hadd fejezzem Egy részlet itt.
Ha én ezt a fajta régi iskola, ha azt akarjuk, hogy
az utolsó elem, ha tehetném do eredmények [results.length-1],
ez a fajta, a old school módon
elérésének az utolsó elem in - vagy nulla index tömb.
De ahogy az oldalon, felidézni , hogy volt ez a könyvtár
itt aláhúzás, amely a konvenciót hívott
szó szerint egy aláhúzás karaktert, amely nem különleges,
csak néz, mint a dollárjel csinál a jQuery.
Ez csak egy segítő módszer aláhúzás dot utolsó
hogy pontosan ugyanaz a dolog.
És ha soha nem használta előtt aláhúzás JS mindkét
a kliens oldali kódolás
és a szerver oldalon egy csodálatosan hasznos könyvtári
hogy mivel sokan leírtak érzés, jQuery tartalmazza az összes
A módszerek, az emberek azt kívánta jött JavaScript is.
OK.
>> Szóval, mint elég nekem, és Néztem a sorozatban,
Ön, mint a visszahívás argumentumként?
>> Igen.
>> Mint így ha tényleg, mint a push, hogy,
és ahogy mit azt jelenti, ha csak
mint a visszahívási majd csinálni, mint a -
[Hallható Megjegyzés]
>> OK, jó kérdés.
Nos, hadd húzza fel a aszinkron főoldalon van
vagy a dokumentáció GetHub.
Tehát ez a kanonikus szerkezetét.
Ha hívás ezzel konkrét módszer sorozat,
van két nagy részből áll.
Az egyik tömb anonim függvényekkel
és a kettő végső visszahívás funkció, amely valójában
végre a nagyon a sorozat végén.
Ha most nagyítás a kicsit közelebb az első
olyan nagy dolgok, a tömb anonim függvényekkel
a követelmény, ennek fickó dokumentációt
hogy egy névtelen funkciója, amely
az egyik érv az úgynevezett callback vagy a foo vagy bár, nem számít
de ő nevezni visszahívás.
És ez a fajta a csengő hogy a Shake Shack lapokkal.
Ez az az eszköz, amellyel lehet vissza értéket
az ügyfél, mert Nem lehet csak nem a szó szoros értelmében vissza.
Meg kell csinálni módja ennek a visszahívás.
Mert ha benne ez funkció néhány lassú futás
kódot, mint query adatbázis, olvassa el A fájlt a rendszer,
ha nem akar várni ott és a blokk mindenki más,
szeretné hívni a visszahívás.
Szóval, ez a szó szoros értelmében nevét az érvelés.
De mint a C, akkor van funkciója mutatók.
A Java van referencia-rendszer módszerek
és ugyanaz itt JavaScript.
Ez egy változó, de a típus függvénye.
Tehát egyszerűen írásban neve hogy a visszahívás vagy ize
vagy a bárban, majd nyitott zárójel és szoros zárójel,
te, hogy a végrehajtó az ezt a funkciót.
És halad a null, amely azt jelenti, null hiba és egy
ami azt jelenti, hogy ez a adatokat szeretnék átadni be
És akkor a darab, hogy egyértelmű, ez egy másik visszahívás.
És ez nem hívják visszahívás,
ez csak fogalmilag a callback módszer funkció
mert ez az úgynevezett definíció
a szerzőtől a könyvtárban, amikor A teljes sorozat befejezése
illetve egy részük annak, ha egy Hiba történt előbb.
Tehát, neve callback függvény, hívás callback függvény,
nevét a callback függvény, hívás callback függvény,
különböző callback működnek együtt.
>> Most már, mint a meghatározni callback?
>> Nem, mert ez a fickó majd bejut a tömb
anonim függvényekkel,
egy mutatót a kód akar végrehajtani.
Pontosan, minden rendben.
Tehát, kérem, hogy az kódot kap egy kicsit egyszerűbb.
Tehát, ez lehet.
És ha te, mint én, hogy komfort legalább tudva,
ez eltart egy ideig szokni ezt.
De tudunk tiszta ez egy kicsit,
hogy ne dobja túl sok neked de itt van egy másik variáció
és más módszerrel
ugyanabban a könyvtárban nevű vízesés.
A fejjel amelynek ellentétben a sorozat, ahol az egyes
azoknak a névtelen funkciókhoz lényegében
függetlenül mindegyik a többiek.
Vízesés, mint a neve is sugallja lehetővé teszi a legfelső funkciók
hogy milyen át értékekben az alsó funkció
Valahogy úgy, mint a kaszkád vizet.
Tehát a fejjel ennek az, hogy én is ilyen
A használni ezt az előnyt.
A async.waterfall, értesítést a következő.
Én csak hívja fs.stat halad az út
hogy akarok statisztikák.
És akkor ne feledjük, mielőtt Volt egy névtelen függvény
, hogy volt két érv tévedhet,
EREDMÉNYEI majd hívtam a callback függvény kézzel?
Más szóval, csak hogy legyen tiszta, emlékeztetnek arra, hogy a korábbi
az aszinkron 2., én mindent megtettem ez csúnya munkát.
Felhívtam fs.stat telt P,
kijelentette, saját névtelen funkciót.
Aztán ellenőrizni kell, ha a hiba nem null, akkor tettem ezt,
mást tettem, hogy az egész szépsége alábbi egyezmények
mint node.js, hogy a visszahívás funkciók általában azt jelentette,
hogy legalább az egyik érv, Hibát tárgy után nulla
vagy több, hasznos értékeket.
Így észre a paradigma van,
ez a callback függvény vagyok kijelentve követi pontosan
paradigma, hogy ez a fickó aszinkron könyvtár működik.
Ami azt jelenti ez, miért vagyok Én végrehajtása saját callback
módszert, amikor a szerző ezt könyvtár szó átadta nekem
egy tál hogy úgy mondjam, a callback függvény tudom használni?
Szóval, én csak át a referencia ő adott nekem
annak érdekében, hogy azonnal, én több sor
kód lett egy sort.
Nos, hol megyünk ezzel?
A következő funkció Azt akarom, hogy végre,
A következő névtelen funkció ebben a tömbben
A funkciók a következőket.
Notice első stat az első érv.
Tehát valamit megváltozott már.
Nos, ez a fickó, aki írta a könyvtár -
és azt mondom, a fickó mert ez a srác.
Ez a srác, aki írta ezt a könyvtárat a dokumentáció garanciák
, hogy ha ezt a funkciót itt megy vissza egy hiba objektum
vagy null után kómába elválasztott listája más értékek,
ő gondoskodni fog arról, hogy azok, Más értékek kézzel
a névtelen függvény annak érdekében, balról jobbra.
És ami régebben csak egy callback függvény csak egyszerűen
lesz az utolsó ilyen érvelés.
Nos, én nem tudom, ki vagyok összpontosítva csak tudod.
De most, mi a vegye el itt?
Tehát tudjuk, dokumentáció
vagy a korábbi példák pár
hogy fs.stat végül számít visszahívási két érvet,
A hiba objektum, ami egy Hiba a tárgy vagy null követ
történő hivatkozás statisztika tárgy.
Tehát, ha belegondolok, hogy a Error objektum kóma statisztika tárgy,
amely illeszkedik a paradigma személy könyvtárában.
Szóval, én egyszerűen azt mondják azért, mert Én már a második argumentum
hogy ez - hogy fog kell átadni a fs.stat
A visszahívás az err, statisztikák definíció szerint az ezt a könyvtárat,
Tudom, hogy a második argumentum neve van
vagy bármi tudom nevezd
ha akarom követni A visszahívás itt.
Szóval, én is át egy érték itt van.
Nos, mind a kód, bár Igaz kissé rejtélyes van
legalább másolni paszta A legtöbb korábbról.
Az egyetlen különbség az értesítés Itt vagyok érvényben, amely a hiba
objektum, és most azt akarom, hogy egy kicsit cifrább.
Igazából szeretnék tudni, hogy mi a hibát, úgyhogy megyek
behajt belül az objektum a ingatlan önkényesen úgynevezett code
úgy, hogy én tudom, hogy ez nem egy fájl
hogy kell a jogosulatlan, ez egy HTTP 403.
Hadd ne feledje, hogy mielőtt Én át az Error objektum
a visszahívás.
És akkor végül próbálja olvasni a fájlt, így ebben az esetben,
A vízesés, amit törött a kódot a két nagy lépést
három kisebb lépéseket.
Figyeljük meg a szépség itt,
Tudom hívni fs.readFile halad az út.
És akkor a kemény rész mentálisan, hogy én csak át
A fickó visszahívás.
A dolog, ő átadta nekem, én vagyok fog át fs.readFile.
Mivel mindannyian azért, azonos egyezmények,
első érv, hogy a visszahívás Hibát tárgy vagy null követ
egy kóma vagy külön listát hasznos dolog.
Szóval, mi azt jelenti, hogy most, és ha olvasd el a dokumentációt fogom tudni
ez, az utolsó visszahívás, ez a srác itt kint
A szögletes zárójelek megy kerül elfogadásra Error objektum
vagy null, amit ellenőrizni kell az mint mindig ezzel a kóddal itt.
És akkor definíció szerint E módszer
A fickó dokumentáció Az utolsó visszaadott érték
Az utolsó módszer én névtelen tömb -
a tömb anonim függvényekkel.
Szóval, mit olvas fájl visszatérés
és én vagyok a visszatérés lazán most.
Úgy értem, mit olvas Fájl át argumentumként
A visszahívás módszer a kézzel?
Két érv, első Hibát tárgy vagy null,
ez szinte mindig lesz a válasz.
És a második dolog megy hogy milyen olvasási fájl?
A fájl tartalmát, adatok azt nevezte korábban.
Így, egyszerűen kijelentette err, eredmény,
és ellenőrizze a hiba ezen a egyfajta unalmas már.
Else, én res.end halad, hogy az eredmény.
Ez kétségtelenül Nem szinkronizálni tökéletesen
amíg ténylegesen írd meg magad.
De most, hogy el legalább a tény,
hogy van ez a látszólag közös paradigma, amely szerint, ha
és a szerzők könyvtárak minden fajta stick
a jelen Egyezmény A visszahívás módszerek.
És az első argumentum Hibát tárgy vagy null.
És a második és a harmadik
és a negyedik tárgyak dolgok mi érdekel, és sort
a szabályokat követni, és dokumentációt.
Kezdtük kód őszintén szólva elég csúnya.
És bár a legutóbbi Például őszintén szólva elég nehéz
hogy tekerje elméd körül, ez legalábbis vizuálisan,
úgy néz ki, mintha sokkal szigorúbb.
És ha egyszer kap kényelmes vele, ez így sokkal könnyebb
és ez így sokkal kevésbé hajlamosak a hibák, mint az előző példában.
Szóval, hadd mutassam Még egy utolsó dolog itt.
Ez a verzió a három.
És - No, hagyjuk ezt egyedül.
Hadd menjek egy pár Egyéb last dolgokat ugratások.
Rendben, szerver 2..
OK. Először is, bármilyen kérdése van, Tudom, hogy ez sok
de többet akart utasításokat, így van?
Azt nem mondtam, jó utasítást feltétlenül.
Igen?
[Hallható Megjegyzés]
Helyes, akkor lényegében engedékeny, hogy az operációs rendszer
hogy kitaláljuk, hogyan kell bűvészkedni mindezek a golyó egyszerre,
olvasása fájlból, olvas egy adatbázisból.
És ez a JavaScript szerveren arról, hogy ez egy menetes.
És lényegében, és valóban,
van egy kép Én nem dobja fel,
és ez nem feltétlenül minden, ami tanulságos
de talán majd adni Ön a mentális modell.
JavaScript magát, és csomópont
különös van ebben a úgynevezett esemény hurok.
Ami szerint, akkor gondolom A node.js, a program,
van szó, mint a végtelen ciklusba.
Ez csak egy vad hurok, vár és vár és vár,
keresi a feladatok elvégzéséhez.
És a feladat lehet, menjen hozz valami adatbázisból
vagy itt egy értéket a adatbázis vagy menj erre a képre
a lemezről, vagy itt egy kérheti a felhasználó.
Bármiféle esemény, mint A böngészők eseményvezérelt,
így a szerver oldalon eseményvezérelt.
És minden olyan dolog alkotják eseményeket.
Tehát valaki node.js, csak írt egy végtelen ciklusba,
egy nagy vad hurok, vár a dolgok történni.
És ahogy dolgok nem történik, ez végül a sorban, igaz?
Természetesen, egy adatbázis Lehet, hogy vissza értéket.
És egy fájlrendszer az operációs rendszer lehet vissza értéket
nagyjából ugyanabban az időben de valószínűleg lesz
hogy néhány rendelés nekik.
És node.js fog lényegében a sorban
mint egy nagy tömb, vagy a vektor, néhány adatstruktúra
bufferelő minden azokat a dolgokat.
Mert a szó szoros értelmében csak egyikük kezelni egy időben.
Tehát, ha a fejlesztő,
írás aszinkron JavaScript kódot aszinkron
funkciót, akkor így ezt az úgynevezett esemény hurok menni
a következő kullancs, igaz?
Tehát, amíg azonnal vissza, mint az összes
ezek aszinkron módszerek szeretem fájl olvasása és stat,
visszatérnek, azonnal mert a callback végül
visszajön.
Amint visszatér,
azt jelenti, hogy valaki más kap bukkant ki az állomány itt
vagy hogy is kap bukkant ki az első a sorban van.
És így, ott van a Valójában a sorszámozás
mindent, ami történik,
még akkor is, ha ezeket a dolgokat is történik párhuzamosan
a többszálú rendszer.
De node.js magát, és a szerver futottak
az egyik téma.
És a lefelé oldala az, hogy t nem feltétlenül max
ki a számítógép képesség olyan különösen
ha van egy 16 magot vagy még a 2 mag számítógép
és te csak fut egy példánya csomópont.
De ha már egyszer tenni valamit, mint 161,
elkerülni a hatalmas rémálom fejfájás, amikor a
a verseny feltételeit, és zárak és szemafor
és az írás valóban a többszálú kódot,
így upsides és hátrányai.
OK. Szóval, vissza a kódot itt hadd javaslom, hogy kezdjük
egyszerűsíteni a dolgokat egy kicsit.
Láttunk server egy kicsit ezelőtt ami úgy nézett ki, mint ez.
Szóval, ez vitathatatlanul nagyon egyszerű.
De, akárcsak a világban PHP, vannak keretek
mint Laravel és ott dolgok, mint a Rails és Django,
Ugyanez a node.js világon.
És fogunk többet költeni idő ezen a szerdán
és a következő projekt.
De ha bemegy egy Server 2 könyvtár,
észrevesz egy pár paradigmák itt.
Szóval ez az - ott lesz hogy egy egyenértékű példa
de ez egy keretében az úgynevezett express.js,
ami ingyenes, nyílt forráskódú szoftver, mint a Rails és Django,
mint Laravel, ez csak végső soron fog
hogy nem értett ma Mert mi már írásban
Ilyen egyszerű példát.
De bíznak bennünk.
Ez nagyon gyorsan lesz a barátja
mert ez fogja megmenteni Ön sok TDS kódot.
És egy közös paradigma Egy express.js alkalmazás
hogy egy app.js vagy server.js fájlt, amely tartalmazza a logikát
a program vagy a legalább a belépési pont.
Egyszerre több fájlt.
A címlapra alkönyvtár amely a könyvtárak
hogy már letöltött mint aszinkron
és kifejezni magát mások.
És akkor package.json, package.json néz ki,
és akkor hozza létre manuálisan vagy eszközöket hozza létre az Ön számára
és ez a szó szoros értelmében a JSON fájlt
és az érdekes rész a függőségek itt.
Csakúgy, mint a Laravel, akkor volt, hogy a gyártó könyvtár
és meg kellett aggódni a csomagok és ezzel -
valójában frissítése a Artisan vagy hasonló parancsok,
A könyvtárak meg telepített,
hasonlóan a package.json itt és sikerül a könyvtárak
és változat hogy érdekel.
Tehát, ha van egy package.json, Én egyszerűen nem NPM,
Node Package Manager telepítését, ez fog automatikusan meg
abban package.json fájlt.
Nézd meg, tudom a legújabb verziót
Az összes gyártó modul
a csomópont aláhúzás modulok könyvtár itt, vagy esetleg
Néhány szülő vagy őse könyvtárba.
És ha nem, akkor majd letölteni őket
és akkor megjelenik egy csomó
HTTP cucc lesz az egész vezetéket.
Így például, hadd megmutatja a tartalmát
A node modul csak kifejezni.
Hadd menjek előre, és bátran törlése node modul
annak érdekében, hogy minden, amit most ez.
És ha én NPM telepíteni, akkor látni, hogy ez fog olvasni
hogy package.json fájlt, és láttunk hasonló kimenetet
hogy ez a Laravel világon.
Ez a letöltés egy egész csomó dolgot, és ez
mert kifejezetten viszont attól függ, hogy egy csomó
más népek könyvtárak.
Tehát az összes ilyen fajta letöltés alatt rekurzívan.
Eddig, ha jól csinálni LS megint,
ott van a node modul könyvtár vissza
és kifejezni a hátsó.
Tehát ez csak egy módja annak, egyszerűsítése csomagkezelő.
Most, ha megnézzük a app.js fájl, ez lesz
hogy egy visszatérés legkorábbi webszerver
ahol csak köpni out "hello, world".
De észre a paradigmák itt
először kérünk kifejezett modult, akkor van ez a sor
A kód, amely tudja, a dokumentációt.
Ha szó szerint kezelni, hogy modul függvényében változik,
így nyitott zárójel közel zárójel azt végrehajtani.
Ez lesz a látszólag vissza valamit, amit mi megyünk
általában véve egy kb.
Hogyan működik?
Én nem igazán tudom.
Majd valaki, tudod, A kifejezett világon írtam.
Megyek már állni ő vállát, így
hogy én kérelmet futás egy kicsit egyszerűbb.
Itt fogok hallgatni az adott port
ami a leginkább semmit.
És itt a kód, amely az talán inkább emlékeztet már
A Laravel és routes.php.
Szóval ez a vacsora egyszerű, én vagyok csak megy, hogy adja meg az útvonal
A perjel csillag, így minden lesz felszívódik
Az e kérelemben handler.
A paradigma kérelem handler az a névtelen függvény
azzal a kéréssel érv
és a válasz tárgy mint azelőtt.
És res.send Expressz eszközök elküldi a kódot, majd
bármilyen akarsz küldeni.
És persze, akkor valami szakértő
a valóban küldött fájlokat vagy HTML
vagy dinamikusan generált tartalmat.
De most, minden, amit tett volt kiköp hello, világ.
Ha bemegy szerverre három, ez még cifrább csak
mutatni néhány funkciót.
És mi megmutatjuk neked egy még szexisebb verzió
ezt szerdán.
De ha valaha is hallott A Socket IO talán
így azt hiszem, Jonathan vagy valaki azt mondta korábban,
az egyik dolog, node igazán ismert
mert a valós idejű viselkedés, igaz?
Gondolj PHP MySQL, ha volt, hogy végre egy chat szerver
PHP-ben, ahol két ember megnyit egy böngészőablakot foo.com
majd indítsa IMing minden egyéb, Alice egy ablakban,
Bob egy másik, hogy a mindegyikük látja
saját üzeneteket a másik ablakban.
Hogy csináltad ezt A PHP és a MySQL?
Használatával, vagy nem használja Laravel sort anyagtalan, akkor
mint egy index.php fájlt.
És van, hogy - a Egyes esetekben ez van, hogy köpni
ki a forma, így van lesz egy HTML form
ez valószínűleg benyújtja nem keresztül normálforma benyújtása
de Ajax valószínűleg, nem igaz?
Így, egy a be handler, így Ön írja be a szövegmezőbe,
hit meg, és akkor lesz küldeni a szerveren keresztül Ajax.
Mit majd tenni a szerver?
Szóval, ha már van index.php
vagy valami dot PHP, ami kapott HTTP paraméterben
a felhasználó, Alice és Bob azonnali üzenetben, mit csinálsz
vele annak érdekében, hogy terjessze az Bob és Alice-kal?
Úgy értem, hogy a szó szoros értelmében azokat az eszközöket, amelyekkel
hogy ezt a min.
Szóval, mint mit tennél?
Van egy perc a program megvalósításához.
Igen?
[Hallható Megjegyzés]
Tökéletes. Rendben, tehát van egy adatbázis.
Tudjuk, hogy egy kicsit kicsit a MySQL.
Szóval, van egy tábla ez az üzenet,
talán van egy idő bélyegző, a felhasználói azonosító,
a test az üzenet maga teremtett, hogy a
frissített azt, és minden adott.
Szóval, tárolja egy adatbázisban.
És tegyük fel, Alice elküldi a első üzenet, hogyan Bob kap
az üzenet már az adatbázis?
>> Lehet, hogy valami Ajax válasz, ami folyamatosan megy
vissza az adatbázisba tetején, hogy a [nem hallható].
>> Pontosan.
Így Bob kódja aki kód ugyanaz, mint Alice csak egyfajta
A szimmetrikus kapcsolat,
Bob böngészője van néhány Ajax kód ez talán talán minden 30
másodperc húzza a szerveren keresztül Ajax szinkron,
vannak-e az új üzeneteket?
Vannak új üzeneteket?
Minden 30 másodperc lesz hogy milyen optimális
mert meg kell várni még
ha Alice szó most küldte az üzenetet.
Tehát, Bob böngészője tudott minden második találatot a szerver.
De ez azt jelenti Alice böngésző üti a szerveren
minden második.
Mi a helyzet Charlie [Feltételezett helyesírás]
és David [feltételezett helyesírás] és Edward [feltételezett helyesírás]
és minden más betű az ábécé?
Mi a probléma E megközelítés?
Sok Találatok túl -
Úgy értem, te csak hatékonyan Adagolás saját látvány
vagy DDOSing, elosztott DoS támadást
a saját honlapján, ha az összes
ezek a felhasználók a JavaScript futtatását code ez csak pingelni a
fene ki a szerver akkor is, ha tetszőleges számú,
80 százaléka az idő senki sem mondott semmit
a chat-szobában.
De te csak ellenőrzés hogy győződjön meg róla, az ilyen.
Tehát PHP a sok nyelv csak nem jó
a valós idejű kommunikáció.
Mivel a PHP visszahívás van nincs központi memória, igaz?
Van Session objektumok amely azt az illúziót kelti
központi tároló, de ez a felhasználókra.
Nem kell globális memória mint te egy Java Servlet
ismerős, vagy más frame működik, mint ezt.
Node.js mégis, akkor nem kell globális memória, mert van
egy szerver, és hogy "képes emlékszik akar
az összes felhasználó számára.
És lehet, hogy még mindig van egy adatbázis.
De a szép dolog node.js is az, hogy ez sokkal jobb
mint valami, mint a PHP és megteremti az illúzió
kezelni több dolgot egyszerre.
És valóban, mint kívül, akkor végre csevegés szerverek PHP,
de akkor általában nem úgynevezett hosszú lekérdezés
amelyben nem ping a szerver minden második.
A ping a szerver, a szerver nem válaszol neked
felfelé a 30 másodperc, szó szerint ül
a hurok vár és vár.
És a szerver ellenőrzi, van új adatok az adatbázisban
és csak egyszer is, hogy látja, hogy "Ó, itt egy üzenet Bob, "
nem is válaszol, hogy a HTP szerver?
Így a hatás a böngészőben az, hogy az IE ikon vagy a Mozilla
vagy bármi csak folyamatosan forgó 30 másodpercig egy időben.
De a fejjel, akkor nem 30 kapcsolati kérések
30 másodperc alatt, van egy.
Így hívják a hosszú lekérdezés.
De még jobb, a modern web böngészők úgynevezett
WebSocket, amely Ön a CS143,
akkor hatékonyan, hogy egy TCP kapcsolatot a kliensek
mint egy böngésző, hogy a szerveren majd tegye a rá
nélkül közel annyi erőforrást
HTTP esetleg hagyományosan nem.
És Socket IO a node.js könyvtár
teszi, hogy sokkal könnyebb hogy a socket kapcsolatok
vagy illúziók ott A régi böngészők
így végre ezt a valósidejű funkcionalitás években.
Szóval, itt van egy példa.
Ez a cucc fel tetején kap kicsit bonyolultabb
de ez leginkább másolás és beillesztés A socket.io dokumentációját.
Itt most sokkal körülhatárolt kérésére handler.
Ha a felhasználó kérésére a perjel, milyen fájlt megyek
hogy látszólag szolgálják fel őket?
Index.html.
És van néhány új cuccot patak
amely Megmutatom csak egy pillanat.
De ez csak egy módja
rángatás egy fájlt a kicsit hatékonyabban
mint ennek fs.readFile.
Ez egy kicsit okosabb különösen a nagy fájlokat.
Tehát hosszú történet rövid, ezeket a sorokat, csak szolgálni
készíthetek egy index.html
amely most feltételezik tartalmaz A HTML formában, amely Alice
és Bob is kapcsolatban van.
Végül io.sockets.on, így ez a származik ez a sor itt.
Szóval, én csak olvasni a dokumentáció io.socket ad nekem
hozzáférést egy úgynevezett WebSocket egy böngésző,
között, a böngésző és a szerver.
Hallgatom a speciális esemény kapcsolat, amely segítségével
amikor a felhasználó először eléri a szervert próbál
hogy nyissa meg ezt a kapcsolatot, én vagyok fogja hívni ezt a visszahívást.
És most megyek hogy tegye a következőket.
Minden ötödik másodpercben mit fogok csinálni?
Megyek bocsát ki vagy sugárzott ha emlékszel semmiből,
A grafikus nyelv lenne hogy az adás blokk?
Szóval, fogsz kibocsátani
vagy kiváltó esemény az úgynevezett önkényesen a szerverről.
És ez fog tartalmaznak egy üzenetet Ping
és az aktuális dátumot.
Szóval, ez egy valódi chat szerver, hogy Alice
és Bob is használható, de ez a fajta automatizált chat szerver
ahol az üzenetek csak egyfajta szonár ping.
Ez csak a mai napig időnként, hogy a küldött öt másodpercenként.
Tehát, ha én valóban vezetem ezt dolog - és ennyi.
Ahhoz, hogy tiszta itt, értesítés ez csak belép ide.
Szóval, hadd térjek a vak szemet, hogy az.
Hadd tegyem csomópontja app.js.
Hadd menjen a böngészőben.
Tegye vissza a honlapon itt.
[Szünet]
És hadd zárja be az ellenőrnek.
Minden ötödik másodpercben van egy jóllehet nem demonstrációs
interaktív emberi
valamit, ami történik aszinkron.
A böngészőben értesítést, nincs centrifugálás ikonra.
Ez egy szakértő szolgáltatás A Chrome a modern böngészők
fenntartása egy socket kapcsolat a motorháztető alatt
és ez az úgynevezett általában pub / sub modell,
publish / subscribe modell, ahol még nem történt
hogy egészen nyíltan itt.
De mi a jó ebben Általános pub / sub paradigma
hogy lehet egy kiadó.
Ebben az esetben a központi szerver és az összes
az egyén böngésző ügyfelek.
Alices és a bobot a világ aláírásáról,
így relé üzeneteket között tetszőleges számú felhasználó.
És bár újra vagyunk nem látjuk interaktivitás,
mi volt, talán 12 sor A kód csak erre.
És ez valószínűleg nem egy ugrás elképzelni, hogyan lehet ostor
ki az index.html fájlt hogy van egy igazi HTML formában,
kis jQuery kód Ajax, hogy nem küld a nappali
de csak küld bármi Alice vagy Bob írja a szerver
majd a szerver akkor relé ki.
És ígérem, hogy bepillantást az egyik utolsó dolog, csak
ugratni ebben.
Ha bemegy patak nulla és egy,
látni fogod kód csak egy kicsit más itt.
Csak így láttam, ez egy alternatív
arra, amit úgynevezett fs.readFile korábbi módszer, amellyel,
meg tudod mondani node.js, "Go olvassa el ezt a fájlt a memóriába.
De ha ez a nagy csak ad nekem egy darab egy időben. "
És lehet, hogy tudják, CS165
vagy 161 a fájlrendszerek különböző
teljesítmény tulajdonságait.
Érdemes elolvasni blokkokban 512 bájt
vagy 2 kilobyte, vagy bármi.
Ez egy módja a optimalizálása kapok vissza fájl iteratív
így köpje egy kicsit gyorsabban
a böngésző, vagy aki a végén ügyfél.
Így hatalmas mennyiségű tartalom ma megyünk merülni
részletesebben szerdán Tim [feltételezett helyesírás]
különösen néztem, hogyan lehet lefordítani néhány ötlet
az első felében a Természetesen Laravel és modellek
egy könyvtárat, hogy ő maga írta úgynevezett Bookshelf.js
amely egyre inkább népszerű a közösségben
mert ez ad a legtöbb,
ha nem több, mint a funkcionalitása ékesszóló
amely visszahívás, hogy könyvtár betekintést Laravel,
így többet, és még többet, hogy
fejlesztése teljes körű apps szerdán.
Majd látod majd.