>> KEVIN SCHMID: Ahoj všetci.
Vitajte na CS50 seminár na Node.js.
Volám sa Kevin.
Som CS50 TF.
A ja som niečo ako naozaj nadšená o tomto seminári.
Myslím, že Node.js je veľmi cool.
Dúfam, že tento seminár je možné použiť ako dobrý, myslím, odrazový mostík pre
niektoré z vašich záverečných projektov, ak máte záujem o využitie
niečo ako Node.js.
>> Budeme nejako začať seminár off len o trochu
druh pozadia škálovateľnosť Perspektívy Node.js, a potom
budeme pohybovať na niektoré príklady kódu.
A ja budem mať kód na webových stránkach, a môžete sa pozrieť na kód.
A po seminári, budem triediť hovoriť o tom, ako si môžete nastaviť Node.js
na vašom počítači.
>> OK.
Tak poďme začať.
Takže myslím, že som chcel hovoriť o webové servery, naozaj, ako prvý.
A začať túto diskusiu, som v podstate majú diagram, ktorý je od
učebnica používa pre CS61, ktoré v podstate ukazuje interakcie
medzi procesu klienta, ako je váš web prehliadača alebo ako váš cieľ klienta alebo
niečo také, a webový server.
Takže tento druh vyzerá podobne ako obrázok, ktorý ste videli v prednáške na
Streda, kde v podstate máme nejaké Proces klienta ako je Google Chrome.
>> A potom prvý krok je klient odošle požiadavku.
Takže to môže byť niečo ako dobre poďme návštevu, neviem, CS50.net.
Tak sme sa vydať túto požiadavku.
A nemá niekto spomenúť na meno protokol, ktorý špecifikuje, ako to
Žiadosť by mala byť štruktúrovaná?
Jo.
>> DIVÁKOV: [nepočuteľné].
>> KEVIN SCHMID: Presne tak.
Takže je to ako HTTP, nie?
Takže v podstate, ako špecifikácia že žiadosť by mala v skutočnosti byť stanovená
von, pretože na konci dňa, že žiadosť je naozaj len rád
Reťazec, ktorý v podstate hovorí, že to chcem.
A špecifikácia pre ktoré je HTTP.
Takže to je ako protokol.
>> Takže server dostane že žiadosť.
Takže vy máte nainštalovaný webový server v CS50 spotrebiča.
Je to Apache.
A tento týždeň, keď budete pracovať na probléme nastaviť sedem, budete skutočne pracovať
s týmto webovým serverom.
Takže server dostane túto žiadosť, a potom sa musí trochu poškriabať jeho
hlavu a povedať, ako dobre to, čo mám robiť s tým?
>> Takže na základe toho, čo sa rozhodne urobiť, potom to môže mať kontaktovať nejakú
zo zdroja.
A že zdroj by mohol byť veľa rôznych vecí.
Pre jedného, ​​by to mohlo byť len ako statické HTML súboru.
Takže to môže byť len ako nejaký HTML, ktorá je rovnako ako u
vaše osobné webové stránky.
Mohlo by to byť statický obrázok ako obrázok alebo ako film, ktorý máte.
Mohlo by to mať aj hovoriť do nejakej databázy
ako databázu MySQL.
Takže to nemusí vždy komunikovať so zdrojom, ale v
V niektorých prípadoch by to mohlo.
>> Tak čo to bude robiť potom, čo to je, že to bude
poslať späť odpoveď.
A odpoveď je to, tiež určuje HTTP.
Takže potom môže klient obdržať.
To môže roztrhať na kusy a spracovať ju.
A potom dostanete webovú stránku ako je Google alebo CS50.net alebo
čo šiel.
OK?
>> Tak to je základné interakcie, ktoré budeme sa zaoberajú.
A my sme dosť veľa bude zamerané na tejto časti
interakcie, server.
OK.
V pohode.
Má niekto nejaké otázky tak ďaleko?
OK.
>> Tak, ako sme si povedali, webový server dostane túto požiadavku HTTP a potom vydá takéto
Odpoveď HTTP.
A ako sme o tom hovorili skôr, CS50 spotrebiče webový server Apache.
Takže keď chalani pracovať na P set sedem, budete pracovať s
Webový server Apache.
Už nikdy nebudete musieť skutočne pracovať Apache priamo príliš veľa.
Môžete nejako konfigurovať Apache trochu keď zadáte na virtuálne hostiteľa alebo
Klinové hostitelia, a dostaneme sa, že v trochu.
>> Ale v podstate, web server Apache nastaviť pre prácu s PHP druhu
zo po vybalení z krabice.
Takže to, čo sa skutočne deje je, keď idete do jednej zo svojich webových stránok, ako je, povedzme,
miestneho hostiteľa lomítko index.php, alebo tak niečo, je váš prehliadač odošle že
žiadosť, a potom Apache sedí tam a vyrieši s tým robiť.
A akcia je vykonať že kód v index.php a
potom ho odoslať späť.
Takže tam je to.
Tak sme trochu hovorili o tom.
Takže by to mohlo slúžiť iba statický súbor alebo spustiť nejaký PHP kód a potom problém
odpoveď.
>> Tak častá otázka, ktorá môže prísť up je dobre, ako to naozaj riešiť
s tým viac užívateľov v rovnakom čase?
Takže si predstavte, že ste písali web servera, ak ste mal webový server, ktorý
ste sa snažili napísať niečo ako je C alebo niečo také,
v podstate môžete premýšľať o tom, ako sa tam by mohol byť nejaký druh kódu, ktorý
dostane žiadosť, ale potom to má robiť všetku túto prácu na ňom.
To môže mať, napríklad, kontaktujte databázy alebo niečo také.
Je to tak?
A potom, že by to ten druh spracovanie a potom
vrátený späť do reakcie.
Takže to je ako vysoko Prehľad úrovni.
>> Ale to nie je na prvý pohľad zrejmé, ako sa Môžete to urobiť tak, že dvaja ľudia, alebo
dokonca 1000 ľudí by mohlo fungovať s vaším webový server, v rovnakom čase.
Takže riešenie, ktoré využíva Apache sa nazýva vlákna alebo procesy.
Tak ste možno počuli o tieto pojmy pred.
To je v poriadku, ak nemáte, ale len, že o závitu alebo procesov ako spôsoby
operačný systém alebo užívateľský program alebo niečo také, alebo webový server
na druh vykonávať viac veci naraz.
Tak ste možno počuli termín ako závity prevedenie.
Takže je to niečo ako, že si druh multitasking.
>> A ak ste videli na krabici vášho notebook, alebo niečo také,
multicore, čo môžete urobiť, je môžete spustiť dva rôzne závity na rôzne
časti procesora tak, aby mohli v skutočnosti sa stalo v rovnakom čase.
Tak toto je naozaj silný.
A to je druh Apache riešenie tohto problému.
>> Takže je tam niečo ako prípadné problémy s týmto prístupom by?
Takže myslím, že som trochu písal ich tam.
Ale obaja tak nejako používajú veľké množstvo pamäte.
Je to veľmi drahé, na vytvorenie vlákno alebo proces.
>> A časť odôvodnenia je, že práve ako keď ste spustenie programu C
ako vaše hlavné a potom, že hovory ďalšie funkcie, ktoré má
nejaký zásobníka.
Takže vlákna tiež vyžadujú úplne samostatný zásobník, ktorý
môžu byť pomerne veľké.
A ak si môžete predstaviť, že veľa užívateľov na vaše webové stránky, mali by ste mať
mnoho rôznych vlákien.
To je veľa stohov spravovať a udržiavať.
Tak to je veľká spotreba pamäte.
>> A potom, aj, povedzme, že máte len jeden CPU, alebo povedzme, že máte
viac závitov, ako máte tie multicores.
Je to tak?
Takže povedzme, že ste mal 10 vlákien a pred sebou mali len päť procesorov.
Tak nejako urobiť túto vec, kde môžete prepínať medzi prúdom
ten, ktorý je spustený, pretože ste nemožno spustiť všetky 10 naraz.
A to sa hovorí prepnutie kontextu.
A že pojem má v skutočnosti niekoľko rôzne kontexty, ale povedzme,
myslieť na to ako spínacie medzi dvoma závitmi.
To môže byť veľmi nákladné, pretože v podstate to, čo musíte urobiť, je si
musieť zastaviť to, čo robíte, uložiť stav tohto spustený vlákno, a
potom prejsť niekam inam.
>> Takže sa všetci trochu vidieť motivácia, prečo závity a
procesy by mohli byť trochu objemný?
A už máte nejakú otázku?
OK.
V pohode.
Má niekto nejaké otázky?
OK.
>> Takže keď sme sa o krok späť za sekundu, tam je niečo ako
Zistenie, že by sme mohli o Mnoho webových aplikácií.
A to je fakt, že mnoho z nich v skutočnosti nerobia to veľa užitočné
pracovať vnútri závitu.
Takže sa niekto začal na P set sedem vôbec?
Takže chceš snáď popísať niektoré časti?
Pracoval ste na prihlásenie alebo niečo také?
>> Divákov: Nie
>> KEVIN SCHMID: OK.
To nič.
Prepáčte.
Ale v podstate, v sade P, ste bude robiť veľa druhu
dotazy na databázu, ako získať niektoré Informácie z tejto databázy.
A čo váš kód sa bude robiť, čo tento proces Apache alebo
že Apache vlákno sa bude robiť zatiaľ čo to má kontaktovať
Databáza je to trochu bude tam sedí, a to bude
čakanie na databázy odpovedať.
>> Teraz, keď nemusí znieť ako tak veľký zaoberať, pretože databáza je na vašej
CS50 zariadenie, nie?
Ale tam je nejaký druh siete Latencia tam, pretože teraz webe
server má vydať svoju vlastnú žiadosť databázy pre komunikáciu s
databázy a potom sa, že informácie späť.
Takže teraz je to ako dobre čakať na mňa, ja som ísť dostať niečo z
databázy a potom je tu Mnoho čakania deje.
Má to zmysel?
>> A niektoré veci, že to nie je tak zlé.
Je-li to len má, napríklad, prístup k pamäti, že to nie je ako
hrozný I / O latencia.
A keď hovorím, I / O latencie, čo som odkazuje na je ako akékoľvek podobné
vstup a výstup.
Ale prístup k súboru na disku, ako je keby som chcel slúžiť statické HTML
súbor, ktorý bol na mojej webovej stránke, alebo niečo ako, že som tak trochu musel
zastaviť na chvíľu, prečítajte si tento súbor od disku, a potom
že proces čakám.
Nebudem robiť užitočnú prácu.
>> To nie je pravda všetko, ale je to je bežné u aplikácií, ako je P sady
sedem a mnoho aplikácií že nie ste
vlastne robí veľa premýšľať.
A keď hovorím myslenia, mám na mysli ako výpočtovej prácu.
Takže výpočtovej práce by mohlo byť niečo, ako, povedzme, čo ste chceli
napísať webový server, ktorý práve vypočítanú nth Fibonacci číslo.
To neznie ako zvlášť zábava webový server.
Ako by som nečakal, že miesto, aby sa ďalšie Facebook, ale to je nejaký
druh výpočtovej práce.
>> A môžete si predstaviť, že s výmenou nejaký iný druh zaujímavý
výpočtovej práce.
Povedzme, že ste písali niečo ktorý počítal stupňov
separácia medzi dvoma ľuďmi alebo niečo také.
Takže to robí zahŕňať nejaký druh výpočtu, nie?
A aj potom, k tomu, že stále máte urobiť veľa čakania na možná
Máte otázku na databáze sa pozrieť up, ktorý je priateľom, ktorý alebo
niečo také.
Takže tam je to trochu pojmu z výpočtovej práce.
Má to zmysel?
Má niekto nejaké otázky?
>> Jo a myslím, že som dal chatovacie servery tu pretože chatovacie servery sú druh
Ďalším dobrým príkladom.
Chatu server nemá robiť veľa premýšľať.
To jednoducho musí čakať na ľudí, aby posielanie správ a potom, keď
oni, pošlite ich.
OK?
>> Takže len preto, aby znovu rekapitulovať, Apache a podobné webové servery, ako že vidlica
Mnoho procesov a podprocesov, ktoré môže byť trochu márnotratné.
Takže myslím, že na otázku, ktorá môže prísť z ktorej je potrebujeme mať
viac podprocesov a procesov?
Čo keby sme mali jedno?
>> Takže poďme sa trochu namaľovať obrázok o tom, čo by to vyzerať.
Takže poďme použiť iba jeden závit.
OK?
Tak len si to s jedným závitom.
>> Predpokladajme, že sme naozaj robí že veľa užitočné - a keď hovorím
užitočné, myslím výpočtovej práce -
v tých niekoľkých vlákien predtým.
Takže poďme trochu konsolidovať všetko v jednom vlákne.
Tak čo keby sme mali jedno vlákno tohto druhu zo len ide okolo slučky a
neustále kontroluje urobil niečo nový štát.
Tak napríklad, niečo nové sa stalo mohol povedať, že som niečo späť od
databázy, alebo niekto poslal mi nový požiadavku HTTP.
Takže to sú druhy akcií aby sa to stalo, nie?
>> A potom, čo môžem robiť, keď tie nové veci sa dejú v tomto rovnakom vlákne
realizácie, tento jediný závit prevedenie, môžem zavolať nejaký kód, ktorý
by zvládnuť túto konkrétnu vec.
Tak napríklad, keď som niečo späť z databázy, mohol som bežať môj
malá výpočtovej časť, ktorá vlastne len pripravuje na vec
zaslať späť užívateľovi.
Tak to robí trochu zmysel?
>> Ale čo je naozaj dôsledky to?
Je to tak?
Vzhľadom k tomu, že sme napísal veľa kódu, ktorý -
a ja len tak na skok dopredu na diapozitívy, či je to v poriadku.
Takže ak vám to nevadí, ja som len chystá urobiť krok späť.
Takže tento druh vecí je tzv slučky udalostí.
OK?
A to je docela základné Myšlienka Node.js.
>> Takže to, čo Node.js je naozaj robí ako web Server je tam jeden závit
, Ktorý je v podstate deje okolo v slučke ako, zatiaľ čo jedna druhov nedostatočne
kapucňa v Node.js to neustále kontroly, sme prijímať nové veci?
A potom to bude fungovať manipulátory ktoré ste nastavili.
Ale dobrý na niečo opýtať, je, ako môžeme urobiť to stalo
s existujúcimi vecami?
>> Tak som dal riadok kódu C tu, že v podstate vyzerá to, že otvorenie
súbor, nie?
Aj ona práve vyšiel s albumom.
Tak som ju musel otvoriť nový súbor.
Takže ako naše C kód pre prevádzku -
a myslím, že dôvod, prečo som si vybral súborov bol pretože to je druh rozsahu
o I / O prácu, ktorú sme urobili v C pocit, že tam je vstup a výstup.
Tak nazývame tento kód, ktorý robí to f otvorený.
A potom na ďalší riadok našich Program, teraz môžeme pracovať s f.
>> Takže by to byť príkladom niečoho to je ako synchrónne alebo
blokovanie, pretože na tomto prvom riadku tam čakáme, kým sa
získať súbor otvorený.
Takže na druhom riadku, vieme, že môže pracovať s f, ale to znamená, že
že druhý riadok nemôžem spustiť do prvý riadok je hotovo.
Má to zmysel?
>> Tak to by bolo zlé, aby v obslužnej rutine udalosti.
A dôvodom je, že tento druh čaká, že jo?
Tak to by nás vrátiť späť na rovnakú vec.
A teraz by sme ani prínosom viac vlákien alebo
procesy, pretože sme dostali jeden závit Node.js.
Znamená to, že zmysel pre každého?
>> DIVÁKOV: Počkajte.
Takže to, čo je výmena?
>> KEVIN SCHMID: Oh, tak áno.
Takže budem sa dostať do náhradné.
OK.
Tak čo keby sme mali niečo ktorý vyzeral takto?
Takže čo keď teraz som upravil f otvoriť trochu?
Takže som okolo v rovnakej dva argumenty ako predtým.
Stále ťa milujem novú pieseň ktorá vyšla s
Ale ja som okolo tretej vec, ktorá je táto premenná nazýva kód.
>> Ale čo je vlastne kód v tejto súvislosti?
Je to ako bežné premenné C?
Je to funkcia, nie?
A to môže byť preto, že trochu divný Som vlastne ako teraz okolo
funkcie do inej funkcie.
>> Takže pár postrehov o tom.
Po prvé, ja nie som v skutočnosti volanie kód funkcie.
Takže nevidíte kód vľavo zátvorka, pravá zátvorka.
Len som okolo v kóde.
A v C, čo by to vlastne robiť je mi dať ukazovateľ, že skutočná
kód, a potom by to mohlo spustiť.
Ale len premýšľať o tom, ako ste absolvovaní spustenie kódu, ak
že súbor je otvorený.
>> Ale čo to znamená, že teraz Zvyšok môjho programu, ktorý by mohol robiť
ďalšie veci, môžu pokračovať v tom iný veci, zatiaľ čo my, naozaj nie čakať, ale
len v zadnej časti našich hlavách, že pri otvorení, beh tohto súboru je, že
Kód na vrchole.
Má to zmysel?
>> A teraz myšlienkou Node.js je, že kód vo robiť veci s f
časť by mala byť dosť krátke a jednoduché a jednoduché a nie je naozaj byť
veľmi výpočtovo náročné.
To môže otvoriť iný súbor, ale ktoré by mali byť tiež celkom rýchlo
pretože to by jednoducho povedať, urobiť ďalšie f otvoriť a potom volať toto ďalší kód.
>> Takže len úplne jasné, f otvorení, ktoré prináša nová Katy Perry pieseň
done mp3, že to bude dosť moc sa okamžite vráti.
A potom sa môžeme len pokračovať v tom, ďalšie veci, pretože všetko, čo teraz f
Otvorená výzva sa je povedať v podstate Základným f otvorený kód otvoriť tento súbor
a keď ste hotoví otvorení tejto súboru, alebo keď si to späť,
spustite tento kód.
Ale to nie je v skutočnosti spustený tento kód.
A vy ste mal otázku?
>> DIVÁKOV: Zdalo sa mi naznačiť, pár časy, že pridanie výpočtovo
intenzívny kód nejako rozbiť [Nepočuteľné] riadený systém.
[Nepočuteľný]?
>> KEVIN SCHMID: To je veľká otázka.
Takže som vlastne máme príklad toho, ako môžete integrovať výpočtovo
intenzívny kód v trochu.
Takže, keď sa dostaneme do príkladoch kódu, Budem určite vytiahnuť, že jeden.
Je to v poriadku?
Ďakujem.
>> Aké bolo vaše meno?
>> DIVÁKOV: Aaron.
>> KEVIN SCHMID: Aaron prináša až veľmi dobrý bod, čo je to, že keď som mal
niektoré výpočtovo náročné kód robiť veci s f časť, zvyšok
môj program nemožno spustiť a nemôže počúvať pre nové žiadosti, alebo nič, kým všetci
že vec je dokončená.
Takže keď píšem kód uzla všeobecne ak urobíme niečo ako ja idem
navrhnúť neskôr, keď sa pozrieme na príklady kódu, musím si byť istí, že
môj kód nie je priviazať táto slučka udalosť.
Má to zmysel?
OK.
V pohode.
>> Takže Node.js ponúka tento rámec, ktorý môžete vytvoriť tieto udalosti riadený
Servery sa.
Tak to má tento druh asynchrónne neblokujúcou I / O knižnice, vzhľadom k tomu,
štandardnej knižnice C, ktoré sme boli prácu s, ako keď ste práve
používať rovnakým spôsobom, že sme Používam je s f otvorí a
veci, ktoré sú blokovania, pretože ste skutočne musieť počkať
tento súbor otvoriť.
>> Ale Node.js vám to dáva, a to v podstate nadväzuje na Google V8
JavaScript engine, ktorý je dôvod, že Chrome je v spracovaní tak rýchlo,
JavaScript, pretože má tento motor V8.
Takže viem, že to znie ako jeden z tých, WWDC vývojárskej konferencie vec
kde sa len hodiť veľa číslo písmeno veci pre procesory
a hovoria, že je to v pohode.
Ale to je v pohode, že to urobili to preto, že JavaScript -
alebo možno, ak nie ste oboznámení s JavaScript napriek tomu, pretože sme nemali
prednášky na ňom -
ale JavaScript je interpretovaný jazyk.
>> A to je dôležité tiež.
Takže je to dôležité pre náš web Servery byť rýchly, že jo?
A keď sme boli len beh kódu JavaScript kód, ktorý bol vyložený len s
nejaký starý interpret by to mohlo byť pomalé.
Takže uzla ťaží z nutnosti tento super rýchly V8 tlmočníka.
A ja neviem, či sa volal ho pretože V8 facka do čela
vec, ale OK.
>> Tak som si pripravil niekoľko príkladov na tejto adrese URL.
Po seminári, som nejako bude hovoriť o tom, ako môžete získať sadu uzla
, Ale teraz, som len trochu chcieť prejsť niekoľko príkladov kódu.
Takže ak chcete sledovať spolu, všetky Zdrojový kód je k dispozícii tu.
OK?
>> Tak som si nechať túto adresu URL pre málo.
A potom som len tak prepnutie do terminálu.
Sú všetci dobre s týmto URL?
Takže budem prepínať k môjmu terminálu tu.
>> Tak tu je kód, ktorý Mám na dnešok.
Prečo nie začneme s simpler.js súbor?
Druhá vec je, že to všetko kód sa bude napísaný v
JavaScript ktoré môžu alebo nemusí byť poznať.
Myslím, že pár vecí je to, že mnoho kódu JavaScript je druh
syntax a štruktúra je veľmi podobná C, takže môžete trochu zdvihnúť ako
idete spolu.
Snažil som sa napísať veľa predvolený kód pre tento takým spôsobom, ktorý je
podobne ako C, tak, že je trochu čitateľnejšie.
Ale ako postupovať, budem demonštrovať niektoré dodatočné
funkcie JavaScript, ktoré sú celkom v pohode.
>> Ale poďme sa pozrieť na tento ukážkový program.
Myslím, že všetko, čo je odrezať tam.
Ja som jednoducho ísť opraviť, že skutočná rýchlo, pokiaľ je to v poriadku, alebo nie.
Ja neviem, čo to bude robiť.
Je to trochu lepšie?
Vidíte var a tak?
OK.
>> Takže prvý riadok je ako JavaScript version premenné
vyhlásenie.
Takže len upozorniť na to, čo to by vyzerať ako v C. Takže je to len ako
mi hovorí, index sa rovná tri alebo niečo také.
Tak som neuviedol typ.
JavaScript má mať typ, ale je to veľmi dynamicky napísaný v prírode, tak
neposkytla žiadny druh druhu na neho.
Tak to proste je var.
To je ako premenné.
OK?
>> A ja volám túto premennú HTTP.
A na mojej pravej strane, mám Výraz, ktorý chcem dať do HTTP.
A to hovorí vyžaduje HTTP.
Tak to je celkom podobný obsahovať.
Je to trochu ako silnejšie ako sú v tom zmysle, že zahŕňajú
by len skopírovať a vložiť hlavičku súbor pre funkčné prototypy alebo
čo s definíciami typu.
Ale treba sa v skutočnosti deje k nám dostanete kód.
>> Takže si môžete myslieť na to, ako import nejaký kód.
Takže niekde v module Node.js systém alebo čo, že majú všetko
Kód HTTP server, takže som len načítanie je pre moje vlastné
osobné využitie tohto programu.
OK?
>> Tak som si túto funkciu ktoré som napísal.
A Všimol som si nemusel špecifikovať návratový typ alebo typ
argumenty znova.
Tak trochu voľné zadali tento druh zmysle.
Dva argumenty, že sa berie v, požiadavku a odpoveď.
Tak to je koncepčne niečo ako známe z obrázku, že sme mali
Na obrazovke sa skôr, pretože dostaneme túto požiadavku, že
majú od užívateľa.
A potom máme odpoveď, ktorá môžeme písať veci.
>> Takže prvý riadok to robí res.writeHead 200 a potom to
Typ obsahu textu jasné.
Takže poďme sa tento kúsok od seba trochu.
Takže poďme sa sústrediť len na res.write pre málo.
Takže zápisnica je v podstate, a zapisovacie hlavy, sú len spôsoby, ako sa trochu vypísať
veci na odpoveď.
OK?
Takže písať hlavu, či niekto pamätá z prednášky HTTP, si chlapci
pamätať záhlavie na Horná veci HTTP?
Tak prečo nie ja len demo záhlavie naozaj rýchlo.
Bolo by to užitočné?
Alebo by sme mali len trochu -
OK.
Iste.
>> Takže keď váš prehliadač prejde na google.com alebo niečo také,
je to vlastne trochu viac -
je to ako tajomstvo -
tam je ako trochu viac informácií ktorá prichádza skrze potrubie, než len
Trochu hľadanie a všetko.
Takže vám to ukázať, idem použiť program s názvom Curl.
OK?
Tak to je niečo, čo môžete spustiť na váš Mac OSX príkazového riadku alebo v
zariadenie alebo čokoľvek iného.
A tak keď som sa Curl HTTP google.com, Idem vidieť HTML.
A to je, v spravodlivosť, len HTML, ktorý druh vám povie
presmerovanie na www, ak váš prehliadač nepodporuje automaticky spracovávať
presmerovanie.
>> Tak to je len HTML, ale idem pridať k Curl túto pomlčku som vlajku.
OK?
A to bude ukázať mi hlavičky.
Takže to je tiež informácia, že je až keď som si túto odpoveď.
OK?
>> Takže hore, vidíte to HTTP 301 presunúť natrvalo.
A to je docela dôležité, pretože toto sa odkazuje na stavovom kóde.
Takže 301 je tu stavový kód, čo je v podstate len číslo
ktorá hovorí prehliadači, alebo ten, kto je čítaní tohto, ak sa predstierať, že
ste prehliadač a vidíte to, v podstate teraz keď sa pozriete na
to a uvidíte 301, viete, mám urobiť niečo špeciálneho na základe
301, alebo niečo zvláštne sa stalo vztiahnuté na 301.
Tak to hovorí presťahoval natrvalo.
>> A potom, v podstate, máme banda kľúče a hodnoty.
Tak sme sa na miesto je www.google.com.
A potom sa trochu všetko ostatné veci, ale v podstate to, čo miesto je
príslovie je nové umiestnenie je na www.google.com.
Takže teraz, ak pôjdete do google.com, budete si musieť vybrať trochu vidieť druh prehliadača na mihnutia
za druhé a potom presmerovať späť na www.google.com.
Takže odpovede môžu obsahovať Tieto hlavičky.
>> A pár vecí, ktoré poukazujú.
Takže povedzme, že sme boli naozaj úspešní pri návšteve webovej stránky.
Tak nechaj ma ísť do -
Čo je dobré webové stránky?
Som zlý myslenia dobré webové stránky na mieste.
>> DIVÁKOV: Wikipedia.
>> KEVIN SCHMID: OK.
Poďme urobiť Wikipédii.
Tak tu som bol dojatý.
Ale počkajte.
Bola som?
Áno, bol som.
OK.
Tak som sa dostal k tomu www.
Takže budem robiť www.
A ako vidíte, tu je všetko HTML , Že prehliadač spracuje
pre Wikipédiu.
>> Ale keď som sa držať rolovanie tu, čo budem vidieť hore -
wow, je tu veľa HTML na Wikipédii -
ale to, čo vidím na vrchole je tu Tento 200 stavový kód, ako protichodný k
301, že som videl skôr.
A všimnite si, že to má pekný priateľský OK vedľa nej.
Takže je to ako dobrý stavovým kódom.
>> Znamená to, že 200 počet vyzerajú povedome?
Áno, pretože keď som simpler.js, Som napísal 200 tam.
Tak to je v podstate hovorí, povedzte prehliadač alebo ten, kto sa snaží dostať do
to, že boli úspešní.
Alebo, že druh ako my boli úspešné príliš.
>> A tam je to trochu zvláštne syntaxe v JavaScriptu pre vyhlásenie
mapa z týchto tlačidiel, ako je typ obsahu a tieto hodnoty ako textové rovine.
Takže keď sa pozriete na odpoveď, že sme sa vrátil z Wikipédie skôr, -
Budem sa snažiť posunúť sa trochu rýchlejšie -
máte tieto klávesy ako servera a tieto hodnoty Apache.
Takže máš kľúče a hodnoty.
A môžete špecifikovať v Node, čo odoslať späť.
>> Takže je to vlastne druh, v niektorých spôsoby, a v niektorých ohľadoch to nie je
Naozaj, ale to je trochu nižšia úroveň ako PHP kód, ktorý by mohol byť
písomne ​​P nastaviť sedem, pretože PHP a Apache nejako postarať sa o niektoré
z týchto vecí pre vás.
V PHP môžete prepísať predvolené správanie písanie vlastných hlavičky.
Ale pre účely tohto, dostaneme písať naše vlastné hlavičky.
>> Takže to, že linka zmysel všetci, zapisovacie hlavy línie?
OK.
Úžasné.
>> Tak čo mám robiť potom je, že som koniec odpoveď tým, hello world.
OK.
Ale to je len funkcia tzv handler žiadosť.
Takže teraz som vlastne musel trochu robiť niečo, čo sa tejto funkcie, že jo?
>> Tak tu to, čo robím, je, že je to čiara, ktorá robí servera rovná var
HTTP.create servera, a potom som odovzdať psovoda vyžiadanie.
Takže je to trochu z uzla spôsob, ako vytvoriť server.
A všimnite si, že som okolo v obslužnej rutine žiadosti.
Takže je to hovorí createServer funkcie, ktoré chcem, aby si ma robiť
servera, a keď to server dostane odpoveď, musím si zavolať to
požiadať o funkciu spracovania.
OK?
>> Tak, že linka do značnej miery končí hneď.
Takže server linka var sa vykonáva priamo potom, čo robíte, že dosť veľa.
Myslím, že to má nastaviť niektoré vnútorné stať, že budete musieť
volanie tejto funkcie manipulačného žiadosť, ale že to nebude sedieť a
dajme tomu má užívateľ odoslal mi ešte žiadosť?
Má užívateľ mi poslal žiadosť ešte?
Takže to neblokuje.
OK?
>> Tak čo to bude robiť, je to v podstate sa uloží ukazovateľ na tento kód,
táto funkcia spracovanie žiadosti, a potom pobeží tento kód, keď niekto
vytvorí požiadavku.
A potom sme to server.listen.
>> 1337 je dosť subjektívne.
Nemal som žiadny zvláštny dôvod pre uchopenie toto číslo.
Bolo to úplne náhodné.
Ale to len určuje port.
Takže väčšina webových serverov, uvidíte, že použiť port 80, pretože to je niečo
zo ako konvencie.
Takže keď som sa ísť na niečo ako, Neviem, Wikipedia.org,
a dal som dvojbodku 8 -
oh wow, nemôžete vidieť, že.
Je mi to ľúto.
Ale keď to urobím Wikipédii -
Napíšem to sem len preto, aby je jasné, že na fotoaparáte.
Ale keď som si to do prehliadača sa hrubého čreva 80, ktorý stanovuje, prejdite na
Wikipedia.org na porte 80.
Takže je to ako, ako Spojené štáty majú viac porty, ako je, kde sa môžete dopraviť
veci na druhu.
Takže je to ako ísť na tento konkrétny miesto na tomto serveri.
OK.
>> Tak som si vybral 1337.
K dispozícii je celý rad čísel že si môžete vybrať.
To nebolo celkom zvláštne.
>> Ale čo budem robiť teraz sa budem bežať uzol.
Dovoľte mi, aby som vlastne zadajte, že pár riadky dole, takže ju môžete vidieť.
Chystám sa urobiť uzol, a ja som chystá spustiť simpler.js.
A budeme hovoriť o tom, ako sa dostať Uzol nastaviť v trochu.
Ale teraz je to len beh servera.
>> Takže jedna vec, ktorú môžete vyskúšať, ktoré nemusia sa stať, že vzrušujúce je, že môže skutočne
pokuse o prístup k ho Curl.
Takže môžem robiť Curl, a my Stroj je lokálny hostiteľ.
Budete tiež vidieť písomné takhle niekedy.
Miestneho hostiteľa a 127.0.0.1 sú druh zo ako v domácom počítači.
Takže je to ako hovoriť do vlastný počítač.
OK.
>> A potom môžem povedať, 1337.
Takže keď som spustiť tento riadok kódu, sa hovorí, že hello world.
A keď som chcel vidieť, že veci, ktoré Mal texte typ obsahu hladké alebo
čo by som mohol ešte dať to sem.
A všimnite si, že to hovoria v poriadku.
A mám texte pláň.
A potom je tu trochu všetko ostatné veci, ktoré Uzol sa pridá do
tam pre mňa.
To nie je veľmi dôležitá.
>> Myslím, že tam sú nejaké technické aspekty na to sú druh
v pohode hovoriť, ale len ukázať, vy, mám tiež moc
zmeniť to okolo.
Takže môžem len pridať veľa o také veci.
A potom teraz, keď sa pozriem na môj výstup, bude sa stať, že.
Takže tieto hlavičky znamenajú určité veci do prehliadača a podobné veci.
>> A hlavičky možno v zásade povedať prehliadač ako reagovať na niečo.
Ak ste niekedy počuli cookies skôr, alebo ak ste niekedy boli naštvaný
o webovej stránke nastavenia cookies alebo akceptovanie cookies bloku alebo
niečo také.
Môžete dokonca nastaviť súbory cookie v týchto záhlaví.
Takže povedať prehliadači, ako správanie v niektorých prípadoch.
OK.
>> Tak to bol simpler.js.
Má niekto nejaké otázky, Na tomto zdrojový kód súboru?
OK.
V pohode.
>> Takže poďme odstrániť r od a pozrieť sa na simple.js.
Tak to je docela veľa rovnaký program.
Len som to napísal trochu inak pretože som chcel vyriešiť odlesku
niektoré funkcie JavaScriptu.
>> Tak zistíte, že psovod žiadosť Funkcia je úplne zmizol.
Ach jo, si na niečo spýtať?
>> Divákov: Jo, argumenty ktoré sú odovzdávané, že
funkcie, k čomu sú?
>> KEVIN SCHMID: Tak to sú JavaScript objekty.
V dokumentácii Node.js, že v podstate hovorí, aké metódy sú
k dispozícii na ne.
Práve sme sa náhodou majú prístup k táto metóda nazýva zapisovacia hlava a koniec
a tak podobne.
Ale je tu celá partia viac metód.
>> A napríklad, ako jeden z nich najmä pokiaľ ide o rek, môžete to urobiť
niečo ako rec.method, ktoré bude povedať, či je to HTTP GET alebo
HTTP POST požiadavke a podobné veci.
Takže je tu všetky druhy líši vlastnosti, ale sú aj
JavaScript objekty, a oni jednoducho majú funkcie s nimi spojené, ktoré vám
Môžete písať veci.
OK?
>> Takže všimnúť, že obslužná rutina žiadosti je úplne preč.
Ale kód, ktorý som mal v žiadosti Psovod je tam stále.
Stále mám tento res.writeHead a stále mám túto res.end.
A čo to je príklad v JavaScript je táto myšlienka
anonymné funkcie.
a anonymné je ako názov armatúry , Z dôvodu, že doslova nie je
majú meno.
Neexistuje požiadavka funkcie Psovod tam.
>> Nemá meno, ale je to stále je pri argument.
Tak som ešte dostal rec a res.
A stále mám kód.
To je úplne v poriadku JavaScript kód.
Takže môžem deklarovať funkciu bez výslovne dávať to meno.
Je to na prvý pohľad trochu mätúce.
Tam sú niektoré, ako užitočné veci ktoré môžete robiť s
Tieto anonymné funkcie.
Má niekto nejaké otázky na túto tému, alebo je to v poriadku len pre teraz,
nejako jednoducho prijať, že bude robiť to isté?
Jo?
>> DIVÁKOV: Sú funkcie prvý triedy v JavaScriptu?
>> KEVIN SCHMID: Sú to prvé triedy v JavaScriptu.
A len viem, že tieto pojmy prechádzajúcej v anonymnej funkcie, ako je
to platí pre JavaScript, aby ste môže napísať v poslednom projekte
webový prehliadač príliš.
Tak napríklad, v kóde JavaScript Váš prehliadač, je to tiež trochu akcie
riadený v tom zmysle, že to, čo budete majú je, keď používateľ klikne na to
tlačidlo, chcem, aby si spustením tohto kódu.
>> Takže je to rovnaký druh myšlienok na strane klienta, keď kliknutím myši, alebo sa
myši nad nejakým obrazom na vašom webové stránky, spustiť tento kód.
Ktoré možno použiť k serverom.
Takže je to niečo ako vzrušujúce Dôvodom, prečo JavaScript je naozaj
vhodné alebo niektorí ľudia si myslia, že je to vhodný jazyk pre tento druh
Server Driver udalosť, pretože máte Tieto anonymné funkcie.
Máte celú myšlienku Tento asynchrónny kód.
OK.
Má niekto nejaké otázky?
>> OK.
Tak to bol simple.js.
Takže poďme sa pozrieť na jeden alebo pár ďalších.
Tak toto je sleep.js.
Takže je niekto pozná Funkcia sleep C?
Asi z jednej z predchádzajúcich prednášok alebo niečo také?
>> Takže v podstate sa môžete prejsť v Myslím, že počet sekúnd, alebo ak používate ú
spať počet milisekúnd alebo nanosekúnd.
A v podstate program zastaviť systémom pre túto dobu.
Je to tak?
A potom, že sa prebudí a nakoniec potom to bude len pokračovať v jazde
programu.
>> Takže tento server nejako dáva dojem spanie.
Takže si všimnúť, že máme rovnaký res.writeHead 200 s hlavičkou ako
predtým, ale potom sme volať to Funkcia tzv set timeout.
Nastavte časový limit je tiež k dispozícii v váš webový prehliadač Google Chrome
alebo Safari alebo čokoľvek iného.
A v podstate to, čo to robí tu Je to trvá do funkcie.
Všimnite si, opäť, je to anonymné funkcie.
Tak to je celkom v pohode, pretože sme pomocou anonymné funkcie v rámci
anonymné funkcie, ktorá môže byť trochu divné.
>> Ale to brať túto funkciu, ktorá je v podstate hovorí - a ako to
Práca je 5000 milisekúnd, chcem môžete spustiť túto funkciu, ktorá
práve končí odpoveď a píše hej.
Takže to pôsobí dojmom, ako spí, ale ako to v skutočnosti
Pracuje sa budeme prejsť táto línia veľmi rýchlo.
Práve sme niečo písať.
A potom budeme tiež prejsť táto línia veľmi rýchlo.
Takže sme vlastne deje na počkajte päť sekúnd.
Sme len tak bežať Tento kód okamžite.
>> A potom je tu opäť, tento malý udalosť slučka, ktorá má túto vec
registre, ktoré v podstate je len Neustále sa točí v kruhu
a pri pohľade na hodiny v jeden nite a hovorí, má päť sekúnd
prešiel ešte?
A potom, keď vidí, že druhý ruka sa presunula tak päť sekúnd alebo
čokoľvek, potom sa prebudí a povie, oh, čo mám robiť?
No musím sa spustením tohto kódu.
A potom, že to bude spustiť res.end hej.
>> Takže znova, my nikdy čakať tu.
Takže to nie je, že tento kód vo vnútri táto funkcia bude trvať päť
sekúnd bežať.
Tento kód bude bežať do značnej miery okamžite, aspoň vo vzťahu k
päť sekúnd, po ktorej sme hovorili o skôr predtým.
>> Takže len to ukázať v akcii, Môžem robiť Node.sleep.js.
A robil som to bordel až niečo?
Možno.
Prepáčte.
Pozrime sa, čo môžeme urobiť, opraviť to.
OK.
Takže určite používať Node.js.
Ja som si srandu.
OK.
Len jeden sec.
OK.
Ja viem, čo to je.
>> Takže problém je, že v mojej druhej záložke tu, som bežal Uzol už na
že rovnaká adresa, 1337.
Takže chyba, že to hodil, ak sa pozrieme na to skutočná pozorne, je adresa
použitie, EADDRINUSE.
Tak som sa už s použitím 1337 tu.
Takže keď som zavrel to preč, a potom som sa podnikom skúste spustiť to, dúfajme, že všetko, čo
bude v poriadku.
OK.
Takže môžete mať iba jednu vec druhu načúvanie na porte naraz.
Ďalším riešením by bolo pre mňa len editovať tento program a skontrolujte,
to bude ako 1338 alebo tak niečo takto.
>> Ale teraz spánok beží.
Takže poďme vlastne to vyskúšať v Prehliadač tentoraz, pretože je to
trochu nezaujímavý vidieť , Že v termináli.
Takže som jednoducho ísť na to 127 adresa opäť na 1337.
A ak ste ho vidieť -
Ja neviem, či je to možné - ale my Prehliadač je brať veľmi, veľmi dlho
čas na načítanie alebo ako päť sekúnd.
>> A potom to, že konečne ukončil odpoveď.
A nemôžete vidieť, pretože to sa presunul trochu, ale keď urobím
to o niečo menšie, môžete môžete vidieť, že hovorí, že hej.
Tak som hej, ale po piatich sekundách.
A to by mohlo byť trochu čistejšie vidieť je to tu na termináli, takže som
robiť -
Poďme urobiť tu -
Poďme urobiť Curl tejto adrese opäť s 1337.
A ja som tak nejako sedieť Tu po dobu piatich sekúnd.
Ale všimnite si, že server môže prijať nové opatrenia.
Tak to vytlačí hej.
>> A demo to, v podstate to, čo Môžem robiť v tejto druhej záložke -
takže povedzme, že som to urobiť v inom karte, Budem robiť Curl a rovnaký
vec znova.
A budem sa snažiť, aby kopať týchto chlapci preč v rovnakom čase.
Tak idem na to, a ja som bude pretekať tu a ja som
robiť to znova.
>> A urobme to tak, že si Môžete vidieť oba.
To je jeden tlačený hej, a že jeden tlačený hej celú cestu na -
poďme robiť tento experiment znova.
V skutočnosti, poďme použiť trik, či je to v poriadku.
>> Takže budem používať shell vec, ktorá mi umožňuje v podstate spustiť dve kópie
tohto programu paralelne.
Takže to bude bežať prvý program a druhý program paralelne.
Takže teraz, keď som stlačte klávesu Enter, bude to aby táto žiadosť do značnej miery
okamžite v rovnakom čase.
Takže poďme to dať šancu.
>> Takže teraz Všimnite si, že hovorí, že dva procesy.
A ak ste zvedaví, že 27,000 číslo je v podstate proces ID.
A potom všimnete, že tlačené hej v rovnakom čase.
Bolo to, ako by sme museli čakať päť sekúnd pre jednu a potom po tom,
päť sekúnd neskôr sa na druhej.
Tak to je druh, v niektorých ohľadoch, je to naozaj dôkaz, ale je to
intuitívne dôkazy o tom, že to nie je len ako čakať päť sekúnd a blokovanie
celý závit.
OK v pohode.
>> Takže Aaron spýtal skôr, že bolo dobre, čo keď to niečo urobiť -
Jo?
>> DIVÁKOV: Počkajte.
Ako sa to líši od printf vyrovnávacej pamäti, aj keď?
Nie je to automaticky robiť, že?
Prečo sa musíme starať o to?
>> KEVIN SCHMID: Oh, mohol by si hovoria, že ešte raz?
>> DIVÁKOV: Nemá rád printf vyrovnávacej pamäti robiť presne to isté?
>> KEVIN SCHMID: printf vyrovnávacia pamäť?
>> DIVÁKOV: Jo.
OK.
Nebol v jednom z kvízov, ktoré boli hovorí o tom, ako, ak kliknete pravým printf
niečo, a potom si to pauza jeden druhej, a potom máte to slučku desať
časy, bude to čakať desať sekúnd a potom printf všetko dohromady?
>> KEVIN SCHMID: Oh, OK.
>> DIVÁKOV: Je to to isté vec, potom v tomto prípade?
>> KEVIN SCHMID: Takže otázka bola v podstate v jednej z bývalých kvízov
alebo tak niečo, tam bola otázka, ktorá v podstate, ak hovoríte, tlačové F 10
vecí naraz a potom spal ako v proces tlače z tých,
na konci nejakého dôvodu, by to len výpis tých, všetci von na obrazovke.
Takže tam to celkom dvoch rôznych pojmy tu.
>> Takže myslím, že jedna vec je, že v tomto prípad, máme čo do činenia s dvoma rôznymi
druh ľudí pýtať na serveri veci, v rovnakom čase.
A dôvod, prečo printf druh čaká takhle a vypíše to všetko
zrazu sa viac týka ako printf druh -
Spôsob, akým je v skutočnosti printf vykonaný, je to v podstate má
hovoriť s operačným systémom písať že veci na konzole.
Takže to nechce robiť všetko veci okamžite, keď hovoríte printf
nejaký reťazec, pretože to by mohlo predražiť, ak má
to, že zakaždým.
>> Takže ak ste to printf hej, program nemusí v skutočnosti tlači, že
bezprostredne na konzolu.
Mohlo by sa povedať, OK, napísal som to.
A potom trochu čakať na vás, aby je to trochu viac, než v skutočnosti
písať to do konzoly.
>> Takže dôvod, prečo tomu tak bolo -
a je to celkom nesúvisí k spánku -
je, že spánok bol trochu len injekčne preukázať tam
Skutočnosť, že sa nepíše to synchrónne.
Ale dôvod, prečo to je len výkon, takže nemusíte
robiť, že veľa kontaktov na operačný systém.
>> Ale tu, čo sme naozaj snažia robiť s týmto spánku vec je jednoducho ukázať
že keď máme dvoch ľudí návšteve Táto webová stránka, že to nebude dať
je v riadku, kde je to chystá povedať, Musím vám pomohol, a potom, keď som
úplne dokončená vám pomôže po nich päť sekúnd, potom budem
presuniete na ďalšie osoby.
Takže požiadavka prvého človeka nie je priviazať, že slučka pre organizovanie akcií,
ak to dáva zmysel.
>> Ale tu je v skutočnosti príkladom niečo, čo nadviaže
do slučky udalostí.
Tak tu je to hrozný funkciu výpočet n-té Fibonacciho.
Je to doslova horšie spôsob, ako môžete výpočet n-té Fibonacciho čísla.
A to je vlastne len na vedomie kde to prišlo z,
je to vlastne -
Myslím, môžete skúsiť ísť nájsť - ale tam to ako veľmi zdĺhavé blog
príspevok, ktorý niekto napísal.
Je to ako jedna z tých Reddit vecí.
Ale niekto kritizoval Node.js, a oni používali to ako príklad.
Tak nejako som chcel len ukázať vám dva rôzne pohľady len preto, aby
všeobecné chápanie pojmov Za týmito dvoma vecami.
>> Ale to je zvolená len ako hrozné, strašne neefektívne výpočtovo
Intenzívny spôsob, ako vypočítať nth Fibonacci číslo.
Takže len ako vedľajší poznámku, prečo je je to hrozné, ako v jednej ceste?
Jo?
>> DIVÁKOV: Povedzme, že začnete sa s 1000.
1000 sa delí na 999 a 998.
Každý to sa rozdelí na dve veci.
>> KEVIN SCHMID: Správne.
>> DIVÁKOV: Celú cestu dole.
>> KEVIN SCHMID: Presne tak.
Takže len opakovať pre kameru, keď som volanie fib na ako 1000 alebo tak niečo
rovnako ako to, že je to samozrejme nie menej ako alebo rovné jednej, takže budem
prejsť na tento prípad iný, a potom idem volanie fib 999 a fib 998.
A potom skoro všetko práce, ktorá fib 999 robí, je
druh na tejto úrovni.
Ak sa vydáte dole, je to ešte redundantné ako to, ale ak ste práve
myslíte, že výpočtovej fib 998 dostane nám celkom blízko fib 999.
Takže by sme mali byť naozaj trochu viac chytrý o tom, ako sme trochu znova
ty, ale my nie sme znovupoužitie tieto veci vôbec.
Takže si viete predstaviť to obrovské, obrovský strom, ktorý je jednoducho hrozné.
>> Ale tak ako tak, v poriadku.
Tak to bola lož.
Je to len chvíľu trvá, než spustiť.
Jo?
>> DIVÁKOV: [nepočuteľné].
>> KEVIN SCHMID: Oh, mohol by si zopakovať otázku?
>> DIVÁKOV: [nepočuteľné].
>> KEVIN SCHMID: Aha, takže to je len kód že to bude trochu na
na strane servera.
Takže to nebude nájdená v prehliadači, alebo tak niečo.
Je to v podstate to, čo máme, je, že keď užívateľ tu do značnej miery značky
opäť ich žiadosť, keď sme sa trochu podať žiadosť, budeme nazývať
táto funkcia na strane servera.
A potom dostaneme výsledok späť od volanie tejto funkcie.
A potom sme si len vytlačiť je pre užívateľa.
Takže užívateľ nie je naozaj riešiť Pomocou tejto funkcie príliš.
>> Bola to otázka?
Má to zmysel?
OK.
V pohode.
>> Takže znovu, čo robíme celú tú res.writeHead vec, kde sme vytlačiť
hlavičky.
A potom som sa ukončiť reakciu tým, že robí magické číslo je fib 45.
Takže poďme stačí spustiť tento server.
Takže budem robiť uzla fib.js.
Takže teraz moja fib je spustený server.
>> A potom tu, idem k tomu jeden z nich.
OK?
Tak som len chcel povedať, Curl.
Takže to bude chvíľu trvať, ale dúfajme, že čoskoro skončí a
to bude tlačiť, že 45. Fibonacci číslo.
>> DIVÁKOV: [nepočuteľné].
>> KEVIN SCHMID: Malo by si urobil docela čoskoro.
Tak to by malo trvať päť-šestsekunda.
Ja neviem, to je len V8 je veľmi rýchlo, ale v každom prípade, to je
veľmi krátky príklad a zámerne nevkusný z non-triviálne
výpočet.
Takže po nejakej dobe, to si to.
>> Ale teraz, čo keď to urobím, že rovnaký druh experiment ako predtým, kedy som sa urobiť
dve žiadosti na rovnakú dobu?
Tak tu idem do Curl na že adresa, a idem
urobiť ďalšie Curl.
A pamätajte si, keď sme robili to pre spať servera, keď sme v podstate mali to
po piatich sekundách, sa celkom veľa ako sa vrátil hneď
približne v rovnakom čase.
Takže to nebolo osobitne zviazaný.
>> Ale skúsme to teraz.
OK, takže sme dostali naše dva procesy.
Nezabudnite, tie sú procesné ID.
To bude trochu trápne, keď sa zastaví.
Takže poďme zostať tu a čakať.
>> Takže jeden z nich by mala prísť späť potom, čo ako -
OK, tak jeden sa vrátil.
Ale prečo nie druhý jeden sa vrátil ešte nie?
Jo?
>> Divákov: Server nemôže nič robiť zatiaľ čo to je výpočtovej že veľký počet.
>> KEVIN SCHMID: Správne.
Takže odpoveď bola len, že server naozaj nemôže nič robiť, zatiaľ čo
je to výpočtovej toto číslo Fibonacci.
Takže teraz som zrovna moje dve veci späť.
Ale myslím, že len premýšľať o kódexe trochu, ako to funguje
a všetko.
>> Takže táto funkcia tu je kód, ktorý Povedal som tento server spustiť, keď to
prijíma nové prichádzajúce požiadavku.
Takže to len tak prejsť tento Celý kód, a potom to pôjde
späť do slučky udalostí a potom pokračovať kontrola novej udalosti.
Takže v podstate to, čo sme sa deje je server
počúvanie nových vecí.
Prvá osoba žiada o to, čo 45.
Prevádzkujeme tento kód do jeho výpočtu.
Tento kód má zhruba päť šesť sekúnd bežať.
Potom sme sa vrátiť do slučky udalostí a skontrolujte, či nové požiadavky.
>> Tak to je príklad toho, ako, ak sú veci, ktoré sú tak-zvané výpočtovej
viazaná, alebo použiť veľa výpočtových, nie je moc, ale ako sú
výpočtovo náročné -
Myslím, že jedna vec je povedať, o tom je , Že táto funkcia robí úplne,
z väčšej časti, pekný užitočnej práce v poriadku.
Po celú dobu, že spätné volanie funkcie bežal, to bolo celkom
veľa trávia väčšinu svojho času len výpočtovej číslo, ktoré nth Fibonacci.
>> Ale my sme mali len jedno vlákno riešiť.
V modeli Apache, keď sa dvaja ľudia podal žiadosť, aby si fib 45, sa
by mal dve rôzne závity.
A potom úlohou operačného systému by bolo, alebo užívateľskej úrovni
Kód, ktorý spravuje vlákna, by si bolo plátok, ktorý sa na
CPU, alebo dokonca, ak ste mali viac procesorov, distribuovať rovnomerne na CPU
tak, aby boli oba úprava zhruba v rovnakom čase.
>> Takže len preto, aby vám ukázať, ako môžeme triediť z - a to nie je celkom ideálne
riešenie, ale trochu o tom, ako môžeme aby sa sem vrátiť a robiť
trochu lepšie.
Takže to, čo som tu, je program s názvom Fib C. A to v podstate používa
ďalší z modulov uzla s názvom Dieťa proces modul.
Tak som súčasťou, že v pravom hornom druhu ze ako by som to libru patrí
dieťa process.h alebo tak niečo.
Teraz mám prístup k tejto CP premennej ktorý má všetky svoje funkcie.
>> Takže teraz, čo robím v tejto odpovedi Psovod je Bežím tento program
bodka lomítko fib 45.
Takže to, čo som urobil - a ja som jednoducho ísť vystúpiť z tohto programu pre
trochu -
Je Napísal som program C, ktorý v podstate počíta
nth Fibonacci číslo.
Tak tu je to len program, čo som napísal v C, ktorý počíta to.
Môžem skompilovať, a môžem bežať že na príkazovom riadku.
A to bude pre výpočet Číslo 45. Fibonacci.
>> Takže všimnúť, to jednoducho trvá skoro tak dlho.
Asi som mohol použiť pomlčku 03 k optimalizovať, alebo niečo také,
ale ja to urobil ako pravidelný Nastavenie kompilátora.
A vytlačí ju.
>> Ale teraz, čo mám trochu robiť?
Oh sorry, zlý súbor.
Tak som sa robiť rovnaké veci s záhlavie ako predtým.
Potom som to urobiť cp.exec.
Tak čo to bude robiť, je to chystá spustiť tento program.
Ale spôsob, akým to funguje tak, že že to nebude čakať na
tento program až do konca.
Je to v podstate len hovorí, spustiť tento program.
Takže v podstate napíšte to do príkazového riadku druh.
>> A potom, keď budete hotoví s to, spustite túto funkciu.
Takže teraz sme trochu si to Celá obnovená vec
ako by sme to čakali.
Znamená to, že trochu zmysel?
Jo?
>> DIVÁKOV: [nepočuteľné]?
>> KEVIN SCHMID: Tak to bude skutočne otvoriť nový proces, ako to urobiť.
Takže je to vlastne v niektorých ohľadoch, zlo, nie veľmi zlé, ale je to
dôležité povedať, že je to druh návrat do, na jednej strane, Apache
model, kedy budeme robiť závity a procesy Pre každú žiadosť alebo
procesy pre každú požiadavku.
Tak to je celkom podobný s tým, čo robí Apache.
V niektorých prípadoch, bude to stačí použiť nový závit, ktorý je trochu viac svetla
hmotnosť ako proces, ale Apache mohol skončiť vetvenia nový proces
ktorý je tak trochu o tom, čo robíme tu implicitne tým, že robí bodka lomítko fib 45.
>> A potom v tom prípade, sme trochu vzniknú rovnaké náklady procesov.
Tak to je len jedna vec, ktorú môžete urobiť.
Ale len preto, aby ukážte tento druh prevádzky.
A táto diskusia je naozaj len zameraná na prezentovať tieto druhy programov
spôsob, ako ukázať rôzne pohľady na ako navrhnúť servery, ako je to.
Tak to beží, a potom teraz, keď to to znovu, mám dve ID procesov.
>> Poďme si o tom pohovoriť veci, poukázať.
Tak zistíte, že sú postupne.
To je v pohode.
Vzhľadom k tomu, že sa pred 27122.
Ale Oznámenia teraz sa vrátili zhruba v rovnakom čase.
>> A teraz, dobrá otázka sa opýtať prečo bolo to, že prípad je, ktorého úlohou
to bolo teraz nejako, aby sa tieto veci druh hrať fér medzi sebou
iné, tieto dva prípady bodka lomítko fib 45, že som bežal
alebo že RAN uzol?
Kto trochu je to fér, že obaja sa druh dané behu času?
>> DIVÁKOV: [nepočuteľné].
>> KEVIN SCHMID: Jo.
Takže v podstate, keď som si dot lomítko lož 45, alebo niečo také, teraz je to
druh do operačného systému zvládnuť runtime týchto programov.
A teraz sa im môže naplánovať na rôznych CPU, alebo to
je možné naplánovať.
Je možné krájať až čas, ktorú človek CPU dostane to, alebo že sa
bežať na jednom procesore.
Tak to je myšlienka, že.
Znamená to, že zmysel pre každého?
Takže teraz Uzol nie je naozaj hrať časť v rozdeľovaní týchto úloh.
OK.
>> Tak to je skoro to na príkladoch.
Len som chcel ukázať ešte jednu vec pretože veľa z toho bola doteraz
nie je úplne Super praktické v niektorých prípadoch.
Viem si predstaviť, sa vracia domov po tom, čo táto hovoriť a niečo a hovoriť ako,
tak nejako som sa dostal z tej reči, že Môžem urobiť Fibonacciho server
môj konečný projekt.
Tak tu je to len trochu jeden príklad že snáď bude -
Možno nie, ale možno - trochu viac druh relevantné záverečných prác a
myslieť dopredu na také veci.
>> Tak toto je chat.js.
Takže je to niečo ako nejaký vzorka Server side kód, ktorý môžete použiť na
nastaviť malú chatu servera, ako je ste mohli vidieť na
Facebook Chat alebo čokoľvek iného.
Takže ja nehovorím, že je to ako Facebook Chat, ale je to druh
ako dobrý - možno nie je dobré, ale možno dobrý - východiskový bod pre chat
server pre vaše webové stránky pre finálny projekt.
Tak sa poďme pozrieť na to, čo to robí.
>> Takže sa dostávame túto špeciálnu vec v hornej časti, to var SIO
rovná vyžadujú Socket.IO.
Takže to je ďalšia vec, že ​​to nie je vlastne prísť zviazaný s
Uzol, ale môžete ho nainštalovať.
Je to modul Node.
Takže je to len ako nejaký rozšírenie uzla.
>> SocketIO je v skutočnosti naozaj celkom fajn.
Je to abstrakcia, ktorá v podstate to, čo to znamená je, že vám umožní
mať tento prúd komunikácie medzi web
prehliadač a webový server.
Takže z veľkej časti doteraz sme mali Tieto veľmi rýchle sekundu alebo dve
druhá komunikácia medzi web prehliadač a webový server.
Takže je to v podstate ísť na google.com, get veci, zašlite ho späť, a potom
sme hotoví.
My nikdy hovoriť, kým užívateľ zadá v niečom inom.
>> Ale čo Socket.IO a podobné druhy veci - a SocketIO je vlastne jedným
z vecí, ktorá je postavená na ako WebSocket, ktorý je akýmsi k dispozícii
ako súčasť HTML5 -
ktoré vám umožní mať tento pokračujúci dialóg.
A to je veľmi užitočné v chate servera také veci, pretože to je
niečo ako pokračujúceho dialógu niektoré spôsoby, pretože ak ste chatovanie
s niekým, môžete teraz stačí poslať Správa sa potrubie, a potom
server môže poslať správu dole potrubia na inú osobu, ktorú ste
chatovanie s
A potom môžete mať tento vymieňať takto.
>> Tak to je niečo, čo SocketIO je dobré pre.
Dôvod, že SocketIO používa WebSockets pretože jedna vec je, že v
Okrem jednoducho staré WebSockets, to tiež robí nejaké triky v podstate
aby bolo kompatibilné so všetkými prehliadačmi.
Takže prehliadače ako Internet Explorer bohužiaľ nepodporujú WebSockets
hneď po vybalení z krabice.
Tak to používa nejaký iný druh chladenie čistý veci s Adobe Flash, ktoré umožnia
budete mať prierez podporu prehliadača.
Tak to je naozaj užitočné.
>> A vlastne, viem, že som trochu beh na čas tu, ale CS50
Diskutujte, už ste niekedy videli niečo ako, ja neviem, prázdne, a tak je
odpovede na tento príspevok, alebo tak niečo ako to, že funkcia?
To je SocketIO.
Takže keď niekto začne písať v roku diskutovať pole, aby odpoveď alebo
niečo, váš prehliadač nepodporuje to, čo je zavolal SocketIO vyžaruje určitý druh
udalosť, ktorá hovorí, že niekto je odpovede na tento príspevok.
>> Potom servera hovorí, OK, čo mám robiť?
Tak teraz musím povedať, tie ostatné chlapcov ktorí sú na CS50 Diskutujte hľadáte
u tohto príspevku, že niekto odpovedal.
Tak to je niečo, čo SocketIO je dobrý, tento pokračujúci druhu
prúd dialógu.
OK.
>> Takže to, čo som tu - a my sme len bude ignorovať pole pripojenie
pre trochu -
čo mám robiť, je mi to vypočuť znova.
Tak to je len spôsob, ako v Socket.IO sa hovorí poďme počúvať na tomto porte.
A potom som si to na pripojenie.
Tak to je v podstate len Socket IO je spôsob, ako povedať, keď sme dostali
pripojenie, chcem ťa Na spustenie tohto kódu.
>> A všimnite si, že namiesto toho, aby rec a res prešiel tam mám Socket.
A to Socket myšlienka je v podstate to vec, ktorú môžete písať a čítať
z toho má užívateľa Správy možná.
A správy, ktoré by ste poslať môže prejsť týmto Socket.
Má to zmysel?
Takže to je to pokračujúci vec.
>> Takže to, čo robím, je hovorím Socket.emit.
A vydávať sa celkom veľa dva argumenty.
Prvý argument je reťazec len predstavuje typ
čo ste emisiami.
Takže v tomto prípade, som použitie Tento reťazec nová správa.
A to je len v podstate hovorí, že typ tejto veci, čo som
odoslanie, je nová správa.
Takže si môžete vypočuť na konkrétne typy Zánovné správy alebo čokoľvek
pomocou bodku.
>> Takže spojenie a užívateľ tam poslal, ak sa pozriete na to, kde hovoríme bodka na,
to sú ďalšie reťazce, ktoré predstavujú typy užívateľských správ.
Takže je to v podstate môžete mať tento emitovať jeden z týchto typov správ, a
potom niečo v reakcii na jeden z týchto typov správ
>> Takže som vyžarujúce túto novú správu.
Budeme ignorovať connections.push za sekundu.
Ale potom som si povedal, Socket.on používateľ odoslal.
Takže teraz je to trochu, ako keď užívateľ mi pošle správu, chcem
spustiť tento kód.
A všimnite si, že anonymné funkcie berie v tejto premennej
tzv dáta, ktorá je v podstate deje mať správy užívateľa.
>> Takže teraz poďme trochu hovoriť o pole pripojenia.
Tak toto je určený pre chat klienta kde v podstate každý je trochu v
rovnakej miestnosti.
Takže v podstate to, čo budeme potrebovať, aby asi je nejaká pole, ktoré v podstate
zastupuje všetkých občanov chatovanie v niektoré spôsoby, pokiaľ to dáva zmysel.
Je to tak?
Vzhľadom k tomu, že potrebujeme vedieť, kto tých chlapcov tak sme im môžu posielať správy
že ostatní ľudia posielajú k nám.
>> Takže to, čo tento kód robí, keď je užívateľ pošle správu - to je typ
udalosť -
budeme spustením tohto kódu.
A to, čo robíme, je, že sme prejsť tento pole, ktoré sme nazvali pripojenia.
A skoro pre každé pripojenie okrem toho, že je naša, to je
čo tento kód hovorí, zašleme nový Správa s touto správou pripojenou
informácie.
>> Takže ak si všimnete tu, čo som urobil, keď užívateľ skutočne je nový
Pripojenie je, že som pridal s Spôsob JavaScript.push, to je
v podstate len hovorím, ako pridať že Socket ako hodnota do
naše pripojenie poľa.
Takže teraz, keď tento kód spustí, bude to Poslať veci tým, najmä
pripojenie.
Takže to môže byť dobrým východiskovým bodom pre výrobu chatu servera
alebo niečo podobné.
>> A celkom fajn vec je, že kód, ktorý vidíte tu, ako na a
vysielať a tak podobne, že je rovnaký druh kódu JavaScript, ktorý by
písať v prehliadači komunikovať so serverom.
Takže to je dôvod, prečo SocketIO je druh elegantný a užitočné týmto spôsobom.
>> Jo a ešte jedna vec, ktorú naozaj rýchlo.
Tam bol konečný projekt CS50 v minulom roku že v podstate zavedený chat
server Node.js.
Myslím, že je to Harvardchats.org ale ja nie som -
OK.
Nie som si istý, čo URL je, ale Môžem poslať, že sa neskôr.
Ale je to trochu vychladnúť, čo môžete robiť s Node.js.
>> Takže dúfam, že všeobecne, vy chlapci majú dobrý pocit z toho, čo Node.js je užitočný
a ako by ste mohli možno platiť do konečného projektu.
Budem rozosielať viac zdroje spolu s tým.
A ďakujem, že ste prišli.
Ďakujem.
>> [APPLAUSE]