Tip:
Highlight text to annotate it
X
>> KEVIN SCHMID: Hello mindenkinek.
Üdvözöljük a CS50 szeminárium A Node.js.
A nevem Kevin.
Vagyok CS50 TF.
És én, mint valami nagyon izgatott erről a szemináriumon.
Azt hiszem, Node.js nagyon cool.
Remélem, hogy ez a szeminárium is használható mint egy jó, azt hiszem, ugródeszka
néhány végső projekteket, ha akkor érdekel a
valami ilyesmit Node.js.
>> Majd egyfajta indítsa el a szeminárium ki csak beszélek egy kicsit a
jellegű háttér skálázhatóság perspektívái Node.js, majd
fogunk költözni egy kódot példát.
Én meg a kódot a honlapon, és akkor nézd meg a kódot.
És miután a szemináriumot fogok rendezni beszélgetési arról, hogyan lehet létrehozni Node.js
a számítógépen.
>> OK.
Tehát kezdjük.
Szóval azt hiszem, én csak azt szeretném, hogy beszélni webszerverek, tényleg, az első.
És kezdeni ezt a vitát, azt alapvetően egy diagram, ami a
A tankönyv használt CS61, amely alapvetően azt mutatja, az interakció
a kliens folyamat, mint a web böngésző, illetve, mint a cél ügyfél vagy
valami ilyesmi, és a webszerver.
Tehát ez a fajta hasonlít az kép, amit látott előadás
Szerda, ahol alapvetően van némi kliens folyamat, mint a Google Chrome.
>> És akkor az első lépés az a kliens küld egy kérést.
Hogy lehet valami, mint a jól nézzük látogasson el, nem tudom, CS50.net.
Tehát ki ezt a kérést.
És vajon bárki emlékszik a nevére a protokoll, amely meghatározza, hogy hogyan
kérelmet kell felépíteni?
Aha.
>> Közönség: [hallható].
>> KEVIN SCHMID: Pontosan.
Szóval, ez olyan, mint a HTTP, igaz?
Tehát alapvetően a specifikáció, hogy milyen ezt a kérést ténylegesen kell határozni
ki, mert a végén a nap, hogy a kérés valóban, mint egy
karakterlánc, amely alapvetően azt mondja, hogy ezt akarom.
És a specifikáció mert ez a HTTP.
Szóval, ez olyan, mint a protokoll.
>> Tehát akkor a szerver megkapja ezt a kérést.
Szóval srá*** egy webszervert telepített A CS50 készülék.
Ez Apache.
És ezen a héten, amikor a munka a probléma be hét, akkor valóban dolgozni
azzal a webszerver.
Így a szerver megkapja ezt a kérést, és a majd azt, hogy milyen a semmiből
fejét, és azt mondják, mint a jó, mi csináljak ezzel?
>> Szóval, annak alapján, amit úgy dönt, hogy nem, akkor lehet, hogy a kapcsolatot valamilyen
erőforrás.
És, hogy az erőforrás lehet Sok különböző dolog.
Az egyik, hogy lehet, hogy csak mint egy statikus HTML fájlt.
Így lehet csak, mint egy HTML ami olyan, mint a
a személyes weboldalán.
Ez lehet egy statikus fájlt, mint egy kép vagy, mint egy film, hogy van.
Még az is kell beszélni hogy valamilyen adatbázisban
mint a MySQL adatbázis.
Tehát ez nem mindig kell kommunikálni a forrás, de
Egyes esetekben lehetett.
>> Szóval, akkor mit fog csinálni azt követően, hogy ez fog
küldje vissza a választ.
És a válasz az, is meghatározott HTTP.
Tehát akkor az ügyfél kaphat meg.
Ez tépje szét, és feldolgozni.
És akkor, hogy egy internetes oldalon mint a Google vagy CS50.net vagy
amit ment.
OK?
>> Tehát ez az alapvető interakció fogunk foglalkozni.
És mi elég sok lesz összpontosítva ez a része a
interakció, a szerver.
OK.
Cool.
Van valakinek kérdése eddig?
OK.
>> Tehát, mint már említettük, a webszerver kap ez a HTTP kérést, majd kiadja ezt
HTTP választ.
És mint már beszéltünk korábban, a CS50 készülék webszerver Apache.
Tehát, ha a srá*** dolgoznak P állítva hét, fogsz dolgozni a
Apache webszerver.
Soha nem kell, hogy valóban működik Apache közvetlenül túl sok.
Ha valami Apache egy kis mikor adja meg a virtuális gépeket, vagy
v házigazdák, és mi lesz az, hogy egy kicsit.
>> De alapvetően, az Apache webszerver létre, hogy a PHP-fajta
A ki a dobozból.
Szóval, mi is történik, ha megy az egyik a weboldalak, mint, mondjuk,
helyi gép slash index.php, vagy valami, a böngésző elküldi, hogy
kérelmet, majd az Apache ül ott, és kitalálja, hogy köze van hozzá.
És az akció végrehajtására hogy a kódot index.php és
majd küldje el újra.
Tehát ott van az.
Tehát egyfajta beszéltünk erről.
Így lehet csak szolgálni egy statikus fájl vagy fuss néhány PHP-kódot, majd kérdés
a válasz.
>> Így aztán egy gyakori kérdés, hogy jöhet fel jól, hogyan igazán foglalkozunk
azzal, több felhasználó ugyanabban az időben?
Így elképzelhető, ha írtak a web server, ha volt egy webszerver, amely
akartál írni valamit mint a C, vagy valami ilyesmi,
alapvetően akkor lehet gondolni, hogy ott lehet valamilyen kód
kapna a kérelmet, de aztán azt, hogy mindezt a munkát rajta.
Lehet, hogy, például, a kapcsolatot a adatbázis, vagy valami ilyesmi.
Nem igaz?
És akkor tenne ilyen majd a feldolgozás
küldte vissza a választ.
Szóval ez olyan, mint a nagy szintű áttekintést.
>> De nem azonnal nyilvánvaló, hogy hogyan megteheti, hogy úgy, hogy két ember, vagy
még 1000 ember tudott dolgozni a web szerver ugyanabban az időben.
Tehát a megoldás, hogy az Apache nevezzük szálak vagy folyamatokat.
Szóval lehet, hogy hallott ezeket a kifejezéseket előtt.
Nem baj, ha nem, de gondoljunk csak a szálak vagy folyamatok módon
az operációs rendszer vagy a felhasználói program, vagy valami ilyesmi, vagy a webszerver
az a fajta végre több dolgot egyszerre.
Szóval lehet, hogy hallotta a kifejezést mint a szálak a végrehajtás.
Szóval ez olyan, mint te egyfajta multitasking.
>> És ha láttad a doboz a laptop, vagy valami ilyesmi,
többmagos, amit tehetünk, akkor fut két különböző szálak különböző
részeit, így a CPU, hogy azok ténylegesen meg is történik ugyanabban az időben.
Tehát ez nagyon erős.
És ez a fajta Apache megoldás erre a problémára.
>> Tehát vannak olyan, mint minden olyan kérdést ezzel a megközelítéssel, bár?
Szóval azt hiszem, valahogy írtam őket.
De mind a ketten egyfajta használ sok memóriát.
Ez nagyon drága, hogy hozzon létre egy szál, vagy egy folyamat.
>> És része az érvelés, hogy csak mint amikor futsz egy C program
mint a fő, majd hogy a hívások másik funkció, amely
valamilyen verem.
Így szálak is szükség egy teljesen külön stack amely
lehet elég nagy.
És ha tudja képzelni, tonna felhasználók a honlapon, akkor kellett volna
sok különböző szálak.
Ez sok halom, hogy kezelése és karbantartása.
Szóval ez a nagy memória-felhasználás.
>> És akkor is, mondjuk már csak egy CPU, vagy mondjuk, hogy
több szálat, mint te ezek multicores.
Nem igaz?
Tehát mondjuk, hogy van 10 menet és csak volt öt CPU-k.
Ha ilyen van, hogy ezt a dolgot, ahol közötti váltáskor az aktuális
az egyik, hogy fut, mert nem tudja futtatni a 10-at egyszerre.
És hogy hívják a kontextusban kapcsolót.
És ez a kifejezés valójában egy pár különböző körülmények között, de most csak
gondol rá, mint váltás két szál.
Ez is elég drága, mert alapvetően mit kell tenned, hogy
kell, hogy hagyja abba, amit csinálsz, kivéve a állapotban, hogy a futás menet, és a
majd átváltani valahol máshol.
>> Tehát nem mindenki ilyen lásd motiváció, hogy miért szálak és
folyamatokat lehet egy kicsit terjedelmes?
És volt még egy kérdés?
OK.
Cool.
Van valakinek kérdése?
OK.
>> Tehát, ha egy lépést hátra a második, van olyan, mint egy
megfigyelés, hogy tudjuk, hogy a sok webes alkalmazások.
És ez igazán, hogy sok közülük Igazából nem, hogy sok hasznos
a munka belsejében egy szál.
Így már bárki kezdődött P beállítva hét egyáltalán?
Így akarsz talán leírni néhány, a részek?
Már dolgozott login vagy valami ilyesmi?
>> Közönség: Nem.
>> KEVIN SCHMID: OK.
Mindegy.
Bocsánat.
De alapvetően, a P halmaz, akkor lesz, hogy a sok fajta
lekérdezéseket egy adatbázis, hogy egy kis információt az adatbázis.
És mi a kódot fog csinálni, hogy mi Apache folyamat vagy
hogy az Apache szál fog csinálni ugyanakkor azt, hogy lépjen kapcsolatba a
adatbázis ez a fajta lesz ott ült, és ez lesz
várja az adatbázis válaszolni.
>> Most, hogy nem hangzik olyan nagy foglalkozni, mivel az adatbázis a
CS50 készülék, igaz?
De van valamilyen hálózat látencia ott, mert most már a weben
kiszolgáló kiadni saját kérésére a az adatbázist, hogy kommunikáljon a
adatbázist, majd kap, hogy a Vissza.
Tehát most már, mint a jól várj rám, én vagyok menni, hogy valamit a
adatbázis és akkor ott van a sok várakozás folyik.
Van ennek értelme?
>> És néhány dolog, hogy ez nem is olyan rossz.
Ha csak azt, hogy, például, hozzáférésű memória, ez nem olyan, mint
szörnyű I / O késleltetést.
És amikor azt mondom, I / O latency, milyen vagyok utalva, mint bármilyen hasonló
input output.
De eléréséhez egy fájlt a lemezen, mint a ha akartam szolgálni a statikus HTML
fájl, amely a saját weboldal vagy valami ilyesmi, valahogy meg kell
megáll egy kicsit, olvastam, hogy a fájl magának a lemezt, majd a
ez a folyamat várok.
Én nem hasznos munkát végez.
>> Ez nem igaz, mindent, de a gyakori az alkalmazások, mint a P halmaz
hét és sok alkalmazás hogy te nem
valójában csinál sok gondolkodás.
És amikor azt mondom, gondolkodás, úgy értem mint a számítógépes munkát.
Így számítógépes munka lehet valami mint, mondjuk, azt akartad, hogy
levelet web szerver, hogy csak számított Az n-edik Fibonacci-szám.
Ez nem úgy hangzik, mint egy különösen szórakoztató webszerver.
Mintha nem számíthat, hogy a helyszínen, hogy A következő a Facebook, de ez némi
fajta számítógépes munkát.
>> El tudják képzelni azt helyettesítő és valamilyen más érdekes
számítógépes munkát.
Tegyük fel, hogy írtak valamit számított a fokok
szétválasztása két ember között vagy valami ilyesmi.
Tehát, hogy nem jár valamilyen A számítás, nem igaz?
És még akkor is csinálni, hogy még mindig hogy sokat vár talán
meg kell kérdezni egy adatbázis, hogy vizsgálja meg fel, aki barátok, akik, vagy
valami ilyesmi.
Tehát van ez a fajta fogalom a számítógépes munkát.
Van ennek értelme?
Van valakinek kérdése?
>> Ja, és azt hiszem, fel chat szerverek ott mert a beszélgetés szerverek fajta
Egy másik jó példa erre.
A chat szerver nem sokat gondolkodás.
Csak meg kell várni, hogy az emberek üzeneteket küldeni és amikor
mégis, küldje el.
OK?
>> Szóval összefoglalva újra az Apache és a hasonló webszerverek ilyen villa a
Sok szálak és folyamatok lehet ilyen pazarló.
Szóval azt hiszem, a kérdés, hogy jöhet az, hogy nem mi szükség van
több szálon és folyamatok?
Mi lenne, ha csak volt egy?
>> Szóval egyfajta festeni egy képet Az, hogy ez mit fog kinézni.
Szóval csak egy szál.
OK?
Tehát csak elképzelni, hogy ez az egyik téma.
>> Tegyük fel, hogy nem igazán tesz hogy sok hasznos - és amikor azt mondom,
hasznos, úgy értem, a számítógépes munka -
azokban a több szálon előtt.
Szóval egyfajta megszilárdítása mindent egy szál.
Mi van, ha volt egy szál ilyen csak megy körül a hurok, és
folyamatosan ellenőrzi csinált valamit Új történni.
Így például, valami új történt azt is jelentheti, kaptam valamit vissza
az adatbázis, vagy valaki küldött nekem egy új HTTP kérést.
Tehát azok a fajta események , hogy ez megtörténjen, ugye?
>> És akkor mit tehetek, ha ezek az új dolgok történnek ebben azonos téma
a végrehajtás, ez az egyetlen szál végrehajtás, tudok hívni egy kódot, hogy
kellene kezelni, hogy az adott dolog.
Így például, ha kaptam valamit az adatbázisból, tudtam futni a
kis számítási része az, hogy valójában csak előkészíti a dolog, hogy
küld vissza a felhasználónak.
Tehát nem az a fajta értelme?
>> De mi valóban a mit jelent ez?
Nem igaz?
Mert írtam sok kód -
és én csak fog ugrani előre A diák, ha ez rendben van.
Szóval, ha nem bánod, én csak megy, hogy egy lépést hátra.
Tehát ez a fajta dolog, nevezett esemény hurok.
OK?
És ez olyan alapvető gondolata Node.js.
>> Tehát mi Node.js valóban csinál, mint a web szerver van egy szál
hogy alapvetően megy körbe a hurok mint egy ideig egyfajta alatt
a motorháztető Node.js ami folyamatosan ellenőrzése, nem kapunk új dolgokat?
És akkor fog futni rakodók hogy hozzanak létre.
De egy jó kérdés az, hogyan tudjuk, hogy ez megvalósuljon
a meglévő dolgokat?
>> Így tettem egy sor C kód, hogy itt alapvetően úgy néz ki, mintha megnyitása
fájl, igaz?
Én Épp most jött ki egy albumot.
Szóval kellett nyitni neki egy új fájlt.
Tehát az út a C kód működik -
és azt hiszem, azért választottam kép volt mert ez a fajta mértékű
Az I / O munkát, amit végzett C olyan értelemben, hogy ott input output.
Ezért hívjuk ezt a kódot, hogy az működik ez a f nyitva.
És akkor a következő sorban a mi programot, most már dolgozni f.
>> Tehát ez lenne egy példát mondani valamiről ez olyan, mint a szinkron vagy
blokkoló, mert az, hogy az első sorban ott várunk, amíg
hogy a fájl nyitva.
Így a második sorban, tudjuk, hogy f tud dolgozni, de ez azt jelenti, hogy
hogy a második sor nem igazán fut amíg az első sor kész.
Van ennek értelme?
>> Tehát ez rossz lenne, hogy egy eseménykezelő.
És az oka, hogy az, hogy a ez a fajta vár, nem igaz?
Tehát ez visszatér minket vissza hogy ugyanazt a dolgot.
És most már nem is kell a javára több szálat vagy
folyamatokat, mert kaptunk Egy szál Node.js.
Van ennek értelme, hogy mindenki?
>> Közönség: Várjon.
Szóval mi a csere?
>> KEVIN SCHMID: Ó, szóval igen.
Így fogok eljutni a csere.
OK.
Mi van, ha volt valami úgy nézett ki, mint ez?
Mi van, ha most szerkesztett f nyitott egy kicsit?
Szóval halad az azonos két érv, mint korábban.
Még mindig szeretem az új dalt , hogy ő jött ki.
De én halad egy harmadik dolog, ami az ennek a változónak nevezzük kódot.
>> De mi az a kód valójában ebben az összefüggésben?
Olyan, mint egy hagyományos C változó?
Ez egy funkció, igaz?
És hogy lehet egy kicsit furcsa, mert Én valójában, mint most halad a
működik egy másik funkciót.
>> Így egy-két dolgot megjegyezni erről.
Egy, én valójában nem hív a kód funkciót.
Szóval nem lát kódot a bal paren, Jobb zárójel.
Én csak múló kódot.
És a C-ben, hogy mi ez valójában van nekem egy mutatót, hogy a tényleges
kódot, és akkor ez lehet futtatni.
De gondolj bele, mint te halad a programkód futtatható
a fájl megnyitásakor.
>> De mit jelent az, hogy most a életem program tehet
más dolog, továbbra is csinál más dolgokat, miközben mi, nem igazán várni, de
csak a hátsó fejünket, hogy ha a fájl nyitott, futni, hogy
kódot a tetején.
Van ennek értelme?
>> És most az ötlet mögött Node.js, hogy A kódot a do dolgot f
része kell nagyon rövid és egyszerű és egyértelmű, és nem igazán lehet
nagyon számításigényes.
Lehet, meg kell nyitnia egy fájlt, de hogy az is elég gyorsan
mert kéne mondani, nem egy másik f megnyitni, majd hívja a másik kódot.
>> Szóval, csak hogy teljesen tiszta, az f nyissa ki, hogy nem az új Katy Perry dalt
Kész mp3, ez lesz a szép sokat vissza azonnal.
És akkor már csak továbbra is ezt más dolog, mert minden, hogy most f
nyílt felhívás nem is mondja alapvetően mögöttes f open kód megnyitni ezt a fájlt
és ha végeztél megnyitása ebben a fájl vagy ha kap vissza,
majd futtassa a kódot.
De ez valójában nem fut a kód.
És volt egy kérdés?
>> Közönség: Úgy tűnt, hogy magában egy pár alkalommal, hogy ha számításigényes
intenzív kód fajta megtörni a [Hallhatatlan] vezérelt rendszert kapsz.
[Nem hallható]?
>> KEVIN SCHMID: Ez egy jó kérdés.
Szóval valójában egy példa arra, hogy akkor integrálni számításigényes
intenzív kódot egy kicsit.
Tehát, amikor eljutunk a kód példák, Én biztos, hogy húzza ki, hogy az egyik.
Ez rendben van?
Köszönöm.
>> Mi is a neve?
>> Közönség: Aaron.
>> KEVIN SCHMID: Aaron hozza fel egy nagyon jó pont, ami az, hogy ha lenne
néhány számításigényes kódot A do dolgot f rész, a többi
a program nem fut, és nem tud hallgatni Az új kérelmek, vagy semmit, amíg az összes
a cucc befejeződött.
Tehát, ha írok Node kódot általában ha nem teszünk valamit, mint én fogok
javasolni később, amikor megnézzük a kód példák, meg kell bizonyosodni arról, hogy
a kód nem köti fel ez az esemény hurok.
Van ennek értelme?
OK.
Cool.
>> Tehát Node.js kínálja ezt a keretet lehet építeni ezeket eseményvezérelt
szerverek.
Tehát van ilyen jellegű aszinkron nem blokkoló I / O-könyvtárak, míg a
A szabványos C könyvtárakat, hogy már dolgozik, mint ha csak
használja őket ugyanúgy, hogy már alkalmazza ezeket a f megnyílik, és
dolgok, ezek blokkolja, mert valóban meg kell várni
a fájlt megnyitni.
>> De Node.js ad, hogy, és ez alapvetően kötődik a Google V8
JavaScript motor, amely az oka hogy a Chrome annyira gyors a feldolgozó
JavaScript mert van ez a V8-as motor.
Szóval, tudom, hogy úgy hangzik, mint egy ilyen WWDC fejlesztői konferenciákon dolog
ahol csak dobjon egy csomó a betű szám dolgokat processzorok
és azt mondják, ez így jó.
De jó, hogy ők mert JavaScript -
vagy talán ha nem ismeri JavaScript még, mert még nem volt
Az előadások is -
de JavaScript egy interpretált nyelvet.
>> És ez egy fontos pont is.
Ezért fontos a mi web szerverek gyors, nem igaz?
És ha éppen fut JavaScript kódot, úgy értelmezték, csak
a régi tolmács lehet lassú.
Tehát Node hasznot, amelyek ezt a szupergyors V8 tolmács.
És nem tudom, hogy nevezték el mert a V8 pofon a homlokon
dolog, de az OK gombra.
>> Szóval már készített néhány példát ebben az URL-t.
A szeminárium után, én valami fog beszélni, hogyan juthat Node szett
fel, de most, én csak egyfajta akar a séta egy kódot példát.
Tehát, ha azt szeretnénk, hogy kövesse végig, az összes forráskód elérhető itt.
OK?
>> Úgyhogy hagyjuk ezt az URL- fel egy kicsit.
És akkor én csak úgy kapcsolja be a terminál.
Mindenki jó az URL-t?
Így fogok áttérni hogy a terminál itt.
>> Tehát itt a kód Van ma.
Miért nem kezdjük simpler.js fájlt?
A másik dolog az, hogy mindez kód lesz írva
JavaScript, amit lehet, Lehet, hogy nem ismerik.
Azt hiszem, egy-két dolog az, hogy sok A JavaScript kód az a fajta
szintaxis és szerkezete nagyon hasonlít a C, így egyfajta vedd fel
megy végig.
Megpróbáltam írni egy csomó a kiindulási kód olyan módon, hogy ez
hasonlít a C, így, hogy ez az egy kicsit olvasható.
De ahogy haladunk, ott leszek bizonyítva néhány további
jellemzői JavaScript a fajta cool.
>> De nézzük meg ezt a mintát a program.
Azt hiszem, minden a legnagyobb vágva ott.
Én csak úgy rögzíteni, hogy a valódi gyors, ha ez rendben van-e vagy sem.
Én nem tudom, mi ez fog csinálni.
Ez egy kicsit jobban?
Látod a var, meg ilyesmi?
OK.
>> Tehát az első sorban, mint a JavaScript változata egy változó
nyilatkozat.
Tehát csak kiemelni, hogy ez mit néz ki, mint a C. Szóval ez olyan, mint a
ezt mondom index értéke három vagy valami ilyesmi.
Szóval nem határozta meg a típus.
JavaScript megvannak típusú, de nagyon dinamikusan gépelt a természetben, így
nem nyújt semmilyen típusú rajta.
Így csak azt var.
Ez olyan, mint a változó.
OK?
>> És én hívom ezt a változót HTTP.
És a jobb oldalon van a kifejezés, amely azt szeretnénk, hogy a HTTP.
És ez azt mondja, szükség HTTP.
Tehát ez a fajta hasonlít tartalmazza.
Ez egy kicsit több, mint erősebb, mint abban az értelemben magában foglalja, amelyek magukban foglalják
is csak másolja be a fejléc fájl a funkció prototípus vagy
amit a meghatározások.
De szükség van valóban megy hogy minket a kódot.
>> Szóval lehet gondolni rá, mint importáló néhány kódot.
Tehát valahol a Node.js modulban rendszer, vagy bármi, akkor mindezt
HTTP szerver kódot, így vagyok elragadó ez a saját
személyes használatra ebben a programban.
OK?
>> Szóval, akkor én ezt a funkciót , hogy én írtam.
És észre, nem kell megadni A visszatérési típus, vagy hogy milyen típusú a
érveket újra.
Tehát egyfajta laza beírt hogy ilyen értelemben.
Két érv, hogy vesz, A kérés és válasz.
Szóval ez fogalmilag olyan, mint ismerős a kép, hogy mi volt
A képernyő előtt, mert megkapjuk ezt a kérést, hogy
van a felhasználó.
És akkor mi van a válasz, hogy az tudjuk írni a dolgokat.
>> Tehát az első sora ez nem res.writeHead 200, majd ezt
tartalomtípus szöveg sima.
Szóval ez a darab szét egy kicsit.
Úgyhogy csak összpontosítani res.write egy kicsit.
Tehát az írás alapvetően, és írni fej, csak módon egyfajta írja ki
dolgokat a választ.
OK?
Tehát olvasófej, ha valaki emlékszik A HTTP előadás, srá***
emlékszem fejléc a tetején a HTTP dolog?
Akkor miért nem csak demo fejlécek gyorsan.
Vajon, hogy hasznos?
Vagy inkább csak egyfajta -
OK.
Persze.
>> Tehát, amikor a böngésző megy google.com vagy valami ilyesmi,
van valójában egy kicsit -
ez olyan, mint egy titkos -
van, mint egy kicsit több információt , ami a csövön keresztül, mint
a kis keresés és a mindent.
Tehát, hogy mutassa meg ezt, én megyek használni a program neve Curl.
OK?
Tehát ez olyan dolog, amit lehet futtatni Mac OSX parancssorban vagy a
készülék vagy bármi.
És ha én Curl HTTP google.com, Megyek, hogy a HTML.
És ez, a méltányosság, csak a HTML fajta megmondja, hogy
átirányítani www, ha a böngésző nem automatikusan kezeli a
átirányítás.
>> Szóval ez csak a HTML, de megyek hozzá Curl ezt kötőjelet én zászló.
OK?
És ez fog mutatni nekem a fejléceket.
Tehát ez is információ, hogy jön keresztül, amikor kapom ezt a választ.
OK?
>> Így a tetején, ezt látja HTTP 301-mozog állandóan.
És ez a fajta fontos, mert ez vonatkozik a status kódot.
Tehát a 301-itt a státusz kódot, amely alapjában véve csak egy egész szám
hogy megmondja a böngésző vagy bárki is ezt olvasod, ha úgy tesznek, mintha
te egy böngészőt, és látja ezt, Alapvetően most, ha megnézi
ezt, és látod a 301., tudod, hogy van hogy nem valami különleges alapján
301, vagy valami különleges történt alapján a 301.
Tehát azt mondja költözött véglegesen.
>> Aztán, alapvetően mi egy csomó kulcs-érték párból.
Így megkapjuk a helyet a www.google.com.
És akkor milyen mindez más dolog, de alapvetően, mi a hely
mondás az új helyen van www.google.com.
Tehát most, ha elmész google.com, akkor egyfajta lásd a böngésző milyen blink
egy pillanatra, majd átirányítja jövök a www.google.com.
Így a válaszok tartalmazhat Ezek a fejlécek.
>> És egy-két dolgot kiemelni.
Mondjuk mi volt valójában a sikeres meglátogatunk egy weboldalt.
Szóval, hadd menjen -
mi a jó honlap?
Én vagyok rossz gondolkodás jó weboldalak a helyszínen.
>> Közönség: Wikipedia.
>> KEVIN SCHMID: OK.
Csináljuk Wikipedia.
Tehát itt én került át.
Ó, várj.
Voltam?
Igen, ott voltam.
OK.
Így kell csinálni www.
Így fogok tenni www.
És amint látod, itt a HTML hogy a böngésző feldolgozza
a Wikipedia.
>> De ha tartani görgetés itt, mit fogok látni a tetején -
wow, van egy csomó HTML a Wikipedia -
de amit látok a tetején itt ez 200 státusz kód, szemben a
301. láttam korábban.
És észre, hogy van egy szép barát OK mellette.
Tehát ez olyan, mint a jó állapot kódot.
>> Van, hogy a 200 szám ismerős?
Igen, mert amikor én simpler.js, Írtam egy 200 is.
Szóval ez alapvetően azt mondja a böngésző vagy aki próbál eljutni
ez az, hogy sikeresek voltak.
Vagy ez a fajta, mint mi sikerült is.
>> És itt van ez a fajta különleges szintaxist A Javascript nyilvánító
térképe ezek a kulcsok, mint a tartalom típus és ezek az értékek, mint a szöveg egyszerű.
Tehát, ha megnézi a választ, hogy mi kaptam vissza a Wikipedia előtt, -
Meg fogom próbálni görgetni egy kicsit gyorsabban -
akkor ezek a kulcsok, mint a szerver és ezek az értékek az Apache.
Szóval megvan kulcsokat és értékeket.
És megadhatja ezt Node mit küld vissza.
>> Tehát ez valójában milyen, az egyes módon, és bizonyos szempontból ez nem
igazán, de ez egy kicsit alacsonyabb szinten mint a PHP kód, ami lehet, hogy
írásban P beállított hét, mivel a PHP és a Apache egyfajta vigyázni néhány
ezeket a dolgokat az Ön számára.
A PHP-ban, akkor felülbírálhatja az alapértelmezett viselkedés írásban a saját fejlécét.
De a E, megkapjuk hogy írjon ki a saját fejlécét.
>> Tehát nem ezt a vonalat értelme mindenki, az írási fej vonal?
OK.
Félelmetes.
>> Szóval, akkor mit tegyek, hogy én vége a választ mondván hello world.
OK.
De ez csak egy függvény úgynevezett kérést kezelő.
Így most valójában, hogy milyen do valamit ez a funkció, igaz?
>> Tehát itt, amit csinálok van ez vonal, amely nem var server egyenlő
HTTP.create server, aztán át a kérést kezelő.
Tehát ez a fajta a Node módon, hogy létrehozza a szerveren.
Vegyük észre, hogy én vagyok elhaladó a kérelemben kezelő.
Tehát ez azt mondja a createServer funkció azt akarom, hogy nekem egy
szervert, és amikor a kiszolgáló megkapja a válasz, azt akarom, hogy hívja ezt a
kérjen függvény.
OK?
>> Tehát, hogy a vonal nagyjából befejezi azonnal.
Így a var szerver vonalon kész van Miután csinálni elég sok.
Úgy értem, azt, hogy hozzanak létre egy belső állam tudja, hogy meg kellett volna
hívja a kérelmet függvény, hanem ez nem fog ott ülni, és
mondjuk az a felhasználónak küldött nekem egy kérést még?
Már a felhasználónak küldött nekem egy kérést még?
Így nem blokkolja.
OK?
>> Szóval mi ez fog tenni ez alapvetően Most tárolja a mutatót a kódot,
ezt a kérést kezelő funkciót, majd fut a kód, ha valaki
teszi a kérelmet.
És akkor mi server.listen.
>> A 1337 van elég önkényes.
Nem volt különösebb oka a szedés ez a szám.
Ez teljesen véletlenszerű.
De ez csak megadja azt a portot.
Így a legtöbb web szerver látni fogod, hogy a használjon 80-as port, mert ez a fajta
, mint az egyezmény.
Tehát, ha elmegyek valami hasonló, Nem is tudom, Wikipedia.org,
és tettem colon 8 -
oh wow, nem lehet látni, hogy az.
Sajnálom.
De ha én Wikipedia -
Írok ide csak azért, hogy ez egyértelmű a kamera.
De ha ezt egy böngésző kettőspont 80., amely meghatározza menjen
Wikipedia.org a 80-as porton.
Szóval, ez olyan, mint, hogy az Egyesült Államok több port, mint ahol a hajó
dolog, hogy milyen.
Szóval, ez olyan, mint menni az adott helyet a szerveren.
OK.
>> Szóval csak úgy döntött, 1337.
Van egy egész sor számok , akkor vedd.
Ez nem volt teljesen különleges.
>> De mit fogok most csinálni nem fogok futni Node.
Hadd ténylegesen be, hogy egy pár vonalak le úgy, hogy láthatja azt.
Fogok csinálni Node, és én vagyok fog futni simpler.js.
És fogunk beszélni, hogyan lehet Node létre egy kicsit.
De most már csak fut a szerver.
>> Tehát az egyik dolog, amit lehet próbálni, amely lehet, hogy nem az, hogy izgalmas, mi is valójában
megpróbálja elérni azt Curl.
Így tudom csinálni Curl, és az én gép helyi gépre.
Azt is látni ezt írásban így néha.
A helyi gazda és 127.0.0.1 kedvesek , mint otthoni számítógépén.
Szóval, ez olyan, mint beszél a saját számítógépén.
OK.
>> És akkor azt mondhatom, 1337.
Tehát, ha én vezetem ezt a kódsort, azt mondja, hello world.
És ha azt akartam látni, hogy a dolgokat, hogy volt tartalomtípus szöveg sima vagy
amit én, sőt, hogy ezt itt.
És észre, hogy nem azt mondják, rendben.
És megvan a szöveget sima.
És akkor ott van egyfajta mindez más dolog, hogy csomópont hozzá
ott nekem.
Ez nem szuper fontos.
>> Úgy értem, van valamilyen technikai aspektusait abban kedvesek
A jó beszélni, de csak megmutatni te, én is a hatalom, hogy
változtatni ezeket a körül.
Szóval csak adj egy csomó Az ilyesmi.
És akkor most, ha én meg az én kimenet, akkor az lesz, hogy.
Tehát ezek a fejlécek jelentenek bizonyos dolgokat a böngészők és hasonló dolgok.
>> És fejlécek alapvetően mondani böngésző hogyan reagálnak a valamit.
Ha valaha is hallott a cookie-k előtt, vagy ha már valaha bosszús
egy weboldal cookie-k mentése, vagy be van kapcsolva a cookie blokk vagy
valami ilyesmi.
Tudod valójában sütik ezekben a fejlécek.
Így mondják a böngészőt, hogy hogyan viselkedés bizonyos esetekben.
OK.
>> Szóval ez volt simpler.js.
Van valakinek kérdése azon a forráskód fájl?
OK.
Cool.
>> Szóval vegye ki a r az adott és nézd simple.js.
Tehát ez nagyjából ugyanazt a programot.
Én csak írtam, egy kicsit másképp mert azt akartam, hogy egyfajta kiemelés
néhány jellemzője JavaScript.
>> Így észre, hogy a kérés kezelő funkció teljesen eltűnt.
Ó igen, volt már a kérdés?
>> Közönség: Igen, az érvek , amelyeket át kell, hogy
funkció, mik ezek?
>> KEVIN SCHMID: Tehát ezek JavaScript objektumok.
A Node.js dokumentációban, az alapvetően azt mondja, milyen módszerek
elérhető a számukra.
Mi csak úgy történnek, hogy a hozzáférést Ez a módszer az úgynevezett olvasófej és vége
és ilyesmi.
De van egy csomó több módszer.
>> És például, mint az egyikük különösen a rec, meg tudod csinálni
valami hasonló rec.method, ami mondani, hogy ez egy HTTP GET vagy
HTTP post kérések és ilyesmi.
Tehát van a legkülönbözőbb tulajdonságait, de ők is
JavaScript objektumok, és csak funkciók tárolni, hogy
lehet írni a dolgokat.
OK?
>> Tehát észre, hogy kérést kezelő teljesen eltűnt.
De a kódot, hogy volt a kérése handler még mindig ott van.
Még mindig ez a res.writeHead és még mindig ez a res.end.
És mi ez az egy példa a JavaScript ez az ötlet egy
névtelen funkciót.
és a névtelen, mint méltó nevet mert, mert a szó szoros értelmében nem
van neve.
Nincs funkciója kérése handler ott.
>> Nincs neve, de még mindig vesz egy érvet.
Szóval mindig van rec és res.
És én még mindig a kódot.
Ez tökéletesen JavaScript kódot.
Szóval kijelenthetjük funkció nélkül kifejezetten így ez a név.
Ez egy kicsit zavaró az első.
Van néhány, mint a hasznos dolgokat hogy meg tudod csinálni
e névtelen funkciókat.
Van valakinek bármilyen kérdése van ezen, vagy ez rendben van csak, most,
a fajta csak elfogadni, hogy a akkor nem ugyanaz a dolog?
Igen?
>> Közönség: a függvények első osztály JavaScript?
>> KEVIN SCHMID: Ezek az első osztály JavaScript.
És tudom, hogy ezek a fogalmak a halad egy névtelen függvény, mint
ez vonatkozik a JavaScript, hogy Lehet írni a végső projekt
a böngésző is.
Így például a JavaScriptet a böngésző, ez is kissé esemény
vezérelt abban az értelemben, hogy mit fog van, ha a felhasználó rákattint erre
gomb, azt akarom, hogy ezt a kódot.
>> Szóval ez ugyanolyan elképzeléseit kliens oldalon, amikor egy egérkattintással, vagy
egeret néhány képet a weboldalt, ezt a kódot.
Ezt lehet alkalmazni a szervereket.
Tehát ez olyan, mint az izgalmas oka annak, hogy a JavaScript egy nagyon
megfelelő, vagy néhány ember úgy gondolja, hogy ez egy nyelv alkalmas az ilyen jellegű
esemény vezető szervert, mert van e névtelen funkciókat.
Van az egész ötlet ez aszinkron kódot.
OK.
Van valakinek kérdése?
>> OK.
Szóval ez volt simple.js.
Tehát nézzük meg még egy vagy még egy pár.
Tehát ez sleep.js.
Szóval bárki ismeri A C funkció aludni?
A talán az egyik korábbi előadások vagy valami ilyesmi?
>> Tehát alapvetően akkor át az azt hiszem, másodpercek száma, vagy ha a U
alvás számos ezredmásodperc vagy ns.
És alapvetően a program csak megáll futott ennyi ideig.
Nem igaz?
És akkor felébredek, és végül akkor majd csak tovább fut
a programot.
>> Tehát ez a szerver a fajta adja a benyomást alszik.
Így észre, hogy ugyanaz a res.writeHead 200 a fejlécet
előtt, de aztán hívod ezt funkció az úgynevezett set timeout.
Állítsa be időtúllépés is elérhető A böngésző a Google Chrome
vagy a Safari vagy bármi.
És tulajdonképpen mit csinál itt az, hogy ez vesz egy funkciót.
Megjegyzés, megint, ez egy névtelen funkciót.
Szóval ez ilyen jó, mert mi vagyunk segítségével egy névtelen függvény belüli
névtelen függvény, amely lehet egy kicsit furcsa.
>> De ez figyelembe ezt a funkciót, ami alapvetően azt mondja -, és ahogy ezt a
művek az 5000 ezredmásodperc, azt akarom, , hogy végre ezt a funkciót, amely
csak véget ér a választ, és írja hé.
Tehát ez azt a benyomást kelti, mint alszik, de ahogy ez valójában
működik majd végigmenni ez a sor nagyon gyorsan.
Mi csak írásban valamit.
És akkor mi is végigmenni ez a sor nagyon gyorsan.
Szóval valójában nem lesz hogy várjon öt másodpercet.
Mi csak fog futni ezt a kódot azonnal.
>> És akkor ott van, megint, ez a kis Amennyiben loop, hogy most már ez a dolog
nyilvántartások, hogy alapvetően csak folyamatosan megy körbe
és néztem az órát egy-egy téma és a mondás, öt másodperc alatt
telt még?
És amikor azt látja, hogy a második keze mozgott, mint öt másodperc
mindegy, majd felébred, és azt mondja: ó, mit kell tennem?
Ó, azt kell futtatni ezt a kódot.
És akkor fog fuss res.end hé.
>> Tehát újra, mi soha nem vár itt.
Tehát nem az, hogy ezt a kódot belsejében ez a funkció fog tartani öt
másodperc alatt futni.
Ez a kód fog futni nagyjából azonnal, legalább képest
az öt másodpercet, hogy beszéltünk a korábban előtt.
>> Szóval, csak azt mutatják, ez az intézkedés, Meg tudom csinálni Node.sleep.js.
És nem azért elrontani valamit?
Esetleg.
Bocsánat.
Lássuk, mit tehetünk, hogy erősít ez.
OK.
Tehát feltétlenül használjon Node.js.
Csak vicceltem.
OK.
Csak egy pillanat.
OK.
Tudom, hogy mi az.
>> Tehát a kérdés az, hogy a másik fülön Itt futottam Node már
hogy ugyanarra a címre, 1337.
Így a hiba, hogy ez dobott, ha megnézzük rajta igazi szoros, a cím
használható, EADDRINUSE.
Szóval már a 1337 itt.
Szóval, ha azt állítsa ezt le, aztán most megpróbálja futtatni ezt remélhetőleg minden
rendben lesz.
OK.
Így csak egy dolog sort hallgatni a port egyszerre.
A másik megoldás lett volna a számomra hogy csak szerkeszteni, hogy a program, és
ez olyan, mint 1338, vagy valami ilyesmi.
>> De most alvás fut.
Szóval tényleg próbálja ki a böngésző, ezúttal azért, mert ez egy
kis unalmas, hogy azt egy terminálon.
Szóval csak úgy megy, hogy a 127 cím ismét a 1337.
És ha látod, hogy -
Nem tudom, ha tudsz - de a a böngésző, hogy egy nagyon-nagyon hosszú
időt tölteni, vagy mint öt másodpercet.
>> És azután, hogy végül véget ért a választ.
És nem látom, mert a dolog mozog egy kicsit, de ha teszek
ez egy kicsit kisebb, akkor Láthatjuk azt mondja, hé.
Szóval megvan a hé, de öt másodperc elteltével.
És lehet, hogy egy kicsit tisztább, hogy itt a terminálon, tehát vagyok
fog tenni a -
csináljuk itt -
csináljuk Curl ezt a címet ismét a 1337.
És én csak ilyen van, hogy ülni Itt öt másodpercig.
Vegyük észre, hogy a szerver el tudja fogadni az új válaszokat.
Tehát nyomtat hé.
>> És demo ez alapvetően mi Meg tudom csinálni a másik fül -
Mondjuk én ezt egy másik lapon Fogok csinálni Curl és ugyanaz
már megint.
És fogok próbálja rúgni ezeket a fiúk le ugyanabban az időben.
Így fogom csinálni ezt, és én vagyok fog versenyezni itt, és én vagyok
majd újra meg újra.
>> És tegyük úgy, hogy Láthatjuk mind a ketten.
Ez egy nyomtatott hé, és hogy egy nyomtatott hé egészen a -
csináljuk a kísérletet újra.
Valójában, nézzük ezt a trükk, ha nem gond.
>> Így fogok egy shell dolog, lehetővé teszi számomra, hogy alapvetően fut két példányban
A program párhuzamosan.
Így fog futni az első program A második program párhuzamosan.
Tehát most, ha azt az Enter gombot, hogy megy , hogy ezt a kérést nagyjából
azonnal ugyanabban az időben.
Szóval hogy ez egy lövés.
>> Tehát most észre azt mondja, a két folyamat.
És ha kíváncsi vagy, hogy 27000 szám alapvetően a folyamat azonosítója.
És akkor veszi észre, mert a nyomtatott hé ugyanabban az időben.
Nem volt, mint kellett várjon öt másodpercig az egyik, majd azt követően, hogy
Öt másodperccel később, hogy a második.
Szóval ez a fajta, bizonyos szempontból, ez nem igazán bizonyíték, de ez
intuitív bizonyíték arra, hogy ez nem csak mint várni öt másodpercet, és blokkolja
az egész téma.
OK cool.
>> Tehát Aaron feltett egy kérdést korábban, hogy volt, illetve mi lenne, ha nem csinál valamit -
Igen?
>> Közönség: Várjon.
Hogy is van ez eltér a printf buffer, igaz?
Nem automatikusan csinálni?
Miért kell aggódnod?
>> KEVIN SCHMID: Ó, tudtad azt mondják, hogy még egyszer?
>> Közönség: Nem szereti printf puffer nem pontosan ugyanaz a dolog?
>> KEVIN SCHMID: A printf puffer?
>> Közönség: Igen.
OK.
Nem volt az egyik voltak vetélkedők beszélt arról, hogy ha a jobb printf
valamit, majd azt, hogy egy szünet a második, és akkor azt loop tíz
idő, akkor az várjon tíz másodpercet, és akkor printf mindent együtt?
>> KEVIN SCHMID: Oh, OK.
>> Közönség: csinálja ugyanazt dolog, akkor ebben az esetben?
>> KEVIN SCHMID: Tehát a kérdés az volt, alapvetően az egyik korábbi vetélkedők
, vagy valami, volt a kérdés, hogy Alapvetően, ha azt mondod, print f 10
a dolgok egy ideig, majd aludt, mint A folyamat a nyomtatás ki azokat,
a végén valamilyen oknál fogva, akkor lenne csak kiírási azok az összes ki a képernyőn.
Tehát van olyan két különböző fogalmak itt.
>> Szóval azt hiszem, az egyik dolog, hogy ez a az esetben van dolgunk két különböző
a fajta ember azt kérdezi a szerver a dolgok ugyanabban az időben.
És az ok, hogy a printf fajta vár, mint azt, és guba az egészet ki
egyszerre inkáb hogyan printf fajta -
így az út printf valójában végre ez alapvetően meg kell
beszélni az operációs rendszer írni ilyesmi a konzolra.
Tehát nem akar mindent megtesz, hogy dolog azonnal, amikor azt mondod printf
néhány szöveg, mert ami kap drága, ha azt, hogy
csinálni, hogy minden alkalommal.
>> Tehát, ha nem printf hé, a programban Lehet, hogy valójában nem nyomtat, hogy
azonnal a konzol.
Lehet, hogy azt mondják, OK, én írtam.
És akkor milyen várni, hogy ez egy kicsit, mielőtt ténylegesen
küldi ki a konzolra.
>> Tehát az oka, hogy ez volt a helyzet -
és ez a fajta nem kapcsolódó Az alvás -
az, hogy az alvás a fajta csak injektált ott bizonyítani a
a tény, hogy nem írja ez szinkron.
De az oka, hogy csak teljesítményt, így nem kell
tenni, hogy sok kapcsolatok Az operációs rendszer.
>> De itt, amit mi igazán próbál csinálni ezzel az alvás dolog, csak azt mutatják,
, hogy ha van két ember látogatta ezen a honlapon, ez nem megy, hogy
őket egy sor, ahol ez fog mondani Van, hogy segítsen, és amikor én vagyok
Teljesen kész segít ezek után öt másodpercig, aztán megyek
mozog-ra a következő személyt.
Tehát az első, aki a kérelem nem köti le, hogy az esemény hurok
ha van értelme.
>> De itt valójában egy példa valami, ami nyakkendő
fel az esemény hurok.
Tehát itt egy szörnyű funkció kiszámítja az n-edik Fibonacci.
Ez szó szerint a legrosszabb módon is kiszámítja az n-edik Fibonacci-szám.
És ez valójában csak elismerni honnan van,
van valójában -
Úgy értem, akkor próbálja menni találni - de van, mint egy nagyon hosszú blog
tegye, hogy valaki írta.
Ez olyan, mint egy olyan Reddit dolgokat.
De valaki bírálta Node.js, és hogy használják ezt a példát.
Szóval ilyen akartam, csak mutassa meg, két különböző nézőpontok csak azért, hogy
általános megértése a fogalmak mögött a két dolgot.
>> De ezt választják, csak a szörnyű, rettenetesen hatékony számítási
intenzív módon, hogy kiszámolja a n-edik Fibonacci-szám.
Szóval, ahogy Mellékesen jegyzem meg, hogy miért van ez szörnyű, mint egy út?
Igen?
>> Közönség: Mondja el, hogy indul ki 1000.
1000 tagolódik 999 és a 998.
Minden ez osztja két dolgot.
Minden ez osztja két dolgot.
>> KEVIN SCHMID: Így van.
>> Közönség: egészen.
>> KEVIN SCHMID: Pontosan.
Szóval, csak azért, hogy ismételje meg a kamera, ha hívja fib on, mint a 1000, vagy valami
így, ez nyilvánvalóan nem kevesebb, mint vagy egyenlő, mint egy, így fogok
megy ez más helyzet, és aztán megyek hívni fib 999 plusz fib 998.
És akkor elég sok minden, hogy a munka fib 999 tesz,
fajta ezen a szinten.
Ha megy le, ez még felesleges , mint az, de ha csak
Szerintem számítástechnikai FIB 998 lesz mi elég közel fib 999.
Szóval tényleg egy kicsit okos arról, hogyan milyen újra
Ezek, de mi nem újrahasznosítása ezek a dolgok egyáltalán.
Így el lehet képzelni ezt a hatalmas, hatalmas fa, amely csak szörnyű.
>> De akárhogy is, az OK gombra.
Szóval ez volt a FIB.
Csak eltart egy ideig futtatni.
Igen?
>> Közönség: [hallható].
>> KEVIN SCHMID: Ó, tudtad ismételje meg a kérdést?
>> Közönség: [hallható].
>> KEVIN SCHMID: Ó, így ez csak kód hogy lesz valami a
szerver oldalon.
Tehát ez nem lesz megtalálható a böngészőben, vagy ilyesmi.
Ez alapvetően mi van, hogy ha a felhasználó itt nagyjából teszi
kérésüket ismét amikor valami olyan kérelmet, fogunk hívni
Ez a funkció a szerver oldalon.
És akkor mi lesz az eredmény vissza meghívja ezt a funkciót.
És aztán csak nyomtatni azt, hogy a felhasználó számára.
Így a felhasználó nem igazán foglalkozik Ha ez a funkció túl sok.
>> Ez volt a kérdés?
Van ennek értelme?
OK.
Cool.
>> Tehát újra, mi ez az egész res.writeHead dolog, ahol ki kell nyomtatni
A fejléc.
Aztán vége a választ ezzel a bűvös szám FIB 45.
Úgyhogy csak futni ezen a szerveren.
Így fogok tenni a Node fib.js.
Tehát most a fib fut.
>> És akkor itt fogom tenni egy ilyen.
OK?
Szóval csak annyit mondtam, Curl.
Így fog tartani egy darabig, de remélhetőleg hamarosan befejezi, és
kiírja, hogy a 45. Fibonacci-szám.
>> Közönség: [hallható].
>> KEVIN SCHMID: Meg kell kap tenni hamarosan.
Így kell, hogy 5-6 másodpercre.
Én nem tudom, hogy ez csak V8 hogy szuper gyors, de minden esetben, ez egy
nagyon rövid példa, és szándékosan nem elegáns egy nem-triviális
számítás.
Így egy idő után, nem kap meg.
>> De most, mi van, ha én, hogy ugyanazt az kísérletet, mint korábban, amikor azt, hogy
két kérelmet ugyanabban az időben?
Tehát itt fogok a göndör a címet, és meg fogom
csinálni egy Curl.
És ne feledd, amikor tette ezt a aludni server, amikor tulajdonképpen már azt
öt másodperc, akkor elég mennyi is jött vissza a jobb
körül ugyanabban az időben.
Tehát nem volt különösen kötözve.
>> De próbáljuk meg most.
OK, így megvan a két folyamat.
Ne feledje, ezek a folyamat azonosítók.
Ez lesz egy kicsit kínos míg mi elakad.
Úgyhogy csak itt maradni, és várni.
>> Így egyikük jöjjön vissza, miután, mint a -
OK, így sem jött vissza.
De akkor miért nem a második egy jön vissza csak még?
Igen?
>> Közönség: A kiszolgáló nem tud semmit míg ez számítástechnika, hogy nagy szám.
>> KEVIN SCHMID: Így van.
Tehát a válasz az volt, hogy csak a szerver tényleg nem tehet semmit, amíg
ez számítástechnika, hogy Fibonacci számot.
Így most már csak kaptam két dolgot vissza.
De azt hiszem, csak azért, hogy gondoljon a kódot egy kicsit, hogyan is működik
minden.
>> Tehát ez a funkció itt a kód, amely Mondtam már ezen a szerveren fut, amikor
kap új bejövő kérést.
Tehát ez csak fog futni ezen keresztül teljes kódot, és akkor fog menni
biztonsági másolatot az esemény hurok, majd folytassa ellenőrizze az új eseményeket.
Tehát alapvetően, amit mi történik a szerver
hallgat az új dolgokat.
Az első, aki megkérdezi, amit 45.
Futunk ezt a kódot kiszámítania.
Ez a kód kerül nagyjából öt hat másodperc alatt futtatni.
Aztán menj vissza az esemény hurok és ellenőrizze az új kéréseket.
>> Tehát ez egy példa arra, hogy hogyan, ha a dolgok, amelyek az úgynevezett számítási
kötött, vagy használja a sok számítási, nem hatalom, de mint a
számításigényes -
Azt hiszem, egy dolgot mondani erről, hogy ez a funkció csinál teljesen,
a legtöbb, szép hasznos munkát jobbra.
Az egész idő alatt, hogy a visszahívási funkció működik, ez elég
nagy kiadások a legtöbb időt, csak számítástechnika, hogy n-edik Fibonacci számot.
>> De már csak egy szál foglalkozni.
Az Apache modellben, amikor két ember a kérést, hogy fib 45, akkor
lett volna két különböző szálak.
És akkor az operációs rendszer feladata lett volna, vagy a felhasználói szintű
kód, amely kezeli a szálak, volna volt, a szelet, hogy akár a
CPU, vagy akkor is, ha már több CPU, osztja el egyenletesen az egész CPU-k
úgy, hogy mindketten célba nagyjából ugyanabban az időben.
>> Szóval, csak azért, hogy mutassa meg, hogyan tudjuk rendezni a - , és ez nem egy teljes tökéletes
megoldás, de a fajta, hogyan lehet hogy gyere vissza, és nem
egy kicsit jobban.
Szóval mi van itt egy program neve FIB C. És ez alapvetően használ
egy másik csomópont modul neve A gyermek folyamat modul.
Szóval már bele, hogy a tetején a fajta , mint én tennék egy font közé
gyermek process.h vagy valami.
Most már hozzáférhetnek ehhez CP változó amely az én funkciót.
>> Most mit csinál ez a válasz felvezető Futok a program
dot slash FIB 45.
Szóval, mit tettem - és én csak megy kilépni a program egy
kicsit -
van Írtam egy C program alapvetően kiszámítja a
n-edik Fibonacci-szám.
Tehát itt csak egy program, amit írt C-ben, hogy kiszámolja ezt.
Tudom fordítani, és tudok futni ez a parancssorban.
És ez fog számítani a 45. Fibonacci szám.
>> Így észre csak úgy nagyjából olyan hosszú.
Talán lehetett volna használni kötőjel 03 a optimalizálni, vagy valami ilyesmi,
de én csak tettem, mint a rendszeres fordító beállításait.
És kinyomtatja azt.
>> De most, mit is ilyen vagy?
Ó, sajnálom, hibás fájlt.
Szóval csinálni ugyanazokat a dolgokat a a fejléc, mint korábban.
Aztán ezt cp.exec.
Szóval mi ez fog csinálni az, hogy ez fog futni a program.
De ahogy ez működik, hogy ez nem fog várni
a program a befejezéshez.
Csak lényegében azt mondja, végre ezt a programot.
Tehát alapvetően írja ezt a parancssori fajta.
>> És aztán, amikor kész azt, futtassa ezt a funkciót.
Tehát most már olyan, hogy ennek a egész restaurált dolog
mintha nem várunk.
Vajon ez a fajta van értelme?
Igen?
>> Közönség: [Nem hallható]?
>> KEVIN SCHMID: Tehát ez valóban nyit egy új eljárást kell csinálni.
Tehát ez valójában, bizonyos szempontból, gonosz, nem szuper gonosz, de
Fontos, hogy azt mondják, hogy ez a fajta megy vissza, egyrészt az Apache
modell, ahol mi szálak és folyamatok minden egyes kérelem vagy
folyamatok minden kérés.
Tehát ez a fajta hasonló amit Apache csinál.
Bizonyos esetekben, akkor csak használ egy új menet, amely egy kicsit több fényt
súlya van, mint a folyamat, de az Apache tudott végén elágazás egy új folyamat
ami elég, amit teszünk itt implicit ezzel pont perjel FIB 45.
>> És akkor ebben az esetben azt a fajta merülnek azonos költségeit folyamatokat.
Tehát ez csak egy dolog, amit tehetünk.
De csak hogy megmutassa ezt a fajta futás.
És ez a beszéd csak igazán célja bemutató ilyen jellegű programok, mint a
módja megmutatni különböző nézőpontokból hogyan tervezzünk szerverek, mint ezt.
Szóval ez fut, és most, ha én ez megint, van két folyamat azonosítók.
>> Nézzük csak beszélni dolog rámutatni.
Így észre, hogy ők fokozatosan.
Ez jó.
Mert 27122 előtt.
De figyeljük meg most, hogy jött vissza nagyjából ugyanabban az időben.
>> És most, egy jó kérdés, hogy kérdezni Miért volt ez az ügy, akinek feladata
volt, most, hogy a fajta, hogy ezeket a dolgokat fajta játék vásár minden
másik, a két esetben a dot slash fib 45, hogy én futottam
vagy a Node futott?
Aki a fajta teszi, igazságos, hogy mindketten hogy milyen egyensúlyban futási idő?
>> Közönség: [hallható].
>> KEVIN SCHMID: Igen.
Tehát alapvetően, amikor én pont slash FIB 45, vagy valami ilyesmi, most már
fajta akár az operációs rendszer kezelni a futási e programok.
És most már lehet ütemezni őket A különböző CPU vagy
A menetrend őket.
Ez szeleteljük fel az időt, hogy az egyik CPU-t kap, vagy hogy kap
fut egy CPU.
Szóval ez az ötlet mögött.
Van ennek értelme, hogy mindenki?
Tehát most Node nem igazán játszik részt osztódó ezeket a feladatokat.
OK.
>> Szóval ez majdnem azt példát.
Csak meg akartam mutatni egy dolog mert sok ez eddig
nem teljesen szuper praktikus bizonyos esetekben.
El tudom képzelni, jön haza után beszélni, és valami, és azt mondja ki,
jól Valahogy kiszálltam, hogy a vita, hogy Tudom, hogy a Fibonacci szerver
a végleges projekt.
Tehát itt csak egyfajta még egy példa amely remélhetőleg -
Talán nem, de talán - egy kicsit egyfajta vonatkozó végső projektek és
előre gondolkodni a dolgok, mint ezt.
>> Tehát ez chat.js.
Tehát ez olyan, mint egy kis minta szerver oldali kód, amit lehet használni, hogy
létrehozott egy kis chat szerver, mint a lehet, hogy látta a
Facebook Chat, vagy bármi.
Tehát nem azt mondom, ez olyan, mint a Facebook Chat, de ez a fajta
mint egy jó - talán nem jó, de talán jó - kiindulópontja a chat
szerver az Ön weboldalán a végleges projekt.
Akkor nézzük meg, mit csinál.
>> Szóval hogy ez a különleges dolog a tetején, ez var SIO
egyenlő igényelnek Socket.IO.
Tehát ez egy másik dolog, hogy ez nem valóban jön a csomagban
Node de lehet telepíteni.
Ez egy csomópont modult.
Szóval, ez csak, mint egy kiterjesztése a csomópont.
>> SocketIO valójában nagyon egyfajta hűvös.
Ez egy absztrakció, amely alapvetően mi ez nem az, ez lehetővé teszi, hogy
ezt patak kommunikáció között a web
böngésző és a webszerver.
Így a legtöbb eddig is megvolt ezeket a nagyon gyors egy-két másodpercig
másodperc közötti kommunikáció a web böngésző és a webszerver.
Szóval ez alapvetően megy a google.com, get a cucc, küldje vissza, majd a
végeztünk.
Mi soha nem beszél addig, amíg a felhasználó beír valami mást.
>> De mi Socket.IO és hasonló jellegű a dolgok - és SocketIO valójában egy
A dolog, ami épül, mint WebSocket amely egyfajta rendelkezésre
részeként HTML5 -
, amely lehetővé teszi, hogy ezt a folyamatos párbeszéd.
És ez nagyon hasznos a chat szerver a fajta dolog, mert
olyan, mint egy folyamatos párbeszéd bizonyos szempontból, mert ha beszélgetni
valakivel, akkor már csak küldeni üzenetet le a csövet, majd a
szerver üzenetet küldeni le cső, hogy a másik személy te
beszélget.
És akkor ezt csere ilyesmi.
>> Tehát ez a fajta, amit SocketIO jó.
Ennek az az oka, hogy az SocketIO használó WebSockets az egy dolog, hogy
Amellett, hogy csak a jó öreg WebSockets, ez is csinál néhány trükköt, hogy alapvetően
hogy kompatibilis a böngészővel.
Szóval, böngészők, mint az Internet Explorer sajnos nem támogatja WebSockets
jobb kívül a doboz.
Így használ valamilyen más jó ügyes dolgokat Adobe Flash, hogy
teszi, hogy több böngésző támogatja.
Szóval ez tényleg hasznos.
>> És valóban, tudom, hogy én vagyok ilyen futó idő, de CS50
Beszéljétek meg, hogy valaha is látott valamit mint, nem is tudom, üres így és így
megválaszolása ezen a poszton, vagy valami mint az, hogy a szolgáltatás?
Ez SocketIO.
Tehát, ha valaki elkezd írni a megvitassák box, hogy a válasz, vagy
valamit, a böngésző nem mi hívott SocketIO bocsát ki valamilyen
esetben, ha azt mondja valaki, ez válaszol az ezen a poszton.
>> Akkor a szerver azt mondja, OK, Mit kell tennem?
Hát most már el kell mondanom a többi srác akik a CS50 Fórum látszó
az ezen a poszton, hogy valaki válaszol.
Szóval ez a fajta, amit SocketIO is jó, ez a folyamatos fajta
patak a párbeszéd.
OK.
>> Szóval, mi van itt - és mi csak fogja figyelmen kívül hagyni a kapcsolatok tömb
egy kicsit -
, amit én csinálok, az én másik hallgatni.
Szóval, ez csak az utat Socket.IO van mondván, hallgassuk ezen a porton.
És akkor én ezt a kapcsolatot.
Szóval ez csak alapvetően Socket IO által szóval, ha kap egy
kapcsolatban, szeretném, ha futtatni ezt a kódot.
>> És észre, hogy ahelyett, hogy rec és a res telt ott van aljzat.
És ez a Socket ötlet alapvetően ez dolog, hogy meg lehet írni és olvasni
attól, hogy a felhasználó rendelkezik üzenetek esetleg.
És az üzenetek küld megy át, hogy az aljzat.
Van ennek értelme?
Tehát ez a folyamatos dolog.
>> Szóval, amit én nem is hívom Socket.emit.
És bocsátanak ki veszi elég sokat két érv.
Az első argumentum egy karakterlánc csak típusát képviselő
dolog, amit kibocsátó.
Tehát ebben az esetben, én már használata ez a szöveg az új üzenetet.
És ez még csak lényegében azt mondja, hogy hogy milyen típusú ez a dolog, amit én
küldött, egy új üzenetet.
Így meg lehet hallgatni az egyes típusok mint az új üzenetet, vagy bármi
használatával dot on.
>> Tehát kapcsolat és a felhasználói küldték oda, ha a megnézi hol hívni ponttal,
ezek más húrok képviselő típusú felhasználói üzeneteket.
Tehát alapvetően akkor ezt bocsátanak ki egy ilyen üzenet típusok, és
majd valami válaszként egy ilyen típusú üzenet
>> Szóval kibocsátó ezt az új üzenetet.
Fogunk figyelmen kívül hagyni connections.push egy pillanatra.
De akkor azt mondom, Socket.on felhasználónak küldött.
Tehát most ez olyan, mint amikor a felhasználó küld nekem egy üzenetet, azt akarom,
, hogy ezt a kódot.
Vegyük észre, hogy a névtelen függvény vesz ebben a változó
úgynevezett adatok alapvetően fogja hogy a felhasználó üzenetet.
>> És most nézzük a fajta beszélni A kapcsolatok tömb.
Szóval ez a célja, hogy egy chat kliens ahol gyakorlatilag mindenki ilyen in
ugyanazt a chat szobában.
Tehát alapvetően, amit meg kell tartani körül néhány tömb, hogy alapvetően
képviseli az egész nép beszélget Bizonyos szempontból, ha van értelme.
Nem igaz?
Mert tudnunk kell, hogy kik azok a fickók annyira el tudjuk küldeni nekik az üzeneteket
hogy más emberek küldjön nekünk.
>> Szóval mi ez a kód nem az, ha a felhasználó küld egy üzenetet, - ez a fajta
Az esemény -
fogjuk ezt a kódot.
És mit teszünk mi fut ezen keresztül array, hogy hívott kapcsolatot.
És elég sok minden csatlakozás kivéve azt, ami a miénk, ez
mi ez a kód azt mondja, küldünk egy új üzenetet, hogy a csatolt üzenet
információt.
>> Tehát, ha azt veszi észre, itt, mit tettem, amikor a felhasználó valóban tesz egy új
kapcsolat adtam a JavaScript.push módszer, ez
alapvetően csak azt mondom, mint a hozzá hogy Socket mint értéket
a kapcsolatok tömb.
Tehát most, amikor ezt a kódot futtatja, nem fog küldeni a dolgokat e sajátos
kapcsolatokat.
Tehát ez lehet egy jó kiindulási pont arra, hogy egy chat szerver
vagy valami hasonló.
>> És az a fajta jó dolog az, hogy a kódot, amit látni itt, mint a be-és
kibocsátására és ilyesmi ugyanaz olyan JavaScript kódot, amit lenne
írni a böngésző, hogy kölcsönhatásba lépnek a szerver.
Szóval ezért SocketIO egyfajta szép és hasznos az ilyen módon.
>> Ja, és még egy dolog nagyon gyorsan.
Volt egy CS50 végleges projekt tavaly hogy alapvetően végre a chat
szerver Node.js.
Azt hiszem, ez Harvardchats.org de én nem vagyok -
OK.
Nem vagyok biztos benne, mi az URL, de Tudok küldeni, hogy ki utána.
De ez a fajta hideg, amit meg tudod csinálni Node.js.
>> Szóval remélem, általában nektek a jó értelemben, hogy mi Node.js hasznos
és hogyan lehetne esetleg alkalmazni a végleges projekt.
Én is küld ki néhány források mellett ezzel.
És köszönöm, hogy eljöttek.
Köszönöm.
>> [Taps]