>> KEVIN SCHMID: Pozdravljeni vsi.
Dobrodošli na CS50 seminarja na Node.js.
Moje ime je Kevin.
Jaz sem CS50 TF.
In jaz sem nekako kot resnično razburjen O tem seminarju.
Mislim, da Node.js je zelo kul.
Upam, da se lahko uporablja ta seminar kot dober, mislim, odskočna deska za
nekatere od vaših končnih projektov, če ste zainteresirani za uporabo
nekaj podobnega Node.js.
>> Bomo nekako začetek seminarja izklopite s govorimo le o malo
nekako v ozadju razširljivosti perspektive Node.js, nato
bomo premakniti na nekaj primerov kode.
In jaz imam kodo na spletni strani, in si lahko ogledate na kodo.
In po seminarju, bom nekako govori o tem, kako lahko nastavite Node.js
na vašem računalniku.
>> OK.
Torej, začnimo.
Zato mislim, da želim govoriti o spletni strežniki, res prvi.
In začeti to razpravo, sem imajo v bistvu diagram, ki je od
učbenik uporablja za CS61, ki v bistvu kaže, interakcija
med procesom odjemalca, kot je vaša spletna brskalnik ali kot vaš cilj stranke ali
nekaj takega, in spletni strežnik.
Torej ta vrsta izgleda podobno slika, ki ste videli na predavanju o
Sreda, kjer v bistvu imamo nekaj Proces odjemalec, kot so Google Chrome.
>> In nato korak ena Odjemalec pošlje zahtevo.
Tako, da se lahko nekaj podobnega tudi dajmo obisk, ne vem, CS50.net.
Torej izdamo to zahtevo.
In ne pozabite, kdo ime protokol, ki določa, kako se je to
Zahteva mora biti oblikovana?
Jap.
>> PUBLIKA: [neslišno].
>> KEVIN SCHMID: Točno tako.
Tako da je kot HTTP, kajne?
Torej v bistvu specifikacija za koliko Zahteva, da je treba dejansko določiti
ven, ker na koncu dneva Zahteva, da je res tako kot
Niz, ki v bistvu pravi, da želim to.
In specifikacija za to je HTTP.
Tako, da je kot protokol.
>> Torej strežnik prejme to zahtevo.
Torej vi imate nameščen spletni strežnik v CS50 aparata.
To je Apache.
In ta teden, ko delate na problem nastavite sedem, boste dejansko delajo
S tem spletnim strežnikom.
Torej strežnik prejme to zahtevo, in potem je nekako praska njene
glava in reči, kot tudi tisto, kar naj naredim s tem?
>> Torej, ki temelji na tisto, kar se je odločil, da ne, potem morda morali obrniti na neke vrste
VIR.
In bi, da je vir lahko veliko različnih stvari.
Za eno, bi bilo prav kot statične HTML datoteke.
Tako bi bilo le kot nekateri HTML, ki je kot za
vaš osebni spletni strani.
To je lahko statična slika kot sliko ali kot film, ki ga imate.
Lahko bi celo govoriti na nekakšno zbirko podatkov
kot so podatkovne baze MySQL.
Tako da ne vedno komunicirati z virom, vendar
V nekaterih primerih bi lahko.
>> Torej, kaj se dogaja, da storijo Po tem je, da se dogaja, da
poslali nazaj odgovor.
In odgovor na to je, opredeljeno tudi z HTTP.
Torej jo lahko stranka prejme.
Prav tako lahko raztrgala in jih obdela.
In potem boste dobili spletno stran kot so Google ali CS50.net ali
karkoli si šel.
OK?
>> Torej je to osnovna interakcija, ki bomo se ukvarjajo s.
In mi smo precej bo s poudarkom na tem delu
interakcija, strežnik.
OK.
Cool.
Ima kdo kakšna vprašanja doslej?
OK.
>> Tako kot smo rekli, spletni strežnik prejme to zahtevo HTTP in nato izda to
Odziv HTTP.
In kot sva govorila prej, CS50 aparat spletni strežnik Apache.
Tako da, ko fantje delajo na P nastavite sedem, boš delal z
Apache spletni strežnik.
Nikoli ne boste morali res deluje z Apache neposredno preveč.
Nekako si nastaviti Apache malo Ko določite število virtualnih gostiteljev ali
V. gostitelji, in bomo dobili da se da v malo.
>> Ampak v bistvu, spletni strežnik Apache ustanovljen za delo z PHP naravi
dne iz škatle.
Torej, kaj se v resnici dogaja, je, ko greš na eno od vaših spletnih strani, kot so, recimo,
Lokalne slash index.php ali nekaj gostitelj, vaš brskalnik pošilja, da
Zahteva, nato pa Apache je sedel tam in številke, storiti z njim.
In dejanje izvršiti da kodo v index.php in
nato pa ga pošlje off nazaj.
Torej, to je to.
Tako smo nekako govorila o tem.
Tako da bi lahko služila samo statično sliko ali teči nekaj PHP kodo in nato vprašanje
odziv.
>> Torej skupno vprašanje, ki lahko pridejo se je tudi, kako v resnici ukvarjajo
z ki imajo več uporabnikov hkrati?
Torej, zamisliti, če ste pisali web strežnik, če bi imeli spletni strežnik, ki
ste bili poskuša pisati v nečem kot so C ali kaj podobnega,
v bistvu si lahko misliš o tem, kako je bi lahko bila nekakšna koda, ki
bi prejeli prošnjo, potem pa ima opraviti vsega dela na njej.
To lahko, na primer, se obrnite baze podatkov ali nekaj takega.
Kajne?
In potem bi to naredil, da se vrste obdelave in nato
poslali nazaj odgovor.
Tako, da je kot visoka Pregled ravni.
>> Ampak to ni takoj jasno, kako lahko to storite tako, da dve osebi ali
celo 1000 ljudi, bi lahko delali z vašim spletni strežnik hkrati.
Tako rešitev, ki Apache uporablja se imenuje niti ali procesov.
Torej, ste morda že slišali za pred temi pogoji.
To je v redu, če še niste, ampak mislim, pa niti ali procese, kot načina za
operacijski sistem ali uporabniški program ali nekaj takega, ali spletni strežnik
da nekako izvesti večkratne stvari naenkrat.
Torej, ste morda slišali izraz všeč niti izvršbe.
Torej, to je nekako tako kot ste nekako večopravilnost.
>> In če ste videli na škatli vašega laptop, ali nekaj takega,
jedri, kaj lahko naredite, je, da lahko teči dva različna teme na različnih
deli CPU, tako da lahko dejansko zgodi istočasno.
Torej je to res močna.
In to je nekako Apache je Rešitev tega problema.
>> Torej so tam nekako kot vseh vprašanjih s tem pristopom, čeprav?
Torej, mislim, da sem nekako jih je napisal tam.
Toda oba nekako porabijo veliko pomnilnika.
To je zelo drago, da ustvarite nit ali proces.
>> In del obrazložitve je, da je samo kot takrat, ko ste tekmovanje v teku program C
kot vaš glavni in nato, da klici Druga funkcija, ki ima
nekakšen dimnik.
Torej teme zahtevajo tudi povsem ločena dimnika, ki
je lahko precej velik.
In če si lahko predstavljate, ton Uporabniki na vaši spletni strani, bi morali
Veliko različnih niti.
To je veliko nizov za upravljanje in vzdrževanje.
Tako da je velika poraba pomnilnika.
>> In potem, tudi, recimo, imate samo en CPU, ali recimo, da imate
več teme, kot ste jih ti multicores.
Kajne?
Torej, recimo, da imaš 10 teme in bi imeli le pet procesorjev.
Nekako moraš narediti to stvar, kjer preklapljate med tokom
tista, ki teče, ker ste ne more zagnati, vse 10 naenkrat.
In da se imenuje stikalo kontekst.
In ta izraz dejansko ima nekaj različnih kontekstih, vendar naj samo
pomislite, da je preklapljanje med dvema niti.
To je lahko precej drago, saj v bistvu tisto, kar morate storiti, je, da
morali ustaviti, kaj počnete, razen stanje tega teče nit, in
nato pa preklopite na nekje drugje.
>> Torej se vsi nekako glej motivacija zakaj teme in
procesi lahko malo kosovni?
In ali imate vprašanje?
OK.
Cool.
Ima kdo kakšna vprašanja?
OK.
>> Torej, če naredimo korak nazaj za sekundo, tam je nekako kot
opažanje, da bomo lahko o Veliko spletnih aplikacij.
In to je res, da je veliko od njih dejansko ne naredi, da je veliko uporabno
deluje znotraj navoja.
Torej se je kdo začel P določiti sedem sploh?
Torej hočeš, da mogoče opisati nekateri deli?
Ste delali na prijavo ali kaj podobnega?
>> PUBLIKA: Ne
>> KEVIN SCHMID: OK.
Never mind.
Žal mi je.
Ampak v bistvu, v P set, da si bodo kar veliko vrste
poizvedbe v zbirki podatkov, da bi dobili nekaj podatki iz te baze podatkov.
In kaj je vaša koda je, da se delaš, kaj to Apache proces ali
da Apache nit je, da se delaš medtem ko ima v stik
Podatkovna baza je, da je nekako bo sedel tam in se dogaja, da se
čaka baze podatkov za odgovor.
>> Zdaj, morda ne zveni tako velika obravnavati, ker je baza podatkov o vašem
CS50 aparat, kajne?
Vendar pa obstaja neke vrste omrežja latentnem tam, ker zdaj web
Strežnik mora izdati svojo zahtevo baza podatkov za komunikacijo z
baze podatkov, nato pa dobil, da informacije nazaj.
Torej, zdaj je to kot dobro me počakaj, sem šel bi dobili nekaj od
podatkovne baze in potem je tukaj Veliko čakanja dogaja.
Ali to smiselno?
>> In za nekatere stvari ni tako slabo.
Če se je le, da, na primer, Pomnilnik dostop, da ni všeč
Grozno I / O latence.
In ko rečem, I / O latence, kaj sem ki se nanašajo na je kot kakršnokoli kot
vhod izhod.
Ampak za dostop do datoteke na disku, kot so če sem hotel, da služi statične HTML
datoteko, ki je bila na moji spletni strani ali nekaj takega, sem nekako moral
stop za malo preberi datoteko v iz diska, in nato v
Ta proces Čakam.
Jaz ne opravlja koristno delo.
>> To ne velja za vse, vendar pa je pogost v aplikacijah, kot so P niz
sedem in veliko aplikacij da nisi
pravzaprav delaš veliko razmišljanja.
In ko rečem razmišljanje, mislim kot računske dela.
Torej računalniško delo bi lahko bilo kaj kot, recimo, si je želel
pisanje spletnega strežnika, ki preprosto izračunajo n-število Fibonacci.
To ne zveni kot posebno zabavno spletni strežnik.
Tako kot jaz ne bi pričakoval, da je na mestu, da se Naslednji Facebook, ampak, da je nekaj
vrsta računske dela.
>> In si lahko predstavljate, da z zamenjavo nekatere druge vrste zanimivih
računalniško delo.
Recimo, da ste pisali nekaj , ki je izračunana na stopnjo
ločitev med dvema človekoma ali nekaj takega.
Tako da ne gre za kakšno vrsto izračuna, kajne?
In tudi takrat, da to, da imate še vedno narediti veliko čakanja morda
imate, da se pozanima bazo podatkov za iskanje up, kdo je prijatelj, kdo ali
nekaj takega.
Tako da je ta vrsta pojma za računalniško delo.
Ali to smiselno?
Ima kdo kakšna vprašanja?
>> Oh, in mislim, da sem dal chat strežnikov tam ker so chat strežniki vrste
še en dober primer tega.
Chat strežnik nima storiti veliko razmišljanja.
Čakati na ljudi, da ga je le pošiljanje sporočil in potem, ko
ti, jih pošljite.
OK?
>> Torej samo še enkrat povzamem, Apache in podobnih spletnih strežnikov, kot to vilic a
Veliko niti in procesov, ki lahko nekako potratno.
Tako da mislim, da vprašanje, ki lahko pride iz da je ne potrebujemo
več niti in procesov?
Kaj pa, če smo imeli enega?
>> Torej, kaj je nekako narisati kaj bi to izgledal.
Torej, kaj je le eno nit.
OK?
Torej, predstavljajte si to z eno nitjo.
>> Recimo, da smo bili v resnici ne gre da veliko koristnega - in ko rečem
koristna, mislim Računalniške vaje -
V teh več niti pred.
Torej, kaj je nekako utrditi Vse v enem nit.
Pa kaj, če smo imeli eno nit te vrste da samo gre okoli v zanki in
nenehno pregledi naredil nekaj Nova zgodilo.
Tako na primer, novo se je zgodilo nekaj, bi lahko pomenilo, da imam nekaj nazaj od
baze podatkov, ali nekdo pošlje me nov zahtevek HTTP.
Torej, to so neke vrste dogodkov da se to zgodi, kajne?
>> In potem, kaj lahko storim, ko tiste nove Stvari se dogajajo v tej isti navoj
o izvršbi, ta enotna nit izvedba, lahko pokličete nekaj kode, ki
bi ročaj to posebno stvar.
Tako na primer, če sem dobil nekaj nazaj iz baze podatkov, bi jaz vodim
majhen računski del tega, da pravzaprav šele pripravlja stvar
pošlje nazaj uporabniku.
Torej ne da nekako smiselno?
>> Ampak kaj so v resnici posledice tega?
Kajne?
Ker smo pisno Veliko kode, ki -
in jaz bom samo, da skoči naprej v diapozitivih, če je to v redu.
Torej, če vas ne moti, da sem pravkar dogaja, da naredimo korak nazaj.
Tako da je ta vrsta stvari je, imenujemo dogodek zanka.
OK?
In to je nekako osnovna Ideja Node.js.
>> Torej, kaj Node.js je res delal kot spletni Strežnik je tam ena tema
da se v bistvu dogaja okoli v zanki kot while ene vrste nezadostno
kapuco Node.js, da je nenehno preverjanje, ali bomo prejeli nove stvari?
In potem bo trajal viličarji , ki ga ustanovi.
Ampak, dobro vprašanje vprašati, kako lahko to zgodilo
z obstoječimi stvarmi?
>> Zato sem dal linijo oznako C tukaj, da v bistvu izgleda, kot da je odpiranje
datoteko, kajne?
Pravkar sem prišel ven z albuma.
Torej, sem jo moral odpreti novo datoteko.
Torej, pot je naša C koda za delovanje -
in mislim, da razlog, zakaj sem izbral datoteke je ker je to nekako v obsegu
od I / O delo, ki smo opravili v C Občutek, da je vhod izhod.
Zato pravimo, da je to kodo pa to f odprta.
In potem v naslednji vrstici našega Program smo lahko zdaj delajo z f.
>> Torej bi bil to primer nečesa to je kot sinhrono ali
blokiranje, ker na tej prvi vrstici tam smo čakali, dokler ne bomo
dobili datoteka odprta.
Torej, v drugi vrstici, vemo, da lahko delo s F, vendar to pomeni, da
da druga vrstica ne morem teči dokler se izvaja prva vrstica.
Ali to smiselno?
>> Torej, to bi bilo slabo, da dajo V obravnavo dogodkov.
In razlog za to je, da ta vrsta čaka, kajne?
Torej bi nam to vrne nazaj za isto stvar.
In zdaj ne bi imeli niti korist več niti ali
procesov, saj imamo ena nit Node.js.
Ali to smiselno, da se vse?
>> PUBLIKA: Počakajte.
Torej, kaj je zamenjava?
>> KEVIN SCHMID: Oh, ja.
Torej bom priti do zamenjava.
OK.
Pa kaj, če smo imeli nekaj , ki je izgledal takole?
Pa kaj, če zdaj sem uredil f odpreti malo?
Torej sem poteka v isti dva argumenta kot prej.
Še vedno ljubim novo pesem da je prišla ven s.
Ampak jaz sem mimo tretjo stvar, ki je ta spremenljivka se imenuje koda.
>> Toda kaj je oznaka dejansko v zvezi s tem?
Je kot redni spremenljivko C?
To je funkcija, kajne?
In da je lahko malo čudno, ker Jaz sem pravzaprav kot sedaj poteka
deluje v drugo funkcijo.
>> Torej nekaj stvari, na opombo o tem.
Ena, ne bom dejansko kliče funkcijsko kodo.
Torej ne vidite kodo, s levo, desno paren paren.
Jaz sem samo mimo v kodi.
In v C, kaj bi to dejansko storiti se mi kazalec, da je dejanska
kodo, in potem bi to lahko prost.
Ampak samo pomisli, kot ste posreduje kodo teči, ko
Ta datoteka se odpre.
>> Toda kaj to pomeni, da zdaj Preostali del mojega programa, ki bi lahko naredil
druge stvari, lahko še naprej delaš drugo stvari, medtem ko mi, ni res čakati, ampak
samo še v zadnji del naših glavah, da ko te datoteke je odprt, rok, da
oznaka na vrhu.
Ali to smiselno?
>> In zdaj ideja Node.js je, da kodo v ne stvari z F
del mora biti precej kratka in preprosta in enostavna in ne zares
Zelo računsko intenzivne.
To morda morali odpreti še eno datoteko, vendar da bi morala biti precej hitro
ker naj bi samo rekel, naredite novo f odpreti in potem to imenujemo drugo kodo.
>> Torej, samo, da je popolnoma jasno, f odpreti, da v novi Katy Perry pesem
done mp3, da se bo to precej veliko se takoj vrne.
In potem bomo lahko samo še delaš druge stvari, ker je vse to zdaj f
javni razpis pa je povedal, v bistvu Osnovna f odprta koda odpreti to datoteko
in ko ste končali odpiranje tem datoteko ali ko ga boste dobili nazaj,
nato zagnati kodo.
Vendar dejansko ne vodijo to kodo.
In ti si imel vprašanje?
>> PUBLIKA: Nakazali ste, da nekaj krat, da dodajanje računsko
intenzivna koda nekako zlomil Sistem poganja [neslišno].
[Neslišno]?
>> KEVIN SCHMID: To je veliko vprašanje.
Tako da sem dejansko imajo zgled, kako bi lahko vključili računsko
intenzivna koda v malo.
Torej, ko smo prišli do oznako primerov, Jaz bom se prepričajte, da potegnite, da je eden.
Je to v redu?
Hvala vam.
>> Kaj vam je ime?
>> PUBLIKA: Aaron.
>> KEVIN SCHMID: Aaron pripelje do zelo Dobra točka, ki je, da če bi imel
nekateri računsko intenzivne kodo v narediti stvari z ž del, preostalo
moj program ne more zagnati in ne morete poslušati nove zahteve ali karkoli, dokler se vse
ta stvar je končana.
Torej, če pišem Node kode na splošno če naredimo nekaj, da bom
Predlagam, da se kasneje, ko gledamo kodo za primere, moram biti prepričan, da
moja koda ne zvezal ta dogodek zanka.
Ali to smiselno?
OK.
Cool.
>> Torej Node.js ponuja ta okvir, ki lahko gradijo te dogodkovno
strežnikov z.
Tako da je te vrste asinhrono Neblokirna I / O knjižnice, medtem ko je
standardne knjižnice C, da smo bili delo z, kot če si
jih uporabljajo na enak način, ki smo ga bilo jih uporabljajo pri f odpre in
stvari, tiste, ki blokirajo, ker boste dejansko morali počakati
Ta datoteka odpreti.
>> Ampak Node.js vam daje to in to v bistvu vezi v Googlov V8
JavaScript motor, ki je razlog da je Chrome tako hitro, pri predelavi
JavaScript saj ima ta motor V8.
Tako da vem, da se sliši kot eden izmed tistih, WWDC razvijalec konference stvar
kjer so samo vrgel kup Pismo število stvari za procesorje
in reči, to je tako kul.
Ampak to je kul, da so to storili to zato, ker JavaScript -
ali pa, če niste seznanjeni z JavaScript ni, ker nismo imeli
predavanja o njej -
vendar JavaScript je razlaga jezik.
>> In to je pomembna točka tudi.
Zato je pomembno za našo spletno strežniki, da bo hitro, kajne?
In če smo pravkar teče brskalniku kodo, ki je bila razlaga s samo
vsaka stara tolmač bi bilo počasno.
Torej Node koristi ob tem super hitro V8 tolmač.
In ne vem, če so ga poimenovali ker V8 klofuta v čelo
stvar, ampak OK.
>> Zato sem pripravil nekaj primerov Na tem URL.
Po seminarju, sem nekako bo govori o tem, kako lahko dobiš Node niz
gor, ampak za zdaj sem nekako želim sprehod skozi nekatere primere kode.
Torej, če želite slediti skupaj, vse Izvorna koda je na voljo tukaj.
OK?
>> Torej bom zapustil ta URL up za malo.
In potem grem do preklopi na terminalu.
So vsi dobro s tem URL-ju?
Torej bom za preklapljanje na mojo terminal tukaj.
>> Torej, tukaj je koda, ki Imam za danes.
Zakaj ne bi začeli z simpler.js datoteko?
Druga je, da vse to Koda se bo napisana v
JavaScript, ki ga lahko ali ne sme biti seznanjeni s.
Mislim, da nekaj stvari je, da je veliko kode JavaScript je vrsta
skladnja in struktura je zelo podobna C, tako da lahko nekako to dvignili, kot je
greste skupaj.
Poskušal sem napisati veliko začenši koda za to na način, ki je
podobnih C, tako da je Malo bolj berljiva.
Toda, kot smo napredek, bom dokazuje nekaj dodatnih
funkcije JavaScript, da so nekako kul.
>> Toda poglejmo na tem programu vzorca.
Mislim, da vse, kar je odrezan tam.
Jaz bom samo, da se določi, da je pravi hitro, če ti je prav ali ne.
Ne vem, kaj bo to naredil.
Je, da je malo bolje?
Lahko vidite var in stvari?
OK.
>> Torej, prva vrstica je kot JavaScript verzijo spremenljivke
deklaracija.
Torej samo poudariti, kaj bi to izgledal v C. Torej, to je tako kot
jaz pravim indeks znaša tri ali nekaj takega.
Torej nisem navesti vrsto.
JavaScript ima vrst, vendar je zelo dinamično vnesli v naravi, tako da
ni predložila kakršne koli vrste na njej.
Tako da ima le var.
To je kot spremenljivko.
OK?
>> In kličem te spremenljivo HTTP.
In na moji desni strani, imam izraz, ki bi rad dal v HTTP.
In to pravi zahtevajo HTTP.
Torej, to je nekako podobna vključiti.
To je malo več kot močnejši od vključujejo v smislu, da vključuje
bi samo kopirajte in prilepite glavo datoteko za funkcijo prototipov ali
karkoli z opredelitvami tipa.
Vendar zahteva se dejansko dogaja da nam bi dobili kodo.
>> Torej si lahko pomislite, da je uvažanje nekaj kode.
Torej nekje v modulu Node.js sistem ali karkoli, da imajo vse to
HTTP strežnik kodo, tako da sem samo ga pridobivam za moje
osebna uporaba v tem programu.
OK?
>> Torej imam to funkcijo , ki sem jih napisal.
In opazila nisem imela opredeliti Tip donos ali vrsta
argumenti znova.
Tako nekako ohlapen vnesli v da nekako smislu.
Dva argumenta, da je potrebno v, zaprosilo in odgovor.
Tako da je konceptualno nekako kot seznanjeni s slike, ki smo jih imeli
na zaslonu pred ker smo dobili to prošnjo, da smo
imajo od uporabnika.
In potem imamo odgovor, ki nam lahko pišete stvari.
>> Torej prva linija to ne res.writeHead 200 in potem je to
Vrsta vsebine besedila navaden.
Torej, kaj je ta kos narazen malo.
Torej, kaj je osredotočil samo na res.write za malo.
Tako pisanje je v bistvu, in pisati glavo, so le načini, da nekako napiši
Stvari od odziva.
OK?
Torej pisanje glave, če kdo spomni Iz HTTP predavanja, vidva
zapomni si glave na Vrh HTTP stvar?
Torej, zakaj ne bi jaz samo demo Glave resnično hitro.
Bi bilo to v pomoč?
Ali bi se morala sva nekako -
OK.
Prepričan.
>> Torej, če vaš brskalnik gre google.com ali nekaj takega,
tam je pravzaprav malo več -
to je kot skrivnost -
tam je všeč malo več informacij ki prihaja skozi cev kot le
malo search in vse ostalo.
Torej, da vam pokažem to, bom za uporabo program, imenovan Curl.
OK?
Torej je to nekaj, kar lahko poteka na vaš ukazni vrstici Mac OSX ali v
naprave ali karkoli.
In tako, če mi Curl HTTP google.com, Bom videl HTML.
In to je, v pravičnosti, samo HTML, ki nekako vam pove, da
preusmeriti na www, če vaš brskalnik ne samodejno ročaj
preusmeritev.
>> Torej, to je samo HTML, ampak bom dodati Curl to vezaj sem zastavo.
OK?
In to se dogaja, da pokažejo mi glave.
Torej to je tudi podatek, da prihaja skozi, ko sem dobil ta odgovor.
OK?
>> Torej, na vrhu, vidiš to HTTP 301 premaknete trajno.
In to je nekako pomembno, ker to se nanaša na kode stanja.
Torej, 301, tukaj je koda stanja, , ki je v bistvu samo celo število
, ki pove brskalniku ali kdorkoli že branju tega, če se pretvarjamo, da
si brskalnik in si to videl, v bistvu zdaj, če pogledaš na
da in vidite 301, veš imam narediti nekaj posebnega, ki temelji na
Posebno se je zgodilo 301, ali nekaj takega temelji na 301.
Tako pravi preselila za stalno.
>> In potem, v bistvu, imamo kup parov vrednosti ključev.
Tako smo dobili lokacijo je www.google.com.
In potem nekako vse te druge stvari, ampak v bistvu, kaj lokacija
Pregovor je nova lokacija je na www.google.com.
Torej, zdaj, če greš na google.com, boste nekako glej brskalnika vrste blink
za drugo, nato pa vas preusmeri nazaj na www.google.com.
Tako da lahko odgovori vsebujejo te glave.
>> In nekaj stvari poudariti.
Torej, recimo, da smo bili dejansko uspešni pri obisku spletne strani.
Naj gre za -
kaj je dobro spletno stran?
Jaz sem slab v razmišljanju dobro spletne strani, na kraju samem.
>> PUBLIKA: Wikipedia.
>> KEVIN SCHMID: OK.
Naredimo Wikipedia.
Torej, tukaj sem se preselil.
Oh, počakajte.
Sem bil?
Ja, sem bila.
OK.
Torej moram storiti www.
Tako bom naredil www.
In kot vidite, tu je vse HTML da bo brskalnik obdeluje
na Wikipediji.
>> Ampak, če jaz vztrajati pomikanjem tukaj gor, kaj bom videl na vrhu -
wow, tam je veliko HTML na Wikipediji -
ampak kar vidim na vrhu tu to 200 Status koda za razliko od
301, da sem videl že prej.
In opazili, da je lepo prijazen OK poleg nje.
Torej, to je kot dober kode stanja.
>> Ali to 200 številka zdi znano?
Da, ker ko sem simpler.js, Napisal sem 200 tam.
Tako da je v bistvu rekel, povej brskalnik ali kdorkoli poskuša priti do
to, da so bili uspešni.
Ali pa, da nekako, kot smo bili preveč uspešni.
>> In tam je ta vrsta posebne sintakse v Javascript za razglasitev
Karta od teh tipk, kot vrsto vsebine in te vrednosti kot besedilni ravnini.
Torej, če pogledaš na odgovor, ki smo vrnila iz Wikipedije prej -
Bom poskusil, da se pomaknete gor malo hitreje -
imate te tipke kot strežnik in te vrednosti Apache.
Torej imaš ključe in vrednosti.
In lahko to določite v Node kaj poslati nazaj.
>> Torej, to je pravzaprav neke vrste, v nekaterih načine, in v nekaterih pogledih to ni
res, ampak to je malo nižja raven kot PHP kodo, ki bi jih lahko
pisanje za P nastavite sedem, ker PHP in Apache nekako poskrbel za nekaj
od teh stvari za vas.
V PHP lahko prepiše privzeto vedenje s pisanjem lastne glave.
Ampak za to, smo dobili pisati iz naše glave.
>> Da ne bi linija smiselna vsi, pisalna glava linija?
OK.
Super.
>> Torej, kaj sem naredil, potem je končam odgovor z besedami, hello svetu.
OK.
Ampak to je samo funkcija imenovano odpravnika.
Torej, zdaj sem dejansko moral nekako narediti nekaj s to funkcijo, kajne?
>> Tako da tukaj kaj storiti, je da je to linija, ki naredi strežnik, je enako var
HTTP.create strežnik, potem pa sem preide v odpravnika.
Torej je to neke vrste vozlišče, način oblikovanja strežnika.
In opazil, da sem mimo V zahtevi trener.
Torej je to povedal createServer Funkcija, ki Želim si, da bi me
strežnik, in ko je ta strežnik prejme odgovor, moram vam to imenujemo
zahteva funkcijo trener.
OK?
>> Tako da črta precej konča takoj.
Torej je vrstica strežnika var storiti prav ko si to naredil precej.
Mislim, da mora ustanoviti nekaj notranjih Država vedeti, da bi morali
pokličite to funkcijo zahteva trener, vendar da se ne bo tam sedel in
recimo ima uporabnik poslano mi zahteva še?
Je uporabnik mi je poslal prošnjo še?
Tako da ne blokira.
OK?
>> Torej, kaj bo to storiti, je, da v bistvu zdaj shranjuje kazalec tega kodeksa,
Ta funkcija zahteva trener, nato pa bo potekal to kodo, ko nekdo
vloži zahtevo.
In potem mi server.listen.
>> 1337 je precej samovoljno.
Nisem imel posebnega razloga za obiranje to številko.
To je bil povsem naključno.
Ampak to samo določa pristanišča.
Torej je večina spletnih strežnikov boste videli, da so uporablja vrata 80, ker je to nekako
podobnega konvencije.
Torej, če grem na nekaj podobnega, Ne vem, Wikipedia.org,
in sem dal kolona 8 -
oh wow, ne morete videti.
Žal mi je.
Ampak, če jaz Wikipedia -
Bom napisati tukaj samo zato, da to je jasno, na kameri.
Ampak, če vzamem v brskalnik s debelo črevo 80, ki določa, pojdite na
Wikipedia.org na vrata 80.
Torej je všeč, kako je United States več pristanišč, kot je, kjer si lahko ladja
stvari na vrsto.
Tako da je kot iti v to zlasti postavite na tem strežniku.
OK.
>> Zato sem izbral 1337.
Obstaja cela vrsta številk , ki lahko poberete.
To ni bil povsem posebnega.
>> Ampak, kaj bom storil sedaj se bom teči Node.
Dovolite mi, da dejansko začne, da par črte navzdol, tako da boste lahko videli.
Jaz bom naredil Node, in sem tekoč teči simpler.js.
In se bova pogovorila o tem, kako priti do Node ustanovljen v malo.
Zdaj pa je samo teče strežnik.
>> Torej, ena stvar, ki jo lahko poskusite, ki ne sme je, da je razburljivo bomo lahko dejansko
poskusite dostopati do njega v Curl.
Tako da sem lahko naredil Curl in my Stroj je lokalni gostitelj.
Prav tako boste videli to napisano kot včasih.
Lokalni gostitelj in 127.0.0.1 so prijazni podobnega vašem domačem računalniku.
Torej, to je kot bi govoril svoj računalnik.
OK.
>> In potem lahko rečem 1337.
Torej, če jaz vodim to vrstico kode, pravi zdravo svet.
In če sem hotel videti, da stvari, ki imeli vrsto vsebine besedila navaden ali
karkoli, lahko bi celo dal to tukaj.
In opazil, da to ne rečem OK.
In imam besedilno ravnino.
In potem je tukaj še nekako vse to drugo stvari, ki bodo Node dodali v
tam za mene.
To ni zelo pomembno.
>> Mislim, da so nekatere vrste tehničnih vidiki AT, ki so nekako
kul govoriti o tem, ampak samo prikazati vi, sem imela tudi pooblastilo, da
spremenite te okoli.
Tako da sem lahko samo dodate kup stvari, kot je ta.
In potem zdaj, če pogledam v moji izhod, bo to.
Torej te glave pomenijo nekatere stvari na brskalnikih in takih stvari.
>> In glave v bistvu lahko povem brskalnik kako se odzvati na nekaj.
Če ste kdaj slišali za piškote prej, ali če ste kdaj bili moti,
s spletne strani, ki določa piškotke, ali vklopljen piškotek blok ali
nekaj takega.
Lahko dejansko nastavi piškotke V te glave.
Tako da povem brskalnik, kako Vedenje v nekaterih primerih.
OK.
>> Tako da je bil simpler.js.
Ima kdo kakšna vprašanja na tej izvorno kodo datoteke?
OK.
Cool.
>> Torej, kaj je odstraniti r od in pogled na simple.js.
Torej, to je precej isti program.
Pravkar sem jo napisal malo drugače ker sem želel nekako poudarjajo
nekatere funkcije JavaScript.
>> Tako opazili, da odpravnika Funkcija je popolnoma izginil.
Oh ja, pa imate vprašanje?
>> Ciljna publika: Ja, argumenti da se predajo, da
Funkcija, kaj so?
>> KEVIN SCHMID: To so torej JavaScript predmeti.
V dokumentaciji Node.js, da v bistvu govori, katere metode so
na voljo na njih.
Samo se zgodi, da imajo dostop do Ta metoda se imenuje pisalna glava in konec
in podobne stvari.
Ampak tam je cel kup več metod.
>> In, na primer, kot oni zlasti na odpad, lahko to storite
nekaj podobnega rec.method, ki bo vam povem, ali je HTTP dobiti ali
HTTP objave prijave in take stvari.
Torej je vse vrste razlikuje lastnosti, vendar sta oba
JavaScript predmeti, in so samo še Funkcije, povezani z njimi, ki vam
Lahko napišete stvari.
OK?
>> Tako opazili, da je zahtevek za prekladanje je popolnoma izginil.
Vendar je koda, ki sem ga imel v zahtevi Vodnik je še vedno tam.
Še vedno imam to res.writeHead in jaz imam še vedno ta res.end.
In kaj je to primer v JavaScript je ta ideja
anonimni funkcija.
in anonimno je kot montažni ime za to, ker dobesedno ne
imeti ime.
Tam je zahteva funkcija ni Vodnik tam.
>> Nima imena, vendar je še vedno je ob argument.
Zato sem še vedno dobil rec in res.
In še vedno imam kodo.
To je popolnoma v redu JavaScript kode.
Tako da sem lahko razglasi funkcijo brez izrecno ji daje ime.
To je malo zmedeno na prvi.
Obstaja nekaj kot uporabne stvari ki jih lahko naredite s
Ti anonimni funkcije.
Ima kdo kakršne koli vprašanja o tem, ali je to v redu, samo da za zdaj,
nekako samo sprejeti, da bo naredil isto stvar?
Ja?
>> PUBLIKA: najprej so funkcije razred v JavaScript?
>> KEVIN SCHMID: So prvi razred v JavaScript.
In samo vem, da so ti koncepti poteka anonimno funkcijo kot
to velja tudi za JavaScript, ki ga lahko pišejo v svojem zadnjem projektu
Spletni brskalnik preveč.
Tako na primer, v JavaScript Vaš brskalnik, je tudi nekoliko dogodek
usmerjenih v smislu, da tisto, kar boste še je, ko uporabnik klikne to
Gumb, hočem zagnati to kodo.
>> Torej, to je isto vrsto idej odjemalca, ko klik ali pa
miško preko neke slike na vašem spletna stran, vodijo to kodo.
, Ki se lahko uporabljajo za strežnike.
Tako da je nekako kot razburljivo Razlog, zakaj JavaScript je res
primerni ali nekateri ljudje mislijo, da je primeren jezik za tovrstno
Voznik dogodek strežnik, ker imate Ti anonimni funkcije.
Imate celotno idejo To asinhrona koda.
OK.
Ima kdo kakšna vprašanja?
>> OK.
Tako da je bil simple.js.
Zato si oglejmo še eno ali nekaj več.
Torej, to je sleep.js.
Torej kdo pozna C funkcija spanja?
Od morda eno izmed prejšnjih predavanj ali kaj podobnega?
>> Torej v bistvu lahko prenese v mislim, število sekund ali če uporabljate U
spati število milisekund ali nanosekund.
In v bistvu se bo program nehat teče v tem času.
Kajne?
In potem se bo zbudil in na koncu potem bo to samo še teče
Program.
>> Torej ta strežnik nekako daje vtis spanjem.
Tako opazili, da imamo enak res.writeHead 200 z glavo kot
prej, potem pa smo kličeš to Funkcija se imenuje set timeout.
Set timeout je na voljo tudi vaš spletni brskalnik Google Chrome
ali Safari ali karkoli.
In v bistvu tisto, kar počne tukaj se je pokazal v funkciji.
Obvestilo, še enkrat, to je anonimni funkcija.
Tako da je kar v redu, ker smo uporabi anonimno funkcijo v
anonimno funkcijo, ki mogoče malo čudno.
>> Vendar je pri tem, da je funkcija, ki je v bistvu rekel - in kako ta
Dela je 5000 milisekund, želim ste za izvršitev te funkcije, ki
Pravkar se konča odziv in piše hej.
Torej, to daje vtis, kot spanje, ampak način to dejansko
dela, se bomo teči skozi ta vrstica zelo hitro.
Mi samo pisanje nekaj.
In potem bomo delovali tudi skozi ta vrstica zelo hitro.
Torej ne bomo dejansko dogaja počakati pet sekund.
Mi smo šele tekoč teči to kodo takoj.
>> In potem je tukaj še enkrat, ta mali Dogodek zanke, ki ima zdaj to stvar
Registri, ki je v bistvu samo nenehno dogaja okoli v krogu
in gledamo na uro v eno samo nit in pravi, ima pet sekund
še minilo?
In potem, ko se vidi, da je drugi roko se je preselil kot pet sekund ali
karkoli, potem se zbudi in reče: oh, kaj moram storiti?
Oh moram teči to kodo.
In potem se dogaja, da teči res.end hej.
>> Torej, še enkrat, ne bomo nikoli čaka tukaj.
Torej, to ni, da se ta oznaka v notranjosti To funkcijo bo trajalo pet
sekund za zagon.
Ta koda bo trajal precej sprašuje, vsaj glede na
pet sekund, da se pogovarjava O prej, preden.
>> Torej samo pokazati to v akciji, Lahko storim Node.sleep.js.
In Sem nered kaj?
Morebiti.
Žal mi je.
Poglejmo, kaj lahko storimo, da to popravimo.
OK.
Torej vsekakor uporabiti Node.js.
Jaz sem samo hecam.
OK.
Samo eno sec.
OK.
Vem, kaj je.
>> Torej, problem je, da v moji drugi kartici Tukaj sem bil teče Node že na
isti naslov, 1337.
Tako napako, da je ta vrgel, če pogledamo pri tem resnično tesno, je naslov v
uporabo, EADDRINUSE.
Zato sem bil že uporabljate 1337 tukaj.
Torej, če sem to izklopiti, potem pa sem zdaj začeti teči to, upajmo, vse
bo v redu.
OK.
Tako da lahko imajo samo eno stvar neke za poslušanje na vratih naenkrat.
Druga rešitev bi bila za mene samo urediti ta program in se
bilo všeč 1.338 ali nekaj tako.
>> Toda zdaj spanja teče.
Torej, kaj je dejansko jo preizkusite na Brskalnik ta čas, ker je
Malo nezanimive za prikaz je v terminalu.
Torej grem iti, da Spet 127 naslov na 1337.
In če jo lahko vidite -
Ne vem, če je to mogoče - ampak moja Brskalnik je pokazal zelo, zelo dolgo
Čas je, da vstavite ali kot pet sekund.
>> In nato po tem, da končno končalo odziv.
In ga ne morete videti, ker stvar je preselila malo, ampak če naredim
to malo manjši, saj lahko vidite, da piše, hej.
Tako sem dobil hej, vendar po petih sekundah.
In morda malo čistejše videti je tukaj na terminal, tako da sem
boš naredil -
Naredimo tukaj -
Naredimo Curl tem naslovu spet z 1337.
In sem nekako moral sedeti tukaj za pet sekund.
Ampak obvestilo, da je strežnik lahko sprejme nove odzive.
Tako da natisne hej.
>> In demo to, v bistvu tisto, Jaz lahko naredim v tej drugi kartici -
Torej, recimo, to sem naredil v drugem zavihku, Jaz bom naredil Curl in isto
stvar znova.
In bom poskusil brcati ti fantje off hkrati.
Torej bom to storil, in sem dirkati sem in sem
bom še enkrat.
>> In da bi bilo tako, da si vidi oba.
To eno tiskano Ej in da je eden tiskani hej vso pot na -
Naredimo to poskus znova.
Pravzaprav, kaj je to uporabijo trik, če je to v redu.
>> Torej bom uporabo lupine stvar, ki mi omogoča, da v bistvu teči dva izvoda
tega programa vzporedno.
Tako da bomo teči prvi program in Drugi program vzporedno.
Torej, zdaj, če sem pritisnite tipko Enter, da se dogaja da to zahteva precej
sprašuje hkrati.
Torej, dajmo to strel.
>> Torej, zdaj opazili pravi dva procesa.
In če ste radovedni, da 27.000 Številka je v bistvu proces ID.
In potem opazili, so natisnjene Ej hkrati.
To ni bilo všeč, smo morali čakati pet sekund za eno in potem po tistem,
pet sekund pozneje dobili drugi.
Tako, da je vrsta, v nekaterih pogledih, to je ni res dokaz, vendar je
intuitivno dokaz, da to ni samo kot čaka pet sekund in blokiranje
celoten navoj.
OK kul.
>> Torej Aaron vprašal prej, da je bil, no, kaj če ne bomo nekaj storiti -
Ja?
>> PUBLIKA: Počakajte.
Kako je, da se razlikuje od printf buffer, čeprav?
Ne bo samodejno naredil?
Zakaj moramo skrbeti za to?
>> KEVIN SCHMID: Oh, bi lahko pravijo, da še enkrat?
>> PUBLIKA: Ali ni všeč printf buffer narediti točno isto stvar?
>> KEVIN SCHMID: printf buffer?
>> OBČINSTVO: Ja.
OK.
Ni bil v enem od kvizov so bili Govorimo o tem, kako, če ste prav printf
nekaj, nato pa so ga začasno ustavite enega po drugi strani, nato pa ste to zanko deset
krat, boste počakati deset sekund in printf nato vse skupaj?
>> KEVIN SCHMID: Oh, OK.
>> PUBLIKA: Je to počne isto stvar, potem pa v tem primeru?
>> KEVIN SCHMID: Torej, vprašanje je bilo v bistvu v eni od prejšnjih kvizov
ali kaj podobnega, je bilo vprašanje, ki v bistvu, če rečeš tiskalne F 10
stvari naenkrat in potem spala kot v Postopek tiskanja tistih ven,
Na koncu nekega razloga, kajne samo smetišče tiste, vsi ven na zaslonu.
Tako da je nekako dveh različnih koncepti tukaj.
>> Torej, mislim, da je ena stvar, da se v tem primeru, da imamo opravka z dvema različnima
vrsta ljudi sprašuje strežnik za stvari hkrati.
In razlog, da printf vrste čaka tako in tako vse odlagališč ven
naenkrat je bolj povezana z kako printf vrste -
tako način printf dejansko izvajal, da ima v bistvu
govoriti z operacijskim sistemom za pisanje da se stvari na konzoli.
Tako da ne želijo, da stori vse, da stvari takoj, ko rečeš printf
nekateri niz, saj da bi lahko dobili drag če mora
narediti, da vsakič.
>> Torej, če vam printf hej, svoj program dejansko ni mogoče natisniti, da
Takoj na konzolo.
To bi lahko rekli, v redu, sem to napisal.
In potem nekako čakati na vas, da je pred dejansko malo več
to pisanje ven na konzoli.
>> Torej razlog, da je bil primer -
in to je nekako nepovezani za spanje -
je, da je spanja nekako le injicira tam prikazati
Dejstvo, da se ne pišejo pa sinhrono.
Vendar je razlog za to je le zmogljivost, tako da vam ne bo treba
da to veliko stikov v operacijski sistem.
>> Ampak tukaj, kaj smo res poskušali narediti s tem spanjem stvar je samo predstava
da ko imamo dva človeka na obisku Ta spletna stran, ki je ne bo dal
jim v liniji, kjer se dogaja, da reči Moram vam pomagati, in potem, ko sem
popolnoma končana vam bomo pomagali, ko ti pet sekund, nato pa bom
premakniti na naslednjo osebo.
Zato zahteva od prve osebe ne zvezal ta dogodek zanko
če je to smiselno.
>> Ampak tukaj je dejansko primer nekaj, kar bo tie
do dogodka zanke.
Torej, tukaj je grozno funkcijo izračunati n-Fibonacci.
To je dobesedno slabši način lahko izračunati n-število Fibonaccijevo.
In to je pravzaprav samo priznati če ta prišel,
tam je pravzaprav -
Mislim, da ga lahko poskusite, da gredo najti - vendar tam je kot zelo dolgem blog
objavili, da je nekdo napisal.
To je kot enega od teh Reddit stvari.
Ampak nekdo kritiziral Node.js, in jih ta uporablja kot primer.
Tako da sem nekako želela, da bi vam samo pokazal dva različne perspektive, samo da bi dobili
splošno razumevanje konceptov ozadju teh dveh stvari.
>> Vendar je ta izbran kot samo grozno, strašno neučinkovita računsko
intenziven način za izračun n-število Fibonacci.
Torej samo kot stran pismo, zakaj je je grozno všeč na en način?
Ja?
>> PUBLIKA: Povejte, da ste začeli ven s 1000.
1000 razdeli na 999 in 998.
Vsak to razdeli na dve stvari.
>> KEVIN SCHMID: Right.
>> PUBLIKA: Vse pot navzdol.
>> KEVIN SCHMID: Točno tako.
Torej samo ponoviti za kamero, če sem pokličite FIB na kot 1000 ali kaj podobnega
tako, da je očitno ne manj kot ali enaka enemu zato bom
pojdite na to drugega primera, in potem bom poklicati FIB 999 plus Lagati 998.
In potem precej vse to Delo, ki FIB 999 pa je
nekako na tem nivoju.
Če greš navzdol, to je še bolj odveč kot to, ampak, če ste le
mislim, računalništvo Lagati 998 bolnikih nam zelo blizu Lagati 999.
Zato moramo res biti malo bolj pameten o tem, kako smo se nekako ponovno uporabo
ti, a ne bomo ponovno uporabo te stvari sploh.
Torej si lahko predstavljate to velikanski, orjaška drevesa, ki je samo grozno.
>> Ampak vseeno, OK.
Tako da je bil Lagati.
Samo traja nekaj časa teči.
Ja?
>> PUBLIKA: [neslišno].
>> KEVIN SCHMID: Oh, bi lahko Ponavljam vprašanje?
>> PUBLIKA: [neslišno].
>> KEVIN SCHMID: Oh, tako je to samo code da se dogaja, da se nekako na
strani strežnika.
Tako da to ne bo mogoče najti v brskalniku ali kaj podobnega.
To je v bistvu tisto, kar imamo, je, da ko uporabnik tukaj zelo veliko naredi
njihovo ponovno zahteva, ko smo nekako vložijo zahtevo, bomo klic
ta funkcija na strani strežnika.
In potem bomo dobili rezultat nazaj kliče to funkcijo.
In potem bomo samo tiskanje je za uporabnika.
Torej, ali je uporabnik v resnici ne ukvarjajo s to funkcijo preveč.
>> Je bilo to vprašanje?
Ali to smiselno?
OK.
Cool.
>> Torej, še enkrat, to storimo celo res.writeHead stvar, kjer smo natisnete
glava.
In potem sem na koncu odgovor na ta način magična številka Lagati 45.
Zato naj samo teče ta strežnik.
Tako bom naredil vozlišča fib.js.
Torej, zdaj moja Lagati strežnik teče.
>> In potem tukaj, bom narediti eno od teh.
OK?
Torej, jaz sem samo reči, Curl.
Tako da bo trajalo nekaj časa, vendar upajmo, da bo kmalu končati in
se bo izpisal, da je 45. Fibonaccijevo število.
>> PUBLIKA: [neslišno].
>> KEVIN SCHMID: mora dobili storiti kmalu.
Zato bi ga bilo treba pet do šest sekund.
Ne vem, to je samo da V8 super hitro, vendar v vsakem primeru pa je to
zelo kratek zgled in namenoma Neelegantan za nepomembno
računanje.
Torej čez nekaj časa, to ne razumem tega.
>> Toda zdaj, kaj pa če naredim to isto vrsto Eksperiment kot prej, kjer sem se
dve zahtevi hkrati?
Torej, tukaj bom do Curl o da naslov in bom
storiti še Curl.
In zapomnite si, ko smo to naredili za spati strežnik, ko smo v bistvu je imela
po petih sekundah, so precej precej sta se vrnila pravica
približno ob istem času.
Torej ni bil posebej povezan.
>> Vendar poskusiva zdaj.
OK, tako da imamo naša dva procesa.
Ne pozabite, to so ID-ji procesa.
To se dogaja, da se malo nerodno, ko smo se zavlekle.
Zato naj samo ostati tukaj in počakati.
>> Torej, eden izmed njih naj bi prišli nazaj po všeč -
OK, tako da eden prišel nazaj.
Ampak zakaj potem ni naredil drugega eden prišel samo še nazaj?
Ja?
>> PUBLIKA: Strežnik ne more storiti ničesar medtem ko je računski da veliko število.
>> KEVIN SCHMID: Right.
Tako je bil odziv le da strežnik res ne more storiti ničesar, medtem
to je računalništvo to številko Fibonaccijevo.
Torej, zdaj sem dobil moji dve stvari nazaj.
Ampak mislim, da samo zato, da razmišljajo o zakoniku malo več, kako se to dela
in vse.
>> Tako da je ta funkcija tu je koda, ki Povedal sem ta strežnik teči, ko je
dobi nov dohodni zahtevo.
Tako da je šele tekoč teči skozi to Celoten kodo, in potem je šel
Nazaj na dogodek zanke in nato nadaljevati preverjanje novih dogodkov.
Torej v bistvu to, kar smo se dogaja je strežnik
poslušanje za nove stvari.
Prva oseba, ki prosi za to, kar je 45.
Vodimo to kodo to izračunati.
Ta oznaka traja približno pet za šest sekund teči.
Potem gremo nazaj na dogodek zanke in preverjanje novih prijav.
>> Torej je to primer, kako je, če si imajo stvari, ki so tako imenovani izračunati
zavezuje, ali pa uporabite veliko računskih, ne moči, ampak kot so
računsko intenzivne -
Mislim, da ena stvar za povedati o tem, je Ta funkcija počne v celoti,
Za večino del, precej koristno delo v redu.
Ves čas, da to callback Funkcija je tekel, je bilo precej
veliko preživela večino svojega časa samo računalništvo številko, da n-to Fibonaccijevo.
>> Vendar pa smo imeli samo eno nit obravnavati.
V modelu Apache, ko dve osebi podala zahtevo, da se FIB 45, smo
bi imela dva različna teme.
In potem naloga operacijskega sistema bi bilo, ali raven uporabnik
kodo, ki upravlja teme, bi si je, da rezina, da se na
CPU, ali celo, če ste imeli več mikroprocesorjev, jih razdelili enakomerno čez procesorjev
tako da sta bila oba zasluge približno ob istem času.
>> Torej, samo, da vam pokaže, kako lahko nekako - in to ni skupna popoln
rešitev, ampak nekako, kako smo lahko da pridejo nazaj in narediti
malo bolje.
Torej, kaj imam tukaj je program, imenovan Fib C in to v bistvu uporablja
še eden od modulov vozlišče se imenuje Otrok proces modul.
Tako da sem vključen da na vrhu vrste podobnega Jaz bi naredil funt vključuje
Otrok process.h ali kaj podobnega.
Zdaj imam dostop do te CP spremenljivke ki ima vse svoje funkcije.
>> Torej, kaj zdaj delam na tem odgovoru Vodnik je tečem ta program
dot poševnica FIB 45.
Torej, kaj sem naredil - in grem izstopiti iz tega programa
malo -
je sem napisal program C, ki osnovi izračuna
n-število Fibonacci.
Torej, tukaj je samo program sem napisal v C, ki izračuna to.
Lahko ga pripravijo, in lahko tečem da v ukazni vrstici.
In to se dogaja, izračun 45. Fibonaccijevo število.
>> Torej opazil to šele zalotiti precej dlje.
Jaz bi verjetno uporablja pomišljaj 03 do to ali kaj podobnega, da optimizirajo,
vendar sem naredil tako kot redni nastavitve prevajalnika.
In jo natisne.
>> Toda zdaj, kaj sem nekako počne?
Oh oprosti, napačno datoteko.
Zato sem naredil iste stvari s glava kot prej.
Potem sem naredil to cp.exec.
Torej, kaj bo to storiti, je, da je bo za zagon tega programa.
Ampak način to deluje, je, da da je ne bo treba čakati na
ta program do konca.
To samo v bistvu pravi, izvedbo tega programa.
Tako da v bistvu ta tip v zapoved uren vrste.
>> In potem, ko ste končali s da, prost dostop to funkcijo.
Torej sedaj smo nekako dobili to Celoten obnovljena stvar
tako kot ne bomo čakali.
Ali to nekako smiselno?
Ja?
>> PUBLIKA: [neslišno]?
>> KEVIN SCHMID: Torej bo to dejansko odprli nov postopek, da to storite.
Torej, to je pravzaprav na nek način, zlo, zlo ne super, vendar je
pomembno, da rečemo, da je ta vrsta vrača, na eni strani, Apache
model, kjer bomo naredili teme in procesov za vsako zahtevo, ali
procesov za vsako zahtevo.
Torej, to je nekako analogno s tem, kar počne Apache.
V nekaterih primerih bo samo uporabo novega nit, ki je malo več svetlobe
teža kot na proces, vendar Apache lahko na koncu odcepitev nov proces
ki je nekako kar delamo tukaj posredno s tem dot slash FIB 45.
>> In potem v tem primeru smo nekako nastali enake stroške postopkov.
Torej je to samo ena stvar, ki jo lahko narediš.
Ampak samo prikazati te vrste teka.
In to govori samo res namenjen predstavljanje tovrstnih programov,
način prikazati različne poglede na kako oblikovati strežnikov, kot je ta.
Torej, to je tekmovanje v teku, nato pa zdaj, če jaz to še enkrat, imam dva procesa ID.
>> Pogovoriva se o tem Stvari poudariti.
Tako opazili, da oni postopoma.
To je v redu.
Ker je bilo 27.122 prej.
Ampak obvestilo sedaj, so se vrnili ob približno istem času.
>> In zdaj, dobro vprašanje vprašati o Zato je bil, da je v primeru, čigar delo
je to zdaj nekako bi te stvari vrsta igrajo sejem z vsako
druga, ta dva primera dot slash Lagati 45, da sem tekel
ali da Node tekel?
Ki nekako omogoča pošteno, da sta oba se nekako uravnoteženo čas delovanja?
>> PUBLIKA: [neslišno].
>> KEVIN SCHMID: Ja.
Torej v bistvu, ko sem naredil dot slash FIB 45 ali nekaj takega, zdaj je
nekako do operacijskega sistema ročaj čas delovanja teh programov.
Zdaj pa jih lahko razporedite na različnih procesorjev ali njej
jih lahko urnik.
To lahko razdelijo največ časa, da je eden CPU ga dobi ali da bi dobili
teči na enem procesorju.
Tako da je ideja, da.
Ali to smiselno, da se vse?
Torej, zdaj Node v resnici ni igral del v razdelitev teh nalog.
OK.
>> Torej, to je skoraj to za primere.
Hotel sem samo pokazati eno stvar ker veliko tega je bila doslej
ne povsem super praktična v nekaterih primerih.
Lahko si predstavljam, prihaja domov po tem govori in nekaj rekel in podobno,
tudi jaz nekako prišel iz tega pogovora, ki Lahko bi Fibonaccijevo strežnik za
moj zadnji projekt.
Torej, tukaj je nekako še en primer , ki bo, upajmo, -
Morda ne, toda morda - malo več nekako pomembne za končnih projektov in
mislim vnaprej za stvari, kot to.
>> Torej je to chat.js.
Torej, to je nekako kot nekaj vzorcev strani strežnika kodo, ki jo lahko uporabite za
ustanoviti majhno chat strežnik, kot je ki ste jih videli na
Facebook Chat ali karkoli.
Torej, jaz ne pravim, da je to, kot Facebook Klepet, ampak to je nekako
kot dobro - morda ni dobro, ampak morda dobra - izhodišče za klepet
strežnik za vašo spletno stran za končno projekta.
Zato si oglejmo, kaj se počne.
>> Tako da smo dobili to posebno stvar na vrhu, to VAR SIO
enaka zahteva Socket.IO.
Torej je to še ena stvar, ki pa ne dejansko pridejo v paketu z
Node, vendar ga lahko namestite.
To je Node modul.
Torej, to je tako kot nekateri razširitev Node.
>> SocketIO je dejansko res nekako kul.
To je abstrakcija, ki v bistvu tisto, kar to pa je, je, da vam omogoča, da
ima ta tok komunikacije med web
brskalnik in spletni strežnik.
Torej, za večino del Doslej smo imeli ti zelo hitro eno sekundo ali dve
Drugi komunikacije med web brskalnik in spletni strežnik.
Tako da je v bistvu pojdite na google.com, get stvari, ga pošljejo nazaj, nato pa
končali smo.
Bomo nikoli več govoril, dokler uporabnik vnese v nekaj drugega.
>> Toda kaj Socket.IO in podobne vrste stvari - in SocketIO je dejansko eden
stvari, ki je zgrajena na tako WebSocket ki je nekako na voljo
kot del HTML5 -
, ki vam omogoča, da imate to nadaljuje dialog.
To pa je zelo koristna v streľnikom takšne stvari, saj je
nekako kot stalen dialog v nekaj načinov, ker če ste klepetali
z nekom, zdaj lahko samo pošlji Sporočilo navzdol cevi, nato pa
Strežnik lahko pošljete sporočilo navzdol cev na drugo osebo, ki vas
klepet s.
In potem si lahko to izmenjujejo tako.
>> Tako da je nekako kar SocketIO je dobro.
Razlog, da SocketIO uporablja WebSockets kot ena stvar je, da v
Poleg samo navaden stare WebSockets, to počne tudi nekaj trikov, da v bistvu
da bo brskalnik združljive.
Torej brskalniki, kot so Internet Explorer žal ne podpirajo WebSockets
pravico iz škatle.
Tako, da uporablja kakšno drugo vrsto cool gladka stvari z Adobe Flash, da omogočajo
da imate navzkrižno brskalnik podporo.
Tako da je res uporabno.
>> In dejansko, vem, da sem nekako vožnjo na čas tukaj, ampak CS50
Pogovorite se, ste že kdaj videli kaj kot, ne vem, prazno, in tako je
odgovarjanje na ta post ali kaj podobnega tako, da je funkcija?
To je SocketIO.
Torej, ko se začne nekdo pisati v razpravljali polje, da bi odgovor ali
Nekaj ​​Vaš brskalnik ne, kaj je pozval SocketIO oddaja nekakšen
Dogodek, ki pravi, da je nekdo odgovarjanje na ta post.
>> Potem strežnik pravi, OK, Kaj moram narediti?
No sedaj moram povedati tistih fantov ki so na CS50 Pogovorite se išče
na ta post, da nekdo odgovor.
Tako da je nekako tisto, kar je SocketIO dobro, to stalno vrste
Tok dialoga.
OK.
>> Torej, kaj imam tukaj - in smo pravkar gre prezreti povezave niz
za malo -
kaj sem naredil je, da sem se še poslušati.
Torej to je samo način, kako se Socket.IO pravijo, dajmo poslušati na ta vrata.
In potem sem to naredil na povezavo.
Tako, da je samo v bistvu Socket IO je način rekel, ko smo prejeli
povezava, vam želim zagnati to kodo.
>> In opazil, da namesto da rec in res je minilo tam imam vtičnice.
In to Socket ideja je v bistvu to stvar, ki jo lahko pišeš in branje
s tem, da ima uporabnikov Sporočila morebiti.
In sporočila, ki bi jih pošiljate Lahko greš skozi to vtičnico.
Ali to smiselno?
Tako da je ta nenehna stvar.
>> Torej, kaj sem naredil je, da sem poklical Socket.emit.
In oddajanja traja precej veliko dva argumenta.
Prvi argument je niz Samo predstavlja vrsto
stvar, ki ste oddajajo.
Torej, v tem primeru, sem uporabo ta niz novo sporočilo.
In to je samo v bistvu pravi, da tip to stvar, kar sem
pošiljanje, je novo sporočilo.
Tako da lahko poslušate za posebne vrste kot novo sporočilo, ali karkoli
s piko na.
>> Torej povezava in uporabniku poslal tja, če pogledate, če rečemo piko,
tistih, ki so ostali nizi, ki predstavljajo Vrste uporabniških sporočil.
Torej, to je v bistvu lahko imaš to oddajajo ena od teh vrst sporočil, in
naredite nekaj v odgovor na eden od teh tipov sporočil
>> Torej sem oddaja novo sporočilo.
Bomo prezreti connections.push za sekundo.
Ampak potem sem rekel, Socket.on uporabnik pošlje.
Torej, zdaj je nekako všeč, ko Uporabnik mi pošlje sporočilo, želim
da zaženete to kodo.
In opazil, da je ta anonimna funkcija je pokazal v tej spremenljivki
imenovano podatki, ki se v bistvu dogaja da ima sporočilo uporabnikov.
>> Torej, zdaj pa nekako govori o povezave matrika.
Torej je to namenjeno za stranko klepet kjer je v bistvu vsi nekako v
Enako klepetalnica.
Torej v bistvu, kaj moramo ohraniti okrog je nekaj matrika, ki v bistvu
zastopa vse ljudi v klepet nekaj načinov, če je to smiselno.
Kajne?
Ker moramo vedeti, kdo te fante tako da jim lahko pošiljate sporočila
da drugi ljudje pošljejo nas.
>> Torej, kaj ta oznaka pa je, ko uporabnik pošlje sporočilo - da je vrsta
dogodek -
bomo zagnati to kodo.
In kaj moramo storiti, je tečemo skozi to matrika, ki smo jih imenujemo povezave.
In precej za vsako povezavo razen tistega, ki je naša, ki je
kaj ta koda pravi, smo poslali novo sporočilo s tem, priloženega sporočilu
informacije.
>> Torej, če ste opazili, tukaj, kaj sem storil, ko uporabnik dejansko daje novo
je povezava Dodal sem z JavaScript.push način, to je
v bistvu samo pravim, kot dodajanje da Socket kot vrednost v
naša povezave matrika.
Torej, zdaj, ko je ta koda deluje, bo pošljete stvari tistim, zlasti
povezave.
Torej je to lahko dobro izhodišče za izdelavo strežnika za klepet
ali kaj podobnega.
>> In nekako kul stvar je, da kodo, ki jo vidite tu, kot na in
oddajajo in stvari, kot da je enako vrsta JavaScript kodo, ki bi jo
pisati v brskalniku za interakcijo s strežnikom.
Tako da je, zakaj SocketIO je nekako gladka in uporabna na ta način.
>> Oh, in samo ena stvar zelo hitro.
Lani je bilo CS50 končni projekt , ki v bistvu izvaja klepet
Strežnik v Node.js.
Mislim, da je Harvardchats.org ampak jaz nisem -
OK.
Nisem prepričan, kaj je URL, vendar Ne morem poslati, da ven kasneje.
Ampak to je nekako kul, kaj lahko to storite z Node.js.
>> Zato upam, da na splošno, fantje imajo Dober občutek, kaj Node.js je koristno
in kako bi lahko morda veljajo na svoj končni projekt.
Bom poslala nekaj več Sredstva skupaj s tem.
In hvala ker ste prišli.
Hvala vam.
>> [APPLAUSE]