KEVIN SCHMID: Ahoj všichni. Vítejte na CS50 seminář na Node.js. Jmenuji se Kevin. Jsem CS50 TF. A já jsem něco jako opravdu nadšená o tomto semináři. Myslím, že Node.js je velmi cool. Doufám, že tento seminář je možné použít jako dobrý, myslím, odrazový můstek pro některé z vašich závěrečných projektů, pokud máte zájem o využití něco jako Node.js. Budeme nějak začít seminář off jenom o trochu druh pozadí škálovatelnost Perspektivy Node.js, a pak budeme pohybovat na některé příklady kódu. A já budu mít kód na webových stránkách, a můžete se podívat na kód. A po semináři, budu třídit mluvit o tom, jak si můžete nastavit Node.js na vašem počítači. OK. Tak pojďme začít. Takže myslím, že jsem chtěl mluvit o webové servery, opravdu, jako první. A začít tuto diskusi, jsem v podstatě mají diagram, který je od učebnice používá pro CS61, které v podstatě ukazuje interakce mezi procesu klienta, jako je váš web prohlížeče nebo jako váš cíl klienta nebo něco takového, a webový server. Takže tento druh vypadá podobně jako obrázek, který jste viděli v přednášce na Středa, kde v podstatě máme nějaké Proces klienta jako je Google Chrome. A pak první krok je klient odešle požadavek. Takže to může být něco jako dobře pojďme návštěvu, nevím, CS50.net. Tak jsme se vydat tento požadavek. A nemá někdo vzpomenout na jméno protokol, který specifikuje, jak to Žádost by měla být strukturována? Jo. DIVÁKŮ: [neslyšitelné]. KEVIN SCHMID: Přesně tak. Takže je to jako HTTP, ne? Takže v podstatě, jak specifikace že žádost by měla ve skutečnosti být stanovena ven, protože na konci dne, že žádost je opravdu jen rád Řetězec, který v podstatě říká, že to chci. A specifikace pro které je HTTP. Takže to je jako protokol. Takže server obdrží že žádost. Takže vy máte nainstalován webový server v CS50 spotřebiče. Je to Apache. A tento týden, když budete pracovat na problému nastavit sedm, budete skutečně pracovat s tímto webovým serverem. Takže server obdrží tuto žádost, a pak se musí trochu poškrábat jeho hlavu a říci, jak dobře to, co mám dělat s tím? Takže na základě toho, co se rozhodne udělat, pak to může mít kontaktovat nějakou ze zdroje. A že zdroj by mohl být mnoho různých věcí. Pro jednoho, by to mohlo být jen jako statické HTML souboru. Takže to může být jen jako nějaký HTML, která je stejně jako u vaše osobní webové stránky. Mohlo by to být statický obrázek jako obrázek nebo jako film, který máte. Mohlo by to mít i mluvit do nějaké databáze jako databázi MySQL. Takže to nemusí vždy komunikovat se zdrojem, ale v V některých případech by to mohlo. Tak co to bude dělat poté, co to je, že to bude poslat zpět odpověď. A odpověď je to, rovněž určuje HTTP. Takže pak může klient obdržet. To může roztrhat na kusy a zpracovat ji. A pak dostanete webovou stránku jako je Google nebo CS50.net nebo co šel. OK? Tak to je základní interakce, které budeme se zabývají. A my jsme docela hodně bude zaměřené na této části interakce, server. OK. V pohodě. Má někdo nějaké dotazy tak daleko? OK. Tak, jak jsme si řekli, webový server obdrží tento požadavek HTTP a poté vydá toto Odpověď HTTP. A jak jsme o tom mluvili dříve, CS50 spotřebiče webový server Apache. Takže když kluci pracovat na P set sedm, budete pracovat s Webový server Apache. Už nikdy nebudete muset skutečně pracovat Apache přímo příliš mnoho. Můžete nějak konfigurovat Apache trochu když zadáte na virtuální hostitele nebo Klínové hostitelé, a dostaneme se, že v trochu. Ale v podstatě, web server Apache nastavit pro práci s PHP druhu ze po vybalení z krabice. Takže to, co se skutečně děje je, když jdete do jedné ze svých webových stránek, jako je, řekněme, místního hostitele lomítko index.php, nebo tak něco, je váš prohlížeč odešle že žádost, a pak Apache sedí tam a vyřeší s tím dělat. A akce je provést že kód v index.php a pak jej odeslat zpět. Takže tam je to. Tak jsme trochu mluvili o tom. Takže by to mohlo sloužit pouze statický soubor nebo spustit nějaký PHP kód a pak problém odpověď. Tak častá otázka, která může přijít up je dobře, jak to opravdu řešit s tím více uživatelů ve stejnou dobu? Takže si představte, že jste psali web serveru, pokud jste měl webový server, který jste se snažili napsat něco jako je C nebo něco takového, v podstatě můžete přemýšlet o tom, jak se tam by mohl být nějaký druh kódu, který obdrží žádost, ale pak to má dělat všechnu tuto práci na něm. To může mít, například, kontaktujte databáze nebo něco takového. Je to tak? A pak, že by to ten druh zpracování a pak vráceno zpět do reakce. Takže to je jako vysoce Přehled úrovni. Ale to není na první pohled zřejmé, jak se Můžete to udělat tak, že dva lidé, nebo dokonce 1000 lidí by mohlo fungovat s vaším webový server, ve stejnou dobu. Takže řešení, které využívá Apache se nazývá vlákna nebo procesy. Tak jste možná slyšeli o tyto pojmy před. To je v pořádku, pokud nemáte, ale jen, že o závitu nebo procesů jako způsoby operační systém nebo uživatelský program nebo něco takového, nebo webový server na druh provádět více věci najednou. Tak jste možná slyšeli termín jako závity provedení. Takže je to něco jako, že jsi druh multitasking. A pokud jste viděli na krabici vašeho notebook, nebo něco takového, multicore, co můžete udělat, je můžete spustit dva různé závity na různé části procesoru tak, aby mohly ve skutečnosti se stalo ve stejnou dobu. Tak tohle je opravdu silný. A to je druh Apache řešení tohoto problému. Takže je tam něco jako případné problémy s tímto přístupem by? Takže myslím, že jsem trochu psal je tam. Ale oba tak nějak používají velké množství paměti. Je to velmi drahé, na vytvoření vlákno nebo proces. A část odůvodnění je, že právě jako když jste spuštění programu C jako vaše hlavní a pak, že hovory další funkce, které má nějaký zásobníku. Takže vlákna také vyžadují zcela samostatný zásobník, který mohou být poměrně velké. A pokud si můžete představit, že spoustu uživatelů na vaše webové stránky, měli byste mít mnoho různých vláken. To je hodně stohů spravovat a udržovat. Tak to je velká spotřeba paměti. A pak, i, řekněme, že máte jen jeden CPU, nebo řekněme, že máte více závitů, než máte ty multicores. Je to tak? Takže řekněme, že jste měl 10 vláken a před sebou měli jen pět procesorů. Tak nějak udělat tuto věc, kde můžete přepínat mezi proudem ten, který je spuštěn, protože jste nelze spustit všechny 10 najednou. A to se říká přepnutí kontextu. A že pojem má ve skutečnosti několik různé kontexty, ale řekněme, myslet na to jako spínací mezi dvěma závity. To může být velmi nákladné, protože v podstatě to, co musíte udělat, je si muset zastavit to, co děláte, uložit stav tohoto spuštěný podproces, a pak přejít někam jinam. Takže se všichni trochu vidět motivace, proč závity a procesy by mohly být trochu objemný? A už máte nějakou otázku? OK. V pohodě. Má někdo nějaké otázky? OK. Takže když jsme se o krok zpět za sekundu, tam je něco jako Zjištění, že bychom mohli o Mnoho webových aplikací. A to je fakt, že mnoho z nich ve skutečnosti nedělají to hodně užitečné pracovat uvnitř závitu. Takže se někdo začal na P set sedm vůbec? Takže chceš snad popsat některé části? Pracoval jste na přihlášení nebo něco takového? Diváků: Ne KEVIN SCHMID: OK. To nic. Promiňte. Ale v podstatě, v sadě P, jste bude dělat spoustu druhu dotazy na databázi, jak získat některé Informace z této databáze. A co váš kód se bude dělat, co tento proces Apache nebo že Apache vlákno se bude dělat zatímco to má kontaktovat Databáze je to trochu bude tam sedí, a to bude čekání na databáze odpovědět. Teď, když nemusí znít jako tak velký zabývat, protože databáze je na vaší CS50 zařízení, ne? Ale tam je nějaký druh sítě Latence tam, protože teď webu server má vydat svou vlastní žádost databáze pro komunikaci s databáze a pak se, že informace zpět. Takže teď je to jako dobře čekat na mě, já jsem jít dostat něco z databáze a pak je tu Mnoho čekání děje. Má to smysl? A některé věci, že to není tak špatné. Je-li to jen má, například, přístup k paměti, že to není jako hrozný I / O latence. A když říkám, I / O latence, co jsem odkazuje na je jako jakékoliv podobné vstup a výstup. Ale přístup k souboru na disku, jako je kdybych chtěl sloužit statické HTML soubor, který byl na mé webové stránce, nebo něco jako, že jsem tak trochu musel zastavit na chvíli, přečtěte si tento soubor od disku, a pak že proces čekám. Nebudu dělat užitečnou práci. To není pravda všechno, ale je to je běžné u aplikací, jako je P sady sedm a mnoho aplikací že nejste vlastně dělá hodně přemýšlet. A když říkám myšlení, mám na mysli jako výpočetní práci. Takže výpočetní práce by mohlo být něco, jako, řekněme, co jste chtěli napsat webový server, který právě vypočítanou nth Fibonacci číslo. To nezní jako zvláště zábava webový server. Jako bych nečekal, že místo, aby se další Facebook, ale to je nějaký druh výpočetní práce. A můžete si představit, že s výměnou nějaký jiný druh zajímavý výpočetní práce. Řekněme, že jste psali něco který počítal stupňů separace mezi dvěma lidmi nebo něco takového. Takže to dělá zahrnovat nějaký druh výpočtu, ne? A i pak, k tomu, že stále máte udělat hodně čekání na možná Máte dotaz na databázi se podívat up, který je přítelem, který nebo něco takového. Takže tam je to trochu pojmu z výpočetní práce. Má to smysl? Má někdo nějaké otázky? Jo a myslím, že jsem dal chatovací servery zde protože chatovací servery jsou druh Dalším dobrým příkladem. Chatu server nemá dělat hodně přemýšlet. To prostě musí čekat na lidi, aby posílání zpráv a pak, když oni, pošlete je. OK? Takže jen proto, aby znovu rekapitulovat, Apache a podobné webové servery, jako že vidlice Mnoho procesů a podprocesů, které může být trochu marnotratné. Takže myslím, že na otázku, která může přijít ze které je potřebujeme mít více podprocesů a procesů? Co kdybychom měli jedno? Takže pojďme se trochu namalovat obrázek o tom, co by to vypadat. Takže pojďme použít pouze jeden závit. OK? Tak jen si to s jedním závitem. Předpokládejme, že jsme opravdu dělá že hodně užitečné - a když říkám užitečné, myslím výpočetní práce - v těch několika vláken předtím. Takže pojďme trochu konsolidovat vše v jednom vlákně. Tak co kdybychom měli jedno vlákno tohoto druhu ze jen jde kolem smyčky a neustále kontroluje udělal něco nový stát. Tak například, něco nového se stalo mohl říct, že jsem něco zpět od databáze, nebo někdo poslal mi nový požadavek HTTP. Takže to jsou druhy akcí aby se to stalo, ne? A pak, co mohu dělat, když ty nové věci se dějí v tomto stejném podprocesu realizace, tento jediný závit provedení, můžu zavolat nějaký kód, který by zvládnout tuto konkrétní věc. Tak například, když jsem něco zpět z databáze, mohl jsem běžet můj malá výpočetní část, která vlastně jen připravuje na věc zaslat zpět uživateli. Tak to dělá trochu smysl? Ale co je opravdu důsledky to? Je to tak? Vzhledem k tomu, že jsme napsal spousta kódu, který - a já jen tak na skok dopředu na diapozitivy, jestli je to v pořádku. Takže pokud vám to nevadí, já jsem jen chystá udělat krok zpět. Takže tento druh věcí je tzv. smyčky událostí. OK? A to je docela základní Myšlenka Node.js. Takže to, co Node.js je opravdu dělá jako web Server je tam jeden závit , který je v podstatě děje kolem ve smyčce jako, zatímco jedna druhů nedostatečně kapuce v Node.js to neustále kontroly, jsme přijímat nové věci? A pak to bude fungovat manipulátory které jste nastavili. Ale dobrý na něco zeptat, je, jak můžeme udělat to stalo s existujícími věcmi? Tak jsem dal řádek kódu C zde, že v podstatě vypadá to, že otevření soubor, ne? I ona právě vyšel s albem. Tak jsem ji musel otevřít nový soubor. Takže jak naše C kód pro provoz - a myslím, že důvod, proč jsem si vybral souborů byl protože to je druh rozsahu o I / O práci, kterou jsme udělali v C pocit, že tam je vstup a výstup. Tak nazýváme tento kód, který dělá to f otevřený. A pak na další řádek našich Program, nyní můžeme pracovat s f.. Takže by to být příkladem něčeho to je jako synchronní nebo blokování, protože na tomto prvním řádku tam čekáme, dokud se získat soubor otevřen. Takže na druhém řádku, víme, že může pracovat s f, ale to znamená, že že druhý řádek nemůžu spustit do první řádek je hotovo. Má to smysl? Tak to by bylo špatné, aby v obslužné rutině události. A důvodem je, že tento druh čeká, že jo? Tak to by nás vrátit zpět na stejnou věc. A teď bychom ani přínosem více vláken nebo procesy, protože jsme dostali jeden závit Node.js. Znamená to, že smysl pro každého? DIVÁKŮ: Počkejte. Takže to, co je výměna? KEVIN SCHMID: Oh, tak ano. Takže budu se dostat do náhradní. OK. Tak co kdybychom měli něco který vypadal takhle? Takže co když teď jsem upravil f otevřít trochu? Takže jsem kolem ve stejné dva argumenty jako předtím. Pořád tě miluju novou píseň která vyšla s. Ale já jsem kolem třetí věc, která je tato proměnná nazývá kód. Ale co je vlastně kód v této souvislosti? Je to jako běžné proměnné C? Je to funkce, ne? A to může být proto, že trochu divný Jsem vlastně jako teď kolem funkce do jiné funkce. Takže pár postřehů o tom. Za prvé, já nejsem ve skutečnosti volání kód funkce. Takže nevidíte kód vlevo závorka, pravá závorka. Jen jsem kolem v kódu. A v C, co by to vlastně dělat je mi dát ukazatel, že skutečná kód, a pak by to mohlo spustit. Ale jen přemýšlet o tom, jak jste absolvování spuštění kódu, pokud že soubor je otevřen. Ale co to znamená, že nyní Zbytek mého programu, který by mohl dělat další věci, mohou pokračovat v tom jiný věci, zatímco my, opravdu ne čekat, ale jen v zadní části našich hlavách, že při otevření, běh tohoto souboru je, že Kód na vrcholu. Má to smysl? A teď myšlenkou Node.js je, že kód ve dělat věci s f část by měla být dost krátké a jednoduché a jednoduché a není opravdu být velmi výpočetně náročné. To může otevřít jiný soubor, ale které by měly být také docela rychle protože to by prostě říct, udělat další f otevřít a pak volat toto další kód. Takže jen zcela jasné, f otevření, které přináší nová Katy Perry píseň done mp3, že to bude dost moc se okamžitě vrátí. A pak se můžeme jen pokračovat v tom, další věci, protože vše, co nyní f Otevřená výzva se je říci v podstatě Základním f otevřený kód otevřít tento soubor a když jste hotovi otevření této souboru, nebo když si to zpátky, spusťte tento kód. Ale to není ve skutečnosti spuštěn tento kód. A vy jste měl otázku? DIVÁKŮ: Zdálo se mi naznačit, pár časy, že přidání výpočetně intenzivní kód nějak rozbít [Neslyšitelný] řízený systém. [Neslyšitelný]? KEVIN SCHMID: To je velká otázka. Takže jsem vlastně máme příklad toho, jak můžete integrovat výpočetně intenzivní kód v trochu. Takže, když se dostaneme do příkladech kódu, Budu určitě vytáhnout, že jeden. Je to v pořádku? Děkuju. Jaké bylo vaše jméno? DIVÁKŮ: Aaron. KEVIN SCHMID: Aaron přináší až velmi dobrý bod, což je to, že když jsem měl některé výpočetně náročné kód dělat věci s f část, zbytek můj program nelze spustit a nemůže poslouchat pro nové žádosti, nebo nic, dokud všichni že věc je dokončena. Takže když píšu kód uzlu obecně pokud uděláme něco jako já jdu navrhnout později, když se podíváme na příklady kódu, musím si být jisti, že můj kód není přivázat tato smyčka událost. Má to smysl? OK. V pohodě. Takže Node.js nabízí tento rámec, který můžete vytvořit tyto události řízený Servery se. Tak to má tento druh asynchronní neblokující I / O knihovny, vzhledem k tomu, standardní knihovny C, které jsme byli práci s, jako když jste právě používat stejným způsobem, že jsme Používám je s f otevře a věci, které jsou blokování, protože jste skutečně muset počkat tento soubor otevřít. Ale Node.js vám to dává, a to v podstatě navazuje na Google V8 JavaScript engine, který je důvod, že Chrome je ve zpracování tak rychle, JavaScript, protože má tento motor V8. Takže vím, že to zní jako jeden z těch, WWDC vývojářské konference věc kde se jen hodit spoustu číslo písmeno věci pro procesory a říkají, že je to v pohodě. Ale to je v pohodě, že to udělali to proto, že JavaScript - nebo možná, pokud nejste obeznámeni s JavaScript přesto, protože jsme neměli přednášky na něm - ale JavaScript je interpretovaný jazyk. A to je důležité také. Takže je to důležité pro náš web Servery být rychlý, že jo? A když jsme byli jen běh kódu JavaScript kód, který byl vyložen jen s nějaký starý interpret by to mohlo být pomalé. Takže uzlu těží z nutnosti tento super rychlý V8 tlumočníka. A já nevím, jestli se jmenoval jej protože V8 facka do čela věc, ale OK. Tak jsem si připravil několik příkladů na této adrese URL. Po semináři, jsem nějak bude mluvit o tom, jak můžete získat sadu uzlu , ale teď, jsem jen trochu chtít projít několik příkladů kódu. Takže pokud chcete sledovat spolu, všechny Zdrojový kód je k dispozici zde. OK? Tak jsem si nechat tuto adresu URL pro málo. A pak jsem jen tak přepnutí do terminálu. Jsou všichni dobře s tímto URL? Takže budu přepínat k mému terminálu zde. Tak tady je kód, který Mám na dnešek. Proč ne začneme s simpler.js soubor? Druhá věc je, že to všechno kód se bude napsán v JavaScript které mohou nebo nemusí být znát. Myslím, že pár věcí je to, že mnoho kódu JavaScript je druh syntaxe a struktura je velmi podobná C, takže můžete trochu zvednout jako jdete spolu. Snažil jsem se napsat mnoho výchozí kód pro tento takovým způsobem, který je podobně jako C, tak, že je trochu čitelnější. Ale jak postupovat, budu demonstrovat některé dodatečné funkce JavaScript, které jsou docela v pohodě. Ale pojďme se podívat na tento ukázkový program. Myslím, že všechno, co je odříznout tam. Já jsem prostě jít opravit, že skutečná rychle, pokud je to v pořádku, nebo ne. Já nevím, co to bude dělat. Je to trochu lepší? Vidíte var a tak? OK. Takže první řádek je jako JavaScript version proměnné prohlášení. Takže jen upozornit na to, co to by vypadat jako v C. Takže je to jen jako mi říká, index se rovná tři nebo něco takového. Tak jsem neuvedl typ. JavaScript má mít typ, ale je to velmi dynamicky napsaný v přírodě, tak neposkytla žádný druh druhu na něj. Tak to prostě je var. To je jako proměnné. OK? A já volám tuto proměnnou HTTP. A na mé pravé straně, mám Výraz, který chci dát do HTTP. A to říká vyžaduje HTTP. Tak to je docela podobný obsahovat. Je to trochu jako silnější než jsou v tom smyslu, že zahrnují by jen zkopírovat a vložit záhlaví soubor pro funkční prototypy nebo co s definicemi typu. Ale třeba se ve skutečnosti děje k nám dostanete kód. Takže si můžete myslet na to, jak import nějaký kód. Takže někde v modulu Node.js systém nebo co, že mají vše Kód HTTP server, takže jsem jen načítání je pro mé vlastní osobní využití tohoto programu. OK? Tak jsem si tuto funkci které jsem napsal. A Všiml jsem si nemusel specifikovat návratový typ nebo typ argumenty znovu. Tak trochu volné zadali tento druh smyslu. Dva argumenty, že se bere v, požadavek a odpověď. Tak to je koncepčně něco jako známé z obrázku, že jsme měli Na obrazovce se dříve, protože dostaneme tento požadavek, že mají od uživatele. A pak máme odpověď, která můžeme psát věci. Takže první řádek to dělá res.writeHead 200 a pak to Typ obsahu textu jasné. Takže pojďme se tento kousek od sebe trochu. Takže pojďme se soustředit jen na res.write pro málo. Takže zápis je v podstatě, a zapisovací hlavy, jsou jen způsoby, jak se trochu vypsat věci na odpověď. OK? Takže psát hlavu, jestli někdo pamatuje z přednášky HTTP, si kluci pamatovat záhlaví na Horní věci HTTP? Tak proč ne já jen demo záhlaví opravdu rychle. Bylo by to užitečné? Nebo bychom měli jen trochu - OK. Jistě. Takže když váš prohlížeč přejde na google.com nebo něco takového, je to vlastně trochu víc - je to jako tajemství - tam je jako trochu více informací která přichází skrze potrubí, než jen Trochu hledání a všechno. Takže vám to ukázat, jdu použít program s názvem Curl. OK? Tak to je něco, co můžete spustit na váš Mac OSX příkazového řádku nebo v zařízení nebo cokoliv jiného. A tak když jsem se Curl HTTP google.com, Jdu vidět HTML. A to je, ve spravedlnost, jen HTML, který druh vám řekne přesměrování na www, pokud váš prohlížeč nepodporuje automaticky zpracovávat přesměrování. Tak to je jen HTML, ale jdu přidat k Curl tuto pomlčku jsem vlajku. OK? A to bude ukázat mi záhlaví. Takže to je také informace, že je až když jsem si tuto odpověď. OK? Takže nahoře, vidíte to HTTP 301 přesunout natrvalo. A to je docela důležité, protože toto se odkazuje na stavovém kódu. Takže 301 je zde stavový kód, což je v podstatě jen číslo která říká prohlížeči, nebo ten, kdo je čtení tohoto, pokud se předstírat, že jste prohlížeč a vidíte to, v podstatě teď když se podíváte na to a uvidíte 301, víte, mám udělat něco speciálního na základě 301, nebo něco zvláštního se stalo vztaženo na 301. Tak to říká přestěhoval natrvalo. A pak, v podstatě, máme banda klíče a hodnoty. Tak jsme se na místo je www.google.com. A pak se trochu všechno ostatní věci, ale v podstatě to, co místo je rčení je nové umístění je na www.google.com. Takže teď, pokud půjdete do google.com, budete si muset vybrat trochu vidět druh prohlížeče na mrknutí za druhé a pak přesměrovat zpátky na www.google.com. Takže odpovědi mohou obsahovat Tyto hlavičky. A pár věcí, které poukazují. Takže řekněme, že jsme byli opravdu úspěšní při návštěvě webové stránky. Tak nech mě jít do - Co je dobré webové stránky? Jsem špatný myšlení dobré webové stránky na místě. DIVÁKŮ: Wikipedia. KEVIN SCHMID: OK. Pojďme udělat Wikipedii. Tak tady jsem byl dojatý. Ale počkejte. Byla jsem? Ano, byl jsem. OK. Tak jsem se dostal k tomu www. Takže budu dělat www. A jak vidíte, tady je všechno HTML , že prohlížeč zpracuje pro Wikipedii. Ale když jsem se držet rolování tady, co budu vidět nahoře - wow, je tu spousta HTML na Wikipedii - ale to, co vidím na vrcholu je zde Tento 200 stavový kód, jak protichůdný k 301, že jsem viděl dříve. A všimněte si, že to má pěkný přátelský OK vedle ní. Takže je to jako dobrý stavovým kódem. Znamená to, že 200 počet vypadají povědomě? Ano, protože když jsem simpler.js, Jsem napsal 200 tam. Tak to je v podstatě říká, řekněte prohlížeč nebo ten, kdo se snaží dostat do to, že byli úspěšní. Nebo, že druh jako my byly úspěšné příliš. A tam je to trochu zvláštní syntaxe v JavaScriptu pro vyhlášení mapa z těchto tlačítek, jako je typ obsahu a tyto hodnoty jako textové rovině. Takže když se podíváte na odpověď, že jsme se vrátil z Wikipedie dříve, - Budu se snažit posunout se trochu rychleji - máte tyto klávesy jako serveru a tyto hodnoty Apache. Takže máš klíče a hodnoty. A můžete specifikovat v Node, co odeslat zpět. Takže je to vlastně druh, v některých způsoby, a v některých ohledech to není Opravdu, ale to je trochu nižší úroveň než PHP kód, který by mohl být písemně P nastavit sedm, protože PHP a Apache nějak postarat se o některé z těchto věcí pro vás. V PHP můžete přepsat výchozí chování psaní vlastních záhlaví. Ale pro účely tohoto, dostaneme psát naše vlastní hlavičky. Takže to, že linka smysl všichni, zapisovací hlavy linie? OK. Úžasné. Tak co mám dělat pak je, že jsem konec odpověď tím, hello world. OK. Ale to je jen funkce tzv. handler žádost. Takže teď jsem vlastně musel trochu dělat něco, co se této funkce, že jo? Tak tady to, co dělám, je, že je to čára, která dělá serveru rovná var HTTP.create serveru, a pak jsem předat psovoda vyžádání. Takže je to trochu z uzlu způsob, jak vytvořit server. A všimněte si, že jsem kolem v obslužné rutině žádosti. Takže je to říká createServer funkce, které chci, abys mě dělat serveru, a když to server obdrží odpověď, musím si zavolat to požádat o funkci zpracování. OK? Tak, že linka do značné míry končí hned. Takže server linka var se provádí přímo poté, co děláte, že docela hodně. Myslím, že to má nastavit některé vnitřní stát, že budete muset volání této funkce manipulačního žádost, ale že to nebude sedět a dejme tomu má uživatel odeslal mi ještě žádost? Má uživatel mi poslal žádost ještě? Takže to neblokuje. OK? Tak co to bude dělat, je to v podstatě se uloží ukazatel na tento kód, tato funkce zpracování žádosti, a poté poběží tento kód, když někdo vytvoří požadavek. A pak jsme to server.listen. 1337 je dost subjektivní. Neměl jsem žádný zvláštní důvod pro uchopení toto číslo. Bylo to zcela náhodné. Ale to jen určuje port. Takže většina webových serverů, uvidíte, že použít port 80, protože to je něco ze jako konvence. Takže když jsem se jít na něco jako, Nevím, Wikipedia.org, a dal jsem dvojtečku 8 - oh wow, nemůžete vidět, že. Je mi to líto. Ale když to udělám Wikipedii - Napíšu to sem jen proto, aby je jasné, že na fotoaparátu. Ale když jsem si to do prohlížeče se tlustého střeva 80, který stanoví, přejděte na Wikipedia.org na portu 80. Takže je to jako, jak Spojené státy mají více porty, jako je, kde se můžete dopravit věci na druhu. Takže je to jako jít na tento konkrétní místo na tomto serveru. OK. Tak jsem si vybral 1337. K dispozici je celá řada čísel že si můžete vybrat. To nebylo zcela zvláštní. Ale co budu dělat teď se budu běžet uzel. Dovolte mi, abych vlastně zadejte, že pár řádky dolů, takže ji můžete vidět. Chystám se udělat uzel, a já jsem chystá spustit simpler.js. A budeme mluvit o tom, jak se dostat Uzel nastavit v trochu. Ale teď je to jen běh serveru. Takže jedna věc, kterou můžete vyzkoušet, které nemusí se stát, že vzrušující je, že může skutečně pokusu o přístup k jej Curl. Takže můžu dělat Curl, a my Stroj je místní hostitel. Budete také vidět písemné takhle někdy. Místního hostitele a 127.0.0.1 jsou druh ze jako v domácím počítači. Takže je to jako mluvit do vlastní počítač. OK. A pak můžu říct, 1337. Takže když jsem spustit tento řádek kódu, se říká, že hello world. A když jsem chtěl vidět, že věci, které Měl textu typ obsahu hladké nebo co bych mohl ještě dát to sem. A všimněte si, že to říkají v pořádku. A mám textu pláň. A pak je tu trochu všechno ostatní věci, které Uzel se přidá do tam pro mě. To není velmi důležitá. Myslím, že tam jsou nějaké technické aspekty na to jsou druh v pohodě mluvit, ale jen ukázat, vy, mám také moc změnit to kolem. Takže můžu jen přidat spoustu o takové věci. A pak teď, když se podívám na můj výstup, bude se stát, že. Takže tyto hlavičky znamenají určité věci do prohlížeče a podobné věci. A hlavičky lze v zásadě říci prohlížeč jak reagovat na něco. Pokud jste někdy slyšeli cookies dříve, nebo pokud jste někdy byli naštvaný o webové stránce nastavení cookies nebo zapnuté cookies bloku nebo něco takového. Můžete dokonce nastavit soubory cookie v těchto záhlaví. Takže říct prohlížeči, jak chování v některých případech. OK. Tak to byl simpler.js. Má někdo nějaké otázky, Na tomto zdrojový kód souboru? OK. V pohodě. Takže pojďme odstranit r od a podívat se na simple.js. Tak to je docela hodně stejný program. Jen jsem to napsal trochu jinak protože jsem chtěl vyřešit odlesku některé funkce JavaScriptu. Tak zjistíte, že psovod žádost Funkce je úplně zmizel. Ach jo, jsi na něco zeptat? Diváků: Jo, argumenty které jsou předávány, že funkce, k čemu jsou? KEVIN SCHMID: Tak to jsou JavaScript objekty. V dokumentaci Node.js, že v podstatě říká, jaké metody jsou k dispozici na ně. Právě jsme se náhodou mají přístup k tato metoda nazývá zapisovací hlava a konec a tak podobně. Ale je tu celá parta více metod. A například, jako jeden z nich zejména pokud jde o rek, můžete to udělat něco jako rec.method, které bude říci, zda je to HTTP GET nebo HTTP POST požadavku a podobné věci. Takže je tu všechny druhy liší vlastnosti, ale jsou i JavaScript objekty, a oni prostě mají funkce s nimi spojené, které vám Můžete psát věci. OK? Takže všimnout, že obslužná rutina žádosti je zcela pryč. Ale kód, který jsem měl v žádosti Psovod je tam pořád. Stále mám tento res.writeHead a stále mám tuto res.end. A co to je příklad v JavaScript je tato myšlenka anonymní funkce. a anonymní je jako název armatury , z důvodu, že doslova není mají jméno. Neexistuje žádný požadavek funkce Psovod tam. Nemá jméno, ale je to stále je při argument. Tak jsem ještě dostal rec a res. A stále mám kód. To je naprosto v pořádku JavaScript kód. Takže mohu deklarovat funkci bez výslovně dávat to jméno. Je to na první pohled trochu matoucí. Tam jsou některé, jako užitečné věci které můžete dělat s Tyto anonymní funkce. Má někdo nějaké dotazy na toto téma, nebo je to v pořádku jen pro teď, nějak prostě přijmout, že bude dělat to samé? Jo? DIVÁKŮ: Jsou funkce první třídy v JavaScriptu? KEVIN SCHMID: Jsou to první třídy v JavaScriptu. A jen vím, že tyto pojmy procházející v anonymní funkce, jako je to platí pro JavaScript, abyste může napsat v posledním projektu webový prohlížeč příliš. Tak například, v kódu JavaScript Váš prohlížeč, je to také trochu akce řízený v tom smyslu, že to, co budete mají je, když uživatel klepne na to tlačítko, chci, abys spuštěním tohoto kódu. Takže je to stejný druh myšlenek na straně klienta, když kliknutím myši, nebo se myši nad nějakým obrazem na vašem webové stránky, spustit tento kód. Které lze použít k serverům. Takže je to něco jako vzrušující Důvodem, proč JavaScript je opravdu vhodné nebo někteří lidé si myslí, že je to vhodný jazyk pro tento druh Server Driver událost, protože máte Tyto anonymní funkce. Máte celou myšlenku Tento asynchronní kód. OK. Má někdo nějaké otázky? OK. Tak to byl simple.js. Takže pojďme se podívat na jeden nebo pár dalších. Tak tohle je sleep.js. Takže je někdo zná Funkce sleep C? Asi z jedné z dřívějších přednášek nebo něco takového? Takže v podstatě se můžete projít v Myslím, že počet sekund, nebo pokud používáte ú spát počet milisekund nebo nanosekund. A v podstatě program zastavit systémem pro tuto dobu. Je to tak? A pak, že se probudí a nakonec pak to bude jen pokračovat v jízdě programu. Takže tento server nějak dává dojem spaní. Takže si všimnout, že máme stejný res.writeHead 200 s hlavičkou jako předtím, ale pak jsme volat to Funkce tzv. set timeout. Nastavte časový limit je také k dispozici v váš webový prohlížeč Google Chrome nebo Safari nebo cokoliv jiného. A v podstatě to, co to dělá tady Je to trvá do funkce. Všimněte si, opět, je to anonymní funkce. Tak to je docela v pohodě, protože jsme pomocí anonymní funkce v rámci anonymní funkce, která může být trochu divné. Ale to brát tuto funkci, která je v podstatě říká - a jak to Práce je 5000 milisekund, chci můžete spustit tuto funkci, která právě končí odpověď a píše hej. Takže to působí dojmem, jako spí, ale jak to ve skutečnosti Pracuje se budeme projít tato linie velmi rychle. Právě jsme něco psát. A pak budeme také projít tato linie velmi rychle. Takže jsme vlastně děje na počkejte pět sekund. Jsme jen tak běžet Tento kód okamžitě. A pak je tu opět, tento malý událost smyčka, která má tuto věc registry, které v podstatě je jen Neustále se točí v kruhu a při pohledu na hodiny v jeden nitě a říká, má pět sekund prošel ještě? A pak, když vidí, že druhý ruka se přesunula tak pět sekund nebo cokoliv, pak se probudí a řekne, oh, co mám dělat? No musím se spuštěním tohoto kódu. A pak, že to bude spustit res.end hej. Takže znovu, my nikdy čekat tady. Takže to není, že tento kód uvnitř tato funkce bude trvat pět sekund běžet. Tento kód bude běžet do značné míry okamžitě, alespoň ve vztahu k pět sekund, po které jsme mluvili o dříve předtím. Takže jen to ukázat v akci, Můžu dělat Node.sleep.js. A dělal jsem to bordel až něco? Možná. Promiňte. Podívejme se, co můžeme udělat, opravit to. OK. Takže určitě používat Node.js. Já jsem si srandu. OK. Jen jeden sec. OK. Já vím, co to je. Takže problém je, že v mé druhé záložce tady, jsem běžel Uzel již na že stejná adresa, 1337. Takže chyba, že to hodil, podíváme-li se na to skutečná pozorně, je adresa použití, EADDRINUSE. Tak jsem se už s použitím 1337 zde. Takže když jsem zavřel to pryč, a pak jsem se podnikem zkuste spustit to, doufejme, že vše, co bude v pořádku. OK. Takže můžete mít pouze jednu věc druhu naslouchání na portu najednou. Dalším řešením by bylo pro mě jen editovat tento program a zkontrolujte, to bude jako 1338 nebo tak něco takhle. Ale teď spánek běží. Takže pojďme vlastně to vyzkoušet v Prohlížeč tentokrát, protože je to trochu nezajímavý vidět , že v terminálu. Takže jsem prostě jít na to 127 adresa opět na 1337. A pokud jste jej vidět - Já nevím, jestli je to možné - ale my Prohlížeč je brát velmi, velmi dlouho čas k načtení nebo jako pět sekund. A potom to, že konečně ukončil odpověď. A nemůžete vidět, protože to se přesunul trochu, ale když udělám to o něco menší, můžete můžete vidět, že říká, že hej. Tak jsem hej, ale po pěti sekundách. A to by mohlo být trochu čistší vidět je to tady na terminálu, takže jsem dělat - Pojďme udělat tady - Pojďme udělat Curl této adrese opět s 1337. A já jsem tak nějak sedět Zde po dobu pěti sekund. Ale všimněte si, že server může přijmout nová opatření. Tak to vytiskne hej. A demo to, v podstatě to, co Můžu dělat v této druhé záložce - takže řekněme, že jsem to udělat v jiném kartě, Budu dělat Curl a stejný věc znovu. A budu se snažit, aby kopat těchto kluci pryč ve stejnou dobu. Tak jdu na to, a já jsem bude závodit tady a já jsem dělat to znovu. A udělejme to tak, že si Můžete vidět oba. To je jeden tištěný hej, a že jeden tištěný hej celou cestu na - pojďme dělat tento experiment znovu. Ve skutečnosti, pojďme použít trik, jestli je to v pořádku. Takže budu používat shell věc, která mi umožňuje v podstatě spustit dvě kopie tohoto programu paralelně. Takže to bude běžet první program a druhý program paralelně. Takže teď, když jsem stiskněte klávesu Enter, bude to aby tato žádost do značné míry okamžitě ve stejnou dobu. Takže pojďme to dát šanci. Takže teď Všimněte si, že říká, že dva procesy. A pokud jste zvědaví, že 27,000 číslo je v podstatě proces ID. A pak všimnete, že tištěné hej ve stejnou dobu. Bylo to, jako bychom museli čekat pět sekund pro jednu a pak po tom, pět sekund později se na druhé. Tak to je druh, v některých ohledech, je to opravdu důkaz, ale je to intuitivní důkazy o tom, že to není jen jako čekat pět sekund a blokování celý závit. OK v pohodě. Takže Aaron zeptal dříve, že bylo dobře, co když to něco udělat - Jo? DIVÁKŮ: Počkejte. Jak se to liší od printf vyrovnávací paměti, i když? Není to automaticky dělat, že? Proč se musíme starat o to? KEVIN SCHMID: Oh, mohl bys říkají, že ještě jednou? DIVÁKŮ: Nemá rád printf vyrovnávací paměti dělat přesně to samé? KEVIN SCHMID: printf vyrovnávací paměť? DIVÁKŮ: Jo. OK. Nebyl v jednom z kvízů, které byly mluví o tom, jak, pokud klepnete pravým printf něco, a pak si to pauza jeden druhé, a pak máte to smyčku deset časy, bude to čekat deset sekund a pak printf všechno dohromady? KEVIN SCHMID: Oh, OK. DIVÁKŮ: Je to to samé věc, pak v tomto případě? KEVIN SCHMID: Takže otázka byla v podstatě v jedné z bývalých kvízů nebo tak něco, tam byla otázka, která v podstatě, pokud říkáte, tiskové F 10 věcí najednou a pak spal jako v proces tisku z těch, na konci nějakého důvodu, by to jen výpis těch, všichni ven na obrazovce. Takže tam to docela dvou různých pojmy zde. Takže myslím, že jedna věc je, že v tomto případ, máme co do činění se dvěma různými druh lidí ptát na serveru věci, ve stejnou dobu. A důvod, proč printf druh čeká takhle a vypíše to všechno najednou se více týká jak printf druh - Způsob, jakým je ve skutečnosti printf proveden, je to v podstatě má mluvit s operačním systémem psát že věci na konzole. Takže to nechce dělat všechno věci okamžitě, když říkáte printf nějaký řetězec, protože to by mohlo prodražit, pokud má to, že pokaždé. Takže pokud jste to printf hej, program nemusí ve skutečnosti tisku, že bezprostředně na konzoli. Mohlo by se říci, OK, napsal jsem to. A pak trochu čekat na vás, aby je to trochu víc, než ve skutečnosti psát to do konzole. Takže důvod, proč tomu tak bylo - a je to docela nesouvisí k spánku - je, že spánek byl trochu jen injekčně prokázat tam Skutečnost, že se nepíše to synchronně. Ale důvod, proč to je jen výkon, takže nemusíte dělat, že mnoho kontaktů na operační systém. Ale tady, co jsme opravdu snaží dělat s tímto spánku věc je prostě ukázat že když máme dva lidi návštěvě Tato webová stránka, že to nebude dát je v řádku, kde je to chystá říct, Musím vám pomohl, a pak, když jsem zcela dokončena vám pomůže po nich pět sekund, pak budu přesunete na další osoby. Takže požadavek prvního člověka není přivázat, že smyčka pro pořádání akcí, pokud to dává smysl. Ale zde je ve skutečnosti příkladem něco, co naváže do smyčky událostí. Tak tady je to hrozný funkci výpočet n-tého Fibonacciho. Je to doslova horší způsob, jak můžete výpočet n-tého Fibonacciho čísla. A to je vlastně jen na vědomí kde to přišlo z, je to vlastně - Myslím, můžete zkusit jít najít - ale tam to jako velmi zdlouhavé blog příspěvek, který někdo napsal. Je to jako jedna z těch Reddit věcí. Ale někdo kritizoval Node.js, a oni používali to jako příklad. Tak nějak jsem chtěl jen ukázat vám dva různé pohledy jen proto, aby obecné chápání pojmů Za těmito dvěma věcmi. Ale to je zvolena jen jako hrozné, strašně neefektivní výpočetně Intenzivní způsob, jak vypočítat nth Fibonacci číslo. Takže jen jako vedlejší poznámku, proč je je to hrozné, jako v jedné cestě? Jo? DIVÁKŮ: Řekněme, že začnete se s 1000. 1000 se dělí na 999 a 998. Každý to se rozdělí na dvě věci. Každý to se rozdělí na dvě věci. KEVIN SCHMID: Správně. DIVÁKŮ: Celou cestu dolů. KEVIN SCHMID: Přesně tak. Takže jen opakovat pro kameru, když jsem volání fib na jako 1000 nebo tak něco stejně jako to, že je to samozřejmě ne méně než nebo rovno jedné, takže budu přejít na tento případ jiný, a pak jdu volání fib 999 a fib 998. A pak skoro všechno práce, která fib 999 dělá, je druh na této úrovni. Vydáte-li se dolů, je to ještě redundantní než to, ale pokud jste právě myslíte, že výpočetní fib 998 dostane nám docela blízko fib 999. Takže bychom měli být opravdu trochu více chytrý o tom, jak jsme trochu znovu ty, ale my nejsme znovupoužití tyto věci vůbec. Takže si dovedete představit to obrovské, obrovský strom, který je prostě hrozné. Ale tak jako tak, v pořádku. Tak to byla lež. Je to jen chvíli trvá, než spustit. Jo? DIVÁKŮ: [neslyšitelné]. KEVIN SCHMID: Oh, mohl bys zopakovat otázku? DIVÁKŮ: [neslyšitelné]. KEVIN SCHMID: Aha, takže to je jen kód že to bude trochu na na straně serveru. Takže to nebude nalezena v prohlížeči, nebo tak něco. Je to v podstatě to, co máme, je, že když uživatel zde do značné míry značky opět jejich žádost, když jsme se trochu podat žádost, budeme nazývat tato funkce na straně serveru. A pak dostaneme výsledek zpět od volání této funkce. A pak jsme si jen vytisknout je pro uživatele. Takže uživatel není opravdu řešit Pomocí této funkce příliš. Byla to otázka? Má to smysl? OK. V pohodě. Takže znovu, co děláme celou tu res.writeHead věc, kde jsme vytisknout záhlaví. A pak jsem se ukončit reakci tím, že dělá magické číslo je fib 45. Takže pojďme stačí spustit tento server. Takže budu dělat uzlu fib.js. Takže teď moje fib je spuštěn server. A pak tady, jdu k tomu jeden z nich. OK? Tak jsem jen chtěl říct, Curl. Takže to bude chvíli trvat, ale doufejme, že brzy skončí a to bude tisknout, že 45. Fibonacci číslo. DIVÁKŮ: [neslyšitelné]. KEVIN SCHMID: Mělo by si udělal docela brzy. Tak to by mělo trvat pět-šestsekunda. Já nevím, to je jen V8 je velmi rychle, ale v každém případě, to je velmi krátký příklad a záměrně nevkusný z non-triviální výpočet. Takže po nějaké době, to si to. Ale teď, co když to udělám, že stejný druh experiment jako předtím, kdy jsem se udělat dvě žádosti na stejnou dobu? Tak tady jdu do Curl na že adresa, a jdu udělat další Curl. A pamatujte si, když jsme dělali to pro spát serveru, když jsme v podstatě měli to po pěti sekundách, se docela hodně jak se vrátil hned přibližně ve stejnou dobu. Takže to nebylo zvlášť svázaný. Ale zkusme to teď. OK, takže jsme dostali naše dva procesy. Nezapomeňte, ty jsou procesní ID. To bude trochu trapné, když se zastaví. Takže pojďme zůstat tady a čekat. Takže jeden z nich by měla přijít zpět poté, co jako - OK, tak jeden se vrátil. Ale proč ne druhý jeden se vrátil ještě ne? Jo? Diváků: Server nemůže nic dělat zatímco to je výpočetní že velký počet. KEVIN SCHMID: Správně. Takže odpověď byla jen, že server opravdu nemůže nic dělat, zatímco je to výpočetní toto číslo Fibonacci. Takže teď jsem zrovna moje dvě věci zpět. Ale myslím, že jen přemýšlet o kodexu trochu, jak to funguje a všechno. Takže tato funkce tady je kód, který Řekl jsem tento server spustit, když to přijímá nové příchozí požadavek. Takže to jen tak projít tento Celý kód, a pak to půjde zpět do smyčky událostí a pak pokračovat kontrola nové události. Takže v podstatě to, co jsme se děje je server poslech nových věcí. První osoba žádá o to, co 45. Provozujeme tento kód do jeho výpočtu. Tento kód má zhruba pět šest sekund běžet. Pak jsme se vrátit do smyčky událostí a zkontrolujte, zda nové požadavky. Tak to je příklad toho, jak, pokud jsou věci, které jsou tak-zvané výpočetní vázána, nebo použít hodně výpočetních, není moc, ale jako jsou výpočetně náročné - Myslím, že jedna věc je říct, o tom je , že tato funkce dělá úplně, z větší části, pěkný užitečné práce v pořádku. Po celou dobu, že zpětné volání funkce běžel, to bylo docela hodně tráví většinu svého času jen výpočetní číslo, které nth Fibonacci. Ale my jsme měli jen jedno vlákno řešit. V modelu Apache, když se dva lidé podal žádost, aby si fib 45, se by měl dvě různé závity. A pak úkolem operačního systému by bylo, nebo uživatelské úrovni Kód, který spravuje vlákna, by si bylo plátek, který se na CPU, nebo dokonce, pokud jste měli více procesorů, distribuovat rovnoměrně na CPU tak, aby byly oba úprava zhruba ve stejnou dobu. Takže jen proto, aby vám ukázat, jak můžeme třídit z - a to není celkem ideální řešení, ale trochu o tom, jak můžeme aby se sem vrátit a dělat trochu lépe. Takže to, co jsem tady, je program s názvem Fib C. A to v podstatě používá další z modulů uzlu s názvem Dítě proces modul. Tak jsem součástí, že v pravém horním druhu ze jako bych to libru patří dítě process.h nebo tak něco. Teď mám přístup k této CP proměnné který má všechny své funkce. Takže teď, co dělám v této odpovědi Psovod je Běžím tento program tečka lomítko fib 45. Takže to, co jsem udělal - a já jsem prostě jít vystoupit z tohoto programu pro trochu - Je Napsal jsem program C, který v podstatě počítá nth Fibonacci číslo. Tak tady je to jen program, co jsem napsal v C, který počítá to. Mohu zkompilovat, a můžu běžet že na příkazovém řádku. A to bude pro výpočet Číslo 45. Fibonacci. Takže všimnout, to prostě trvá skoro tak dlouho. Asi jsem mohl použít pomlčku 03 k optimalizovat, nebo něco takového, ale já to udělal jako pravidelný Nastavení kompilátoru. A vytiskne ji. Ale teď, co mám trochu dělat? Oh sorry, špatný soubor. Tak jsem se dělat stejné věci s záhlaví jako předtím. Pak jsem to udělat cp.exec. Tak co to bude dělat, je to chystá spustit tento program. Ale způsob, jakým to funguje tak, že že to nebude čekat na tento program až do konce. Je to v podstatě jen říká, spustit tento program. Takže v podstatě napište to do příkazového řádku druh. A pak, když budete hotovi s to, spusťte tuto funkci. Takže teď jsme trochu si to Celá obnovena věc jako bychom to čekali. Znamená to, že trochu smysl? Jo? DIVÁKŮ: [neslyšitelné]? KEVIN SCHMID: Tak to bude skutečně otevřít nový proces, jak to udělat. Takže je to vlastně v některých ohledech, zlo, ne velmi zlé, ale je to důležité říci, že je to druh návrat do, na jedné straně, Apache model, kdy budeme dělat závity a procesy Pro každou žádost nebo procesy pro každý požadavek. Tak to je docela podobný s tím, co dělá Apache. V některých případech, bude to stačí použít nový závit, který je trochu více světla hmotnost než proces, ale Apache mohl skončit větvení nový proces který je tak trochu o tom, co děláme tady implicitně tím, že dělá tečka lomítko fib 45. A pak v tom případě, jsme trochu vzniknou stejné náklady procesů. Tak to je jen jedna věc, kterou můžete udělat. Ale jen proto, aby ukažte tento druh provozu. A tato diskuse je opravdu jen zaměřena na prezentovat tyto druhy programů způsob, jak ukázat různé pohledy na jak navrhnout servery, jako je to. Tak to běží, a pak nyní, když to to znovu, mám dvě ID procesů. Pojďme si o tom promluvit věci, poukázat. Tak zjistíte, že jsou postupně. To je v pohodě. Vzhledem k tomu, že se před 27122. Ale Oznámení teď se vrátili zhruba ve stejnou dobu. A teď, dobrá otázka se zeptat proč bylo to, že případ je, jehož úkolem to bylo teď nějak, aby se tyto věci druh hrát fér mezi sebou jiné, tyto dva případy tečka lomítko fib 45, že jsem běžel nebo že RAN uzel? Kdo trochu je to fér, že oba se druh dáno běhu času? DIVÁKŮ: [neslyšitelné]. KEVIN SCHMID: Jo. Takže v podstatě, když jsem si dot lomítko lež 45, nebo něco takového, teď je to druh do operačního systému zvládnout runtime těchto programů. A teď se jim může naplánovat na různých CPU, nebo to je možné naplánovat. Je možné krájet až doba, kterou člověk CPU dostane to, nebo že se běžet na jednom procesoru. Tak to je myšlenka, že. Znamená to, že smysl pro každého? Takže teď Uzel není opravdu hrát část v rozdělování těchto úkolů. OK. Tak to je skoro to na příkladech. Jen jsem chtěl ukázat ještě jednu věc protože hodně z toho byla dosud není zcela Super praktické v některých případech. Dovedu si představit, se vrací domů poté, co tato mluvit a něco a říkat jako, tak nějak jsem se dostal z té řeči, že Můžu udělat Fibonacciho server můj konečný projekt. Tak tady je to jen trochu jeden příklad že snad bude - Možná ne, ale možná - trochu víc druh relevantní závěrečných prací a myslet dopředu na takové věci. Tak tohle je chat.js. Takže je to něco jako nějaký vzorek Server side kód, který můžete použít k nastavit malou chatu serveru, jako je jste mohli vidět na Facebook Chat nebo cokoliv jiného. Takže já neříkám, že je to jako Facebook Chat, ale je to druh jako dobrý - možná není dobré, ale možná dobrý - výchozí bod pro chat server pro vaše webové stránky pro finální projekt. Tak se pojďme podívat na to, co to dělá. Takže se dostáváme tuto speciální věc v horní části, to var SIO rovná vyžadují Socket.IO. Takže to je další věc, že ​​to není vlastně přijít svázaný s Uzel, ale můžete jej nainstalovat. Je to modul Node. Takže je to jen jako nějaký rozšíření uzlu. SocketIO je ve skutečnosti opravdu docela fajn. Je to abstrakce, která v podstatě to, co to znamená je, že vám umožní mít tento proud komunikace mezi web prohlížeč a webový server. Takže z velké části dosud jsme měli Tyto velmi rychlé sekundu nebo dvě druhá komunikace mezi web prohlížeč a webový server. Takže je to v podstatě jít na google.com, get věci, zašlete jej zpět, a pak jsme hotovi. My nikdy mluvit, dokud uživatel zadá v něčem jiném. Ale co Socket.IO a podobné druhy věci - a SocketIO je vlastně jedním z věcí, která je postavena na jako WebSocket, který je jakýmsi k dispozici jako součást HTML5 - které vám umožní mít tento pokračující dialog. A to je velmi užitečné v chatu serveru takové věci, protože to je něco jako pokračujícího dialogu některé způsoby, protože pokud jste chatování s někým, můžete nyní stačí poslat Zpráva se potrubí, a poté server může poslat zprávu dolů potrubí na jinou osobu, kterou jste chatování s. A pak můžete mít tento vyměňovat takhle. Tak to je něco, co SocketIO je dobré pro. Důvod, že SocketIO používá WebSockets protože jedna věc je, že v Kromě prostě staré WebSockets, to také dělá nějaké triky v podstatě aby bylo kompatibilní se všemi prohlížeči. Takže prohlížeče jako Internet Explorer bohužel nepodporují WebSockets hned po vybalení z krabice. Tak to používá nějaký jiný druh chlazení čistý věci s Adobe Flash, které umožní budete mít průřez podporu prohlížeče. Tak to je opravdu užitečné. A vlastně, vím, že jsem trochu běh na čas tady, ale CS50 Diskutujte, už jste někdy viděli něco jako, já nevím, prázdné, a tak je odpovědi na tento příspěvek, nebo tak něco jako to, že funkce? To je SocketIO. Takže když někdo začne psát v roce diskutovat pole, aby odpověď nebo něco, váš prohlížeč nepodporuje to, co je zavolal SocketIO vyzařuje určitý druh událost, která říká, že někdo je odpovědi na tento příspěvek. Pak serveru říká, OK, co mám dělat? Tak teď musím říct, ty ostatní kluky kteří jsou na CS50 Diskutujte hledáte u tohoto příspěvku, že někdo odpověděl. Tak to je něco, co SocketIO je dobrý, tento pokračující druhu proud dialogu. OK. Takže to, co jsem tady - a my jsme jen bude ignorovat pole připojení pro trochu - co mám dělat, je mi to poslechnout znovu. Tak to je jen způsob, jak v Socket.IO se říká pojďme naslouchat na tomto portu. A pak jsem si to na připojení. Tak to je v podstatě jen Socket IO je způsob, jak říct, když jsme obdrželi připojení, chci tě Ke spuštění tohoto kódu. A všimněte si, že místo toho, aby rec a res prošel tam mám Socket. A to Socket myšlenka je v podstatě to věc, kterou můžete psát a číst z toho má uživatele Zprávy možná. A zprávy, které byste poslat může projít tímto Socket. Má to smysl? Takže to je to pokračující věc. Takže to, co dělám, je říkám Socket.emit. A vydávat se docela hodně dva argumenty. První argument je řetězec jen představující typ co jste emisemi. Takže v tomto případě, jsem použití Tento řetězec nová zpráva. A to je jen v podstatě říká, že typ této věci, co jsem odeslání, je nová zpráva. Takže si můžete poslechnout na konkrétní typy Zánovní zprávy nebo cokoliv pomocí tečku. Takže spojení a uživatel tam poslal, pokud se podíváte na to, kde říkáme tečka na, to jsou další řetězce, které představují typy uživatelských zpráv. Takže je to v podstatě můžete mít tento emitovat jeden z těchto typů zpráv, a pak něco v reakci na jeden z těchto typů zpráv Takže jsem vyzařující tuto novou zprávu. Budeme ignorovat connections.push za vteřinu. Ale pak jsem si řekl, Socket.on uživatel odeslal. Takže teď je to trochu, jako když uživatel mi pošle zprávu, chci spustit tento kód. A všimněte si, že anonymní funkce bere v této proměnné tzv. data, která je v podstatě děje mít zprávy uživatele. Takže teď pojďme trochu mluvit o pole připojení. Tak tohle je určen pro chat klienta kde v podstatě každý je trochu v stejné místnosti. Takže v podstatě to, co budeme potřebovat, aby asi je nějaká pole, které v podstatě zastupuje všechny občany chatování v některé způsoby, pokud to dává smysl. Je to tak? Vzhledem k tomu, že potřebujeme vědět, kdo ty kluky tak jsme jim mohou posílat zprávy že ostatní lidé posílají k nám. Takže to, co tento kód dělá, je-li uživatel pošle zprávu - to je typ událost - budeme spuštěním tohoto kódu. A to, co děláme, je, že jsme projít tento pole, které jsme nazvali připojení. A skoro pro každé připojení kromě toho, že je naše, to je co tento kód říká, zašleme nový Zpráva s touto zprávou připojenou informace. Takže pokud si všimnete zde, co jsem udělal, když uživatel skutečně je nový Připojení je, že jsem přidal s Způsob JavaScript.push, to je v podstatě jen říkám, jak přidat že Socket jako hodnota do naše připojení pole. Takže teď, když tento kód spustí, bude to Poslat věci těm, zejména připojení. Takže to může být dobrým výchozím bodem pro výrobu chatu serveru nebo něco podobného. A docela fajn věc je, že kód, který vidíte zde, jako na a vysílat a tak podobně, že je stejný druh kódu JavaScript, který by psát v prohlížeči komunikovat se serverem. Takže to je důvod, proč SocketIO je druh elegantní a užitečné tímto způsobem. Jo a ještě jedna věc, kterou opravdu rychle. Tam byl konečný projekt CS50 v loňském roce že v podstatě zaveden chat server Node.js. Myslím, že je to Harvardchats.org ale já nejsem - OK. Nejsem si jistý, co URL je, ale Mohu poslat, že se později. Ale je to trochu vychladnout, co můžete dělat s Node.js. Takže doufám, že obecně, vy kluci mají dobrý pocit z toho, co Node.js je užitečný a jak byste mohli možná platit do konečného projektu. Budu rozesílat víc zdroje spolu s tím. A děkuji, že jste přišli. Děkuju. [APPLAUSE]