1 00:00:00,000 --> 00:00:08,350 2 00:00:08,350 --> 00:00:09,710 >> KEVIN Schmid: Hej alla. 3 00:00:09,710 --> 00:00:12,640 Välkommen till CS50 seminariet på Node.js. 4 00:00:12,640 --> 00:00:13,955 Mitt namn är Kevin. 5 00:00:13,955 --> 00:00:15,580 Jag är en CS50 TF. 6 00:00:15,580 --> 00:00:17,650 Och jag är ungefär som verkligen glada om det här seminariet. 7 00:00:17,650 --> 00:00:20,430 Jag tror Node.js är väldigt cool. 8 00:00:20,430 --> 00:00:24,200 Jag hoppas att det här seminariet kan användas som en bra, antar jag, språngbräda för 9 00:00:24,200 --> 00:00:26,380 några av dina sista projekt IF du är intresserad av att använda 10 00:00:26,380 --> 00:00:27,630 något som Node.js. 11 00:00:27,630 --> 00:00:29,770 12 00:00:29,770 --> 00:00:33,320 >> Vi sorts börjar seminariet av av bara talar om en liten bit av den 13 00:00:33,320 --> 00:00:36,970 typ av bakgrund skalbarhet perspektiv Node.js, och sedan 14 00:00:36,970 --> 00:00:39,240 Vi ska flytta till några kodexempel. 15 00:00:39,240 --> 00:00:42,340 Och jag har koden på en webbsida, och du kan titta på koden. 16 00:00:42,340 --> 00:00:45,475 Och efter seminariet, jag sorterar prat om hur du kan ställa in Node.js 17 00:00:45,475 --> 00:00:48,220 på din dator. 18 00:00:48,220 --> 00:00:48,710 >> OK. 19 00:00:48,710 --> 00:00:49,760 Så låt oss komma igång. 20 00:00:49,760 --> 00:00:53,700 Så jag antar att jag vill bara prata om webbservrar, verkligen, först. 21 00:00:53,700 --> 00:00:59,730 Och att starta denna diskussion, jag i grund och botten har ett diagram som är från 22 00:00:59,730 --> 00:01:04,269 läroboken används för CS61, som i grund och botten visar interaktionen 23 00:01:04,269 --> 00:01:08,510 mellan en klientprocess, som din webb webbläsare eller liknande ditt mål klient eller 24 00:01:08,510 --> 00:01:11,340 något liknande, och en webbserver. 25 00:01:11,340 --> 00:01:15,150 Så denna typ av liknar det bild som du såg i föreläsning om 26 00:01:15,150 --> 00:01:19,270 Onsdag var i grund och botten har vi några klientprocess som Google Chrome. 27 00:01:19,270 --> 00:01:22,980 >> Och sedan steg ett är klienten skickar en förfrågan. 28 00:01:22,980 --> 00:01:27,510 Så det kan vara något som väl låt oss besök, jag vet inte, CS50.net. 29 00:01:27,510 --> 00:01:29,320 Så vi utfärdar denna begäran. 30 00:01:29,320 --> 00:01:34,280 Och det någon som kommer ihåg namnet på det protokoll som anger hur det 31 00:01:34,280 --> 00:01:35,610 begäran bör struktureras? 32 00:01:35,610 --> 00:01:36,382 Yep. 33 00:01:36,382 --> 00:01:37,650 >> PUBLIK: [OHÖRBAR]. 34 00:01:37,650 --> 00:01:38,150 >> KEVIN Schmid: Exakt. 35 00:01:38,150 --> 00:01:40,100 Så det är som HTTP, eller hur? 36 00:01:40,100 --> 00:01:44,720 Så i princip specifikationen för hur denna begäran borde egentligen läggas 37 00:01:44,720 --> 00:01:47,450 ut, eftersom i slutet av dagen, att begäran är egentligen bara gillar en 38 00:01:47,450 --> 00:01:50,240 sträng som i grund och botten säger att jag vill ha det. 39 00:01:50,240 --> 00:01:53,580 Och specifikationen för det är HTTP. 40 00:01:53,580 --> 00:01:55,270 Så det är som ett protokoll. 41 00:01:55,270 --> 00:01:57,920 >> Så då servern tar emot denna begäran. 42 00:01:57,920 --> 00:02:01,610 Så ni har en webbserver installerad i CS50 apparaten. 43 00:02:01,610 --> 00:02:02,460 Det är Apache. 44 00:02:02,460 --> 00:02:06,230 Och denna vecka när du arbetar på problemet satt sju, kommer du verkligen att arbeta 45 00:02:06,230 --> 00:02:08,160 med den webbserver. 46 00:02:08,160 --> 00:02:12,380 Så servern tar emot denna begäran, och då måste det slags repa sin 47 00:02:12,380 --> 00:02:15,090 huvud och säga som väl vad gör jag med detta? 48 00:02:15,090 --> 00:02:20,060 >> Så baserat på vad den bestämmer sig för att göra, då det kan ha att kontakta någon form 49 00:02:20,060 --> 00:02:20,730 av resurs. 50 00:02:20,730 --> 00:02:23,700 Och som resurs kan vara en massa olika saker. 51 00:02:23,700 --> 00:02:26,810 För en, kan det vara precis som en statisk HTML-fil. 52 00:02:26,810 --> 00:02:29,820 Så det skulle bara vara som en HTML som är som för 53 00:02:29,820 --> 00:02:31,100 din personliga hemsida. 54 00:02:31,100 --> 00:02:35,360 Det kan vara en statisk fil som en bild eller som en film som du har. 55 00:02:35,360 --> 00:02:37,660 Det kan till och med prata till någon form av databas 56 00:02:37,660 --> 00:02:39,530 som en MySQL-databas. 57 00:02:39,530 --> 00:02:43,910 Så det behöver inte alltid kommunicera med en resurs, men i 58 00:02:43,910 --> 00:02:45,700 vissa fall kunde det. 59 00:02:45,700 --> 00:02:47,800 >> Så vad det kommer att göra efter det är att det kommer att 60 00:02:47,800 --> 00:02:49,430 sända tillbaka svaret. 61 00:02:49,430 --> 00:02:53,130 Och svaret till detta är också anges av HTTP. 62 00:02:53,130 --> 00:02:54,830 Så då kunden kan ta emot det. 63 00:02:54,830 --> 00:02:56,740 Det kan slita isär den och bearbeta den. 64 00:02:56,740 --> 00:03:00,900 Och sedan får du en webbsida som Google eller CS50.net eller 65 00:03:00,900 --> 00:03:02,240 vad du gick till. 66 00:03:02,240 --> 00:03:03,100 OK? 67 00:03:03,100 --> 00:03:06,080 >> Så detta är den grundläggande samverkan som vi kommer att ha att göra med. 68 00:03:06,080 --> 00:03:08,770 Och vi är ganska mycket att vara fokuserar på denna del av 69 00:03:08,770 --> 00:03:10,640 interaktion, servern. 70 00:03:10,640 --> 00:03:10,990 OK. 71 00:03:10,990 --> 00:03:12,210 Cool. 72 00:03:12,210 --> 00:03:15,500 Någon som har några frågor så här långt? 73 00:03:15,500 --> 00:03:17,720 OK. 74 00:03:17,720 --> 00:03:22,430 >> Så som sagt, får webbservern denna HTTP-begäran och sedan utfärdar detta 75 00:03:22,430 --> 00:03:24,760 HTTP-svaret. 76 00:03:24,760 --> 00:03:29,100 Och som vi talat om tidigare, det CS50 apparat webbserver är Apache. 77 00:03:29,100 --> 00:03:32,490 Så när ni arbetar på P set sju, du kommer att arbeta med den 78 00:03:32,490 --> 00:03:34,120 Apache webbserver. 79 00:03:34,120 --> 00:03:37,890 Du behöver aldrig riktigt arbeta med Apache direkt för mycket. 80 00:03:37,890 --> 00:03:41,920 Du sorts konfigurera Apache lite När du anger de virtuella värdar eller 81 00:03:41,920 --> 00:03:44,970 v värdar och vi kommer att få som i en liten bit. 82 00:03:44,970 --> 00:03:50,620 >> Men i grund och botten, webbservern Apache inrättats för att arbeta med PHP slag 83 00:03:50,620 --> 00:03:51,730 av ur lådan. 84 00:03:51,730 --> 00:03:56,170 Så vad som verkligen händer är när du går till en av dina webbplatser som, säg, 85 00:03:56,170 --> 00:04:00,360 lokala värden snedstreck index.php eller något, är webbläsaren skickar det 86 00:04:00,360 --> 00:04:04,330 begäran, och sedan Apache sitter där och räknar ut att göra med det. 87 00:04:04,330 --> 00:04:08,840 Och det händer att verkställa den koden i index.php och 88 00:04:08,840 --> 00:04:11,330 sedan skicka det tillbaka. 89 00:04:11,330 --> 00:04:15,640 Så det är det. 90 00:04:15,640 --> 00:04:16,980 Så vi liksom pratat om det här. 91 00:04:16,980 --> 00:04:21,990 Så det skulle bara tjäna en statisk fil eller köra några PHP-kod och sedan fråga 92 00:04:21,990 --> 00:04:23,510 svaret. 93 00:04:23,510 --> 00:04:27,670 >> Så då en vanlig fråga som kan komma upp är bra, hur ska vi egentligen handlar 94 00:04:27,670 --> 00:04:31,750 med att ha flera användare på samma gång? 95 00:04:31,750 --> 00:04:36,930 Så tänk om du skrev en webbsida server, om du hade en webbserver som 96 00:04:36,930 --> 00:04:39,900 du försökte skriva in något som C eller något liknande, 97 00:04:39,900 --> 00:04:45,150 i princip kan man tänka på hur det skulle kunna vara någon form av kod som 98 00:04:45,150 --> 00:04:49,330 skulle få en begäran, men sedan det har att göra allt detta arbete på det. 99 00:04:49,330 --> 00:04:53,060 Det kan ha att exempelvis kontakta databas eller något liknande. 100 00:04:53,060 --> 00:04:53,300 Rätt? 101 00:04:53,300 --> 00:04:56,010 Och då skulle det göra den typen för bearbetning och därefter 102 00:04:56,010 --> 00:04:57,060 skickas tillbaka svaret. 103 00:04:57,060 --> 00:04:58,950 Så det är som den höga nivå översikt. 104 00:04:58,950 --> 00:05:04,210 >> Men det är inte omedelbart uppenbart hur du kan göra det så att två personer eller 105 00:05:04,210 --> 00:05:09,040 till och med 1000 personer skulle kunna arbeta med din webbserver på samma gång. 106 00:05:09,040 --> 00:05:14,880 Så lösningen som Apache använder kallas trådar eller processer. 107 00:05:14,880 --> 00:05:16,770 Så du kanske har hört talas om dessa termer innan. 108 00:05:16,770 --> 00:05:22,190 Det är OK om du inte har, men tänk bara om ämnen eller processer som sätt för 109 00:05:22,190 --> 00:05:26,290 ett operativsystem eller ett användarprogram eller något liknande eller en webbserver 110 00:05:26,290 --> 00:05:28,810 att sorts exekvera flera saker samtidigt. 111 00:05:28,810 --> 00:05:31,760 Så du kanske har hört termen liknande trådar av avrättning. 112 00:05:31,760 --> 00:05:34,140 Så det är ungefär som att du är sorts multitasking. 113 00:05:34,140 --> 00:05:37,710 >> Och om du har sett på rutan på din laptop, eller något liknande, 114 00:05:37,710 --> 00:05:43,040 Multicore, vad du kan göra är att du kan köra två olika trådar på olika 115 00:05:43,040 --> 00:05:46,700 delar av CPU så att de kan faktiskt hända på samma gång. 116 00:05:46,700 --> 00:05:48,100 Så det här är verkligen kraftfull. 117 00:05:48,100 --> 00:05:52,270 Och detta är typ av Apaches lösning på detta problem. 118 00:05:52,270 --> 00:05:57,900 >> Så är det ungefär som eventuella problem med denna metod men? 119 00:05:57,900 --> 00:05:59,870 Så jag antar att jag liksom skrev dem där. 120 00:05:59,870 --> 00:06:03,440 Men båda slags använder mycket minne. 121 00:06:03,440 --> 00:06:07,490 Det är väldigt dyrt att skapa en tråd eller en process. 122 00:06:07,490 --> 00:06:11,750 >> Och en del av resonemanget är att bara som när du kör ett C-program 123 00:06:11,750 --> 00:06:15,090 som din främsta och sedan att samtal en annan funktion, har det 124 00:06:15,090 --> 00:06:16,520 någon form av stapeln. 125 00:06:16,520 --> 00:06:19,910 Så gängor kräver också en helt separat stapel som 126 00:06:19,910 --> 00:06:21,220 kan vara ganska stora. 127 00:06:21,220 --> 00:06:25,170 Och om du kan tänka dig att ha massor av användare på din webbplats, skulle du ha 128 00:06:25,170 --> 00:06:26,280 en massa olika trådar. 129 00:06:26,280 --> 00:06:28,230 Det är en hel del högar med hantera och underhålla. 130 00:06:28,230 --> 00:06:31,280 Så det är stor minnesförbrukning. 131 00:06:31,280 --> 00:06:35,650 >> Och sedan, också, låt oss säga att du bara har en processor, eller låt oss säga att du har 132 00:06:35,650 --> 00:06:38,460 fler ämnen än vad du har dessa multicores. 133 00:06:38,460 --> 00:06:38,730 Rätt? 134 00:06:38,730 --> 00:06:43,280 Så låt oss säga att du hade 10 trådar och du bara hade fem processorer. 135 00:06:43,280 --> 00:06:46,260 Du slags måste göra denna sak där du växlar mellan aktuell 136 00:06:46,260 --> 00:06:49,090 en som körs för att du kan inte köra alla 10 på en gång. 137 00:06:49,090 --> 00:06:50,980 Och det kallas ett sammanhang switch. 138 00:06:50,980 --> 00:06:54,260 Och det ordet har faktiskt ett par olika sammanhang, men låt oss bara 139 00:06:54,260 --> 00:06:56,620 se det som att byta mellan två trådar. 140 00:06:56,620 --> 00:06:59,730 Det kan vara ganska dyrt eftersom i princip vad du behöver göra är att du 141 00:06:59,730 --> 00:07:03,340 måste sluta vad du gör, spara tillståndet i det rinnande tråd, och 142 00:07:03,340 --> 00:07:05,440 sedan byta till någon annanstans. 143 00:07:05,440 --> 00:07:09,420 >> Så gör alla slags ser motivation varför trådar och 144 00:07:09,420 --> 00:07:12,030 processer kan vara lite klumpig? 145 00:07:12,030 --> 00:07:13,840 Och har du en fråga? 146 00:07:13,840 --> 00:07:14,376 OK. 147 00:07:14,376 --> 00:07:15,070 Cool. 148 00:07:15,070 --> 00:07:18,090 Någon som har några frågor? 149 00:07:18,090 --> 00:07:19,620 OK. 150 00:07:19,620 --> 00:07:26,720 >> Så om vi tar ett steg tillbaka för en andra, Det är ungefär som en 151 00:07:26,720 --> 00:07:30,350 iakttagelse som vi kan göra om mycket av webbapplikationer. 152 00:07:30,350 --> 00:07:34,810 Och det är verkligen att en hel del av dem egentligen inte gör så mycket nytta 153 00:07:34,810 --> 00:07:37,140 arbeta inuti av en gänga. 154 00:07:37,140 --> 00:07:41,170 Så har någon börjat på P satt sju alls? 155 00:07:41,170 --> 00:07:45,650 Så vill du kanske beskriva vissa av delarna? 156 00:07:45,650 --> 00:07:47,850 Har du arbetat med inloggning eller något liknande? 157 00:07:47,850 --> 00:07:49,330 >> PUBLIK: Nej. 158 00:07:49,330 --> 00:07:49,780 >> KEVIN Schmid: OK. 159 00:07:49,780 --> 00:07:50,150 Aldrig sinne. 160 00:07:50,150 --> 00:07:50,900 Ursäkta. 161 00:07:50,900 --> 00:07:55,790 Men i grund och botten, i P-set, du kommer att göra en massa slags 162 00:07:55,790 --> 00:07:59,760 frågor till en databas för att få lite information från databasen. 163 00:07:59,760 --> 00:08:03,330 Och vad din kod kommer att göra, vad som Apache process eller 164 00:08:03,330 --> 00:08:06,030 att Apache tråd kommer att göra samtidigt som den har att kontakta 165 00:08:06,030 --> 00:08:08,990 Databasen är det slags att vara sitter där och det kommer att bli 166 00:08:08,990 --> 00:08:12,130 väntar på databasen för att svara. 167 00:08:12,130 --> 00:08:16,290 >> Nu kanske inte låter som så stor hantera eftersom databasen på 168 00:08:16,290 --> 00:08:18,240 CS50 apparaten, eller hur? 169 00:08:18,240 --> 00:08:22,930 Men det finns någon form av nätverk latens där eftersom nu på webben 170 00:08:22,930 --> 00:08:26,830 server måste avge sin egen begäran databasen för att kommunicera med 171 00:08:26,830 --> 00:08:29,520 databas och sedan få det information tillbaka. 172 00:08:29,520 --> 00:08:33,190 Så nu är det som väl vänta på mig, jag är ska gå och hämta något från 173 00:08:33,190 --> 00:08:35,770 databas och sedan finns det en Många väntar på gång. 174 00:08:35,770 --> 00:08:36,870 Låter det vettigt? 175 00:08:36,870 --> 00:08:38,580 >> Och för vissa saker är det inte så illa. 176 00:08:38,580 --> 00:08:41,950 Om det bara måste, till exempel, minne, det är inte som 177 00:08:41,950 --> 00:08:44,100 hemsk I / O-latens. 178 00:08:44,100 --> 00:08:47,110 Och när jag säger, I / O-latency, vad jag är syftar på är som någon form av liknande 179 00:08:47,110 --> 00:08:48,290 input output. 180 00:08:48,290 --> 00:08:52,950 Men för att komma åt en fil på disken, som om jag ville tjäna den statiska HTML 181 00:08:52,950 --> 00:08:57,850 fil som var på min webbsida eller något liknande, jag slags måste 182 00:08:57,850 --> 00:09:02,310 stanna för lite, läsa den filen in från disken, och sedan i 183 00:09:02,310 --> 00:09:04,400 den processen jag väntar. 184 00:09:04,400 --> 00:09:06,700 Jag gör ett viktigt arbete. 185 00:09:06,700 --> 00:09:11,270 >> Detta är inte sant av allt, men det är vanliga i tillämpningar som P set 186 00:09:11,270 --> 00:09:13,960 sju och en hel del program att du inte är 187 00:09:13,960 --> 00:09:15,440 faktiskt gör mycket tänkande. 188 00:09:15,440 --> 00:09:19,090 Och när jag säger tänkande, menar jag som beräkningsarbete. 189 00:09:19,090 --> 00:09:23,270 Så beräkningsarbete kan vara något som, säg, du ville 190 00:09:23,270 --> 00:09:26,590 skriva en webbserver som just beräknats den n: te Fibonacci nummer. 191 00:09:26,590 --> 00:09:29,300 Det låter inte som en särskilt kul webbserver. 192 00:09:29,300 --> 00:09:34,220 Som om jag skulle inte förvänta sig att webbplatsen ska vara nästa Facebook, men det finns en viss 193 00:09:34,220 --> 00:09:35,610 typ av beräkningsarbete. 194 00:09:35,610 --> 00:09:39,570 >> Och du kan tänka dig att byta ut det med någon annan typ av intressant 195 00:09:39,570 --> 00:09:43,070 beräkningsarbete. 196 00:09:43,070 --> 00:09:46,050 Låt oss säga att du skrev något som beräknade graderna 197 00:09:46,050 --> 00:09:49,170 åtskillnad mellan två personer eller något liknande. 198 00:09:49,170 --> 00:09:51,860 Så det inte innebära någon form beräkning, eller hur? 199 00:09:51,860 --> 00:09:56,630 Och även då, att göra att du fortfarande har att göra en hel del väntar på kanske 200 00:09:56,630 --> 00:09:59,550 du måste fråga en databas för att se upp vem som är vän med vem eller 201 00:09:59,550 --> 00:10:00,600 något liknande. 202 00:10:00,600 --> 00:10:03,510 Så det är den typen av begrepp av beräkningsarbete. 203 00:10:03,510 --> 00:10:05,260 Låter det vettigt? 204 00:10:05,260 --> 00:10:08,258 Är det någon som har några frågor? 205 00:10:08,258 --> 00:10:11,960 >> Åh, och jag antar att jag satte chattservrar där eftersom chattservrar är typ av 206 00:10:11,960 --> 00:10:13,240 ett annat bra exempel på detta. 207 00:10:13,240 --> 00:10:15,250 En chatt-server har inte att göra mycket tänkande. 208 00:10:15,250 --> 00:10:18,350 Det har bara att vänta för människor att skicka meddelanden och sedan när 209 00:10:18,350 --> 00:10:19,800 de gör, skicka dem. 210 00:10:19,800 --> 00:10:21,050 OK? 211 00:10:21,050 --> 00:10:23,410 212 00:10:23,410 --> 00:10:28,180 >> Så bara för att sammanfatta igen, Apache och liknande webbservrar så där gaffel a 213 00:10:28,180 --> 00:10:31,470 Många trådar och processer som kan vara typ av slöseri. 214 00:10:31,470 --> 00:10:37,530 Så jag antar att den fråga som kan komma från det är behöver vi ha 215 00:10:37,530 --> 00:10:39,610 flera trådar och processer? 216 00:10:39,610 --> 00:10:41,890 Tänk om vi bara hade en? 217 00:10:41,890 --> 00:10:45,710 >> Så låt oss slags måla en bild av vad detta skulle se ut. 218 00:10:45,710 --> 00:10:47,810 Så låt oss använda en enda tråd. 219 00:10:47,810 --> 00:10:48,660 OK? 220 00:10:48,660 --> 00:10:52,790 Så bara föreställa mig detta med en tråd. 221 00:10:52,790 --> 00:10:56,600 >> Låt oss anta att vi inte riktigt gör att mycket användbart - och när jag säger 222 00:10:56,600 --> 00:10:59,450 användbar, menar jag beräkningsarbete - 223 00:10:59,450 --> 00:11:01,130 i de flera trådar innan. 224 00:11:01,130 --> 00:11:04,180 Så låt oss slags konsolidera allt i en tråd. 225 00:11:04,180 --> 00:11:07,780 Så vad händer om vi hade en tråd som slag av bara går runt i en slinga och 226 00:11:07,780 --> 00:11:10,880 ständigt kontroller gjorde något ny hända. 227 00:11:10,880 --> 00:11:15,130 Så till exempel, något nytt har hänt kan betyda Jag fick något tillbaka från 228 00:11:15,130 --> 00:11:19,310 databasen, eller någon skickade mig en ny HTTP-begäran. 229 00:11:19,310 --> 00:11:22,290 Så de är typ av händelser att hända, eller hur? 230 00:11:22,290 --> 00:11:26,130 >> Och vad jag kan göra när de nya saker händer är i samma tråd 231 00:11:26,130 --> 00:11:30,120 om verkställighet, denna enda tråd av utförande, kan jag ringa någon kod som 232 00:11:30,120 --> 00:11:32,410 skulle hantera just den saken. 233 00:11:32,410 --> 00:11:36,640 Så till exempel, om jag fick något tillbaka från databasen, kan jag köra min 234 00:11:36,640 --> 00:11:40,960 liten beräknings del av det som faktiskt bara förbereder sak att 235 00:11:40,960 --> 00:11:42,620 skicka tillbaka till användaren. 236 00:11:42,620 --> 00:11:46,710 Det gör den typen av vettigt? 237 00:11:46,710 --> 00:11:49,940 >> Men vad är egentligen den konsekvenserna av detta? 238 00:11:49,940 --> 00:11:50,660 Rätt? 239 00:11:50,660 --> 00:11:53,730 Eftersom vi har skrivit en hel del kod som - 240 00:11:53,730 --> 00:11:58,330 och jag ska bara hoppa framåt i bilderna om det är OK. 241 00:11:58,330 --> 00:12:00,930 Så om du inte har något emot, jag är bara kommer att ta ett steg tillbaka. 242 00:12:00,930 --> 00:12:03,410 Så denna typ av sak är kallas en händelse slinga. 243 00:12:03,410 --> 00:12:04,070 OK? 244 00:12:04,070 --> 00:12:07,240 Och det är lite av den grundläggande Tanken bakom Node.js. 245 00:12:07,240 --> 00:12:11,240 >> Så vad Node.js egentligen gör som en webbsida server är att det finns en enda tråd 246 00:12:11,240 --> 00:12:14,850 som är i princip gå runt i en slinga som en stund ett slags enligt 247 00:12:14,850 --> 00:12:18,510 huven på Node.js som är ständigt kontroll, vi får nya saker? 248 00:12:18,510 --> 00:12:22,720 Och då kommer den att köra truck att du ställer upp. 249 00:12:22,720 --> 00:12:26,720 Men en bra fråga att ställa är, hur kan vi göra detta 250 00:12:26,720 --> 00:12:28,090 med befintliga saker? 251 00:12:28,090 --> 00:12:32,440 >> Så jag satte en rad av C-kod här att i princip ser ut som det öppnar en 252 00:12:32,440 --> 00:12:33,060 fil, eller hur? 253 00:12:33,060 --> 00:12:36,090 Jag Hon bara kom ut med ett album. 254 00:12:36,090 --> 00:12:39,600 Så jag var tvungen att öppna henne en ny fil. 255 00:12:39,600 --> 00:12:43,810 Så hur vår C-kod för drift - 256 00:12:43,810 --> 00:12:47,890 och jag antar att anledningen till att jag valde filer var eftersom det är typ av i vilken utsträckning 257 00:12:47,890 --> 00:12:52,000 av I / O-arbete som vi har gjort i C i en känsla av att det finns input output. 258 00:12:52,000 --> 00:12:55,070 Vi kallar denna kod som gör detta f öppen. 259 00:12:55,070 --> 00:12:59,370 Och sedan på nästa rad i vår program, kan vi nu arbeta med f.. 260 00:12:59,370 --> 00:13:02,710 >> Så det här skulle vara ett exempel på något det är som synkron eller 261 00:13:02,710 --> 00:13:06,850 blockering på grund på den första raden där vi väntar tills vi 262 00:13:06,850 --> 00:13:08,110 få filen öppen. 263 00:13:08,110 --> 00:13:12,260 Så på den andra raden, vi vet att vi kan arbeta med f, men detta innebär att 264 00:13:12,260 --> 00:13:16,240 den andra raden kan inte riktigt köra tills den första raden är klar. 265 00:13:16,240 --> 00:13:17,760 Låter det vettigt? 266 00:13:17,760 --> 00:13:20,890 >> Så det här skulle vara dåligt att sätta i en händelsehanterare. 267 00:13:20,890 --> 00:13:23,920 Och anledningen till det är att denna typ av väntetider, eller hur? 268 00:13:23,920 --> 00:13:26,500 Så detta skulle återgå oss tillbaka till samma sak. 269 00:13:26,500 --> 00:13:29,470 Och nu har vi inte ens skulle ha Fördelen med flera trådar eller 270 00:13:29,470 --> 00:13:32,390 processer för att vi fick en tråd i Node.js. 271 00:13:32,390 --> 00:13:35,496 Är det vettigt att alla? 272 00:13:35,496 --> 00:13:35,990 >> PUBLIK: Vänta. 273 00:13:35,990 --> 00:13:36,980 Så vad är ersättare? 274 00:13:36,980 --> 00:13:37,840 >> KEVIN Schmid: Åh, så ja. 275 00:13:37,840 --> 00:13:39,560 Så jag kommer att komma till ersättare. 276 00:13:39,560 --> 00:13:40,430 OK. 277 00:13:40,430 --> 00:13:42,960 Så vad händer om vi hade något som såg ut så här? 278 00:13:42,960 --> 00:13:45,730 Så vad händer om nu jag redigerade f öppna lite? 279 00:13:45,730 --> 00:13:48,370 Så jag går i samma två argument som tidigare. 280 00:13:48,370 --> 00:13:52,610 Jag älskar fortfarande den nya låten att hon kom ut med. 281 00:13:52,610 --> 00:13:57,260 Men jag passerar en tredje sak som är denna variabel som heter kod. 282 00:13:57,260 --> 00:14:02,280 >> Men vad är koden faktiskt i detta sammanhang? 283 00:14:02,280 --> 00:14:05,360 Är det som en vanlig C-variabel? 284 00:14:05,360 --> 00:14:06,740 Det är en funktion, eller hur? 285 00:14:06,740 --> 00:14:09,450 Och det kan vara lite konstigt eftersom Jag är faktiskt som nu passerar en 286 00:14:09,450 --> 00:14:12,320 fungera i en annan funktion. 287 00:14:12,320 --> 00:14:14,400 >> Så ett par saker att notera om detta. 288 00:14:14,400 --> 00:14:17,145 Ett, jag faktiskt inte ringa koden fungerar. 289 00:14:17,145 --> 00:14:20,650 Så du inte ser koden med vänster paren, rätt föräldra. 290 00:14:20,650 --> 00:14:23,010 Jag bara passerar i kod. 291 00:14:23,010 --> 00:14:26,990 Och i C, vad detta skulle faktiskt göra är att ge mig en pekare till det faktiska 292 00:14:26,990 --> 00:14:29,740 kod, och då detta skulle kunna köra den. 293 00:14:29,740 --> 00:14:33,350 Men bara tänka på det som du är passerar kod körs när 294 00:14:33,350 --> 00:14:35,150 att filen öppnas. 295 00:14:35,150 --> 00:14:41,430 >> Men vad det betyder är att nu Resten av mitt program som kan göra 296 00:14:41,430 --> 00:14:47,050 andra saker, kan fortsätta att göra andra grejer medan vi, inte riktigt vänta, men 297 00:14:47,050 --> 00:14:50,890 bara har på baksidan av huvudet som När filen är öppen, kör som 298 00:14:50,890 --> 00:14:52,130 kod på toppen. 299 00:14:52,130 --> 00:14:53,390 Låter det vettigt? 300 00:14:53,390 --> 00:14:58,060 >> Och nu tanken bakom Node.js är att koden i göra-grejer med f 301 00:14:58,060 --> 00:15:04,590 del bör vara ganska kort och enkel och rättfram och inte riktigt vara 302 00:15:04,590 --> 00:15:06,160 mycket beräkningsintensiv. 303 00:15:06,160 --> 00:15:09,390 Det kan ha att öppna en annan fil, men det bör också vara ganska snabb 304 00:15:09,390 --> 00:15:14,710 eftersom det skulle bara säga göra en f öppna och sedan kalla detta annan kod. 305 00:15:14,710 --> 00:15:19,100 >> Så bara för att vara helt klar, den f Öppna som gör den nya Katy Perry sång 306 00:15:19,100 --> 00:15:23,060 gjort mp3, det kommer att ganska mycket tillbaka omedelbart. 307 00:15:23,060 --> 00:15:27,820 Och då kan vi bara fortsätta att göra andra saker eftersom allt som nu f 308 00:15:27,820 --> 00:15:33,410 öppen inbjudan gör är att berätta i stort sett underliggande f öppen kod öppna filen 309 00:15:33,410 --> 00:15:36,020 och när du är klar öppnar detta fil eller när du får tillbaka den, 310 00:15:36,020 --> 00:15:37,480 sedan köra koden. 311 00:15:37,480 --> 00:15:39,540 Men det gör faktiskt inte köra den koden. 312 00:15:39,540 --> 00:15:41,815 Och du hade en fråga? 313 00:15:41,815 --> 00:15:46,180 >> PUBLIK: Du verkade antyda några gånger att lägga beräknings 314 00:15:46,180 --> 00:15:50,545 intensiv kod slags bryta [OHÖRBAR] drivet system. 315 00:15:50,545 --> 00:15:51,795 [OHÖRBAR]? 316 00:15:51,795 --> 00:15:54,450 317 00:15:54,450 --> 00:15:55,290 >> KEVIN SCHMID: Det är en bra fråga. 318 00:15:55,290 --> 00:15:59,280 Så jag har faktiskt ett exempel på hur du kan integrera beräknings 319 00:15:59,280 --> 00:16:01,090 intensiv kod i en liten bit. 320 00:16:01,090 --> 00:16:03,620 Så när vi kommer till kodexempel, Jag ska se till att dra den. 321 00:16:03,620 --> 00:16:04,700 Är det OK? 322 00:16:04,700 --> 00:16:05,950 Tack. 323 00:16:05,950 --> 00:16:07,690 324 00:16:07,690 --> 00:16:08,750 >> Vad var ditt namn? 325 00:16:08,750 --> 00:16:10,620 >> PUBLIK: Aaron. 326 00:16:10,620 --> 00:16:14,830 >> KEVIN SCHMID: Aaron tar upp en mycket bra poäng, vilket är att om jag hade 327 00:16:14,830 --> 00:16:18,560 vissa beräkningsintensiva koden i att göra saker med f delen, resten av 328 00:16:18,560 --> 00:16:22,880 mitt program kan inte köras och kan inte lyssna för nya ansökningar eller något tills alla 329 00:16:22,880 --> 00:16:24,270 det där är klart. 330 00:16:24,270 --> 00:16:27,390 Så om jag skriver Node kod i allmänhet om vi inte gör något som jag ska 331 00:16:27,390 --> 00:16:33,060 att föreslå senare när vi tittar på kodexempel, jag måste vara säker på att 332 00:16:33,060 --> 00:16:36,060 min kod inte binda upp denna händelse slinga. 333 00:16:36,060 --> 00:16:38,120 Låter det vettigt? 334 00:16:38,120 --> 00:16:38,350 OK. 335 00:16:38,350 --> 00:16:40,040 Cool. 336 00:16:40,040 --> 00:16:47,090 >> Så Node.js erbjuder denna ram som du kan bygga dessa händelsestyrda 337 00:16:47,090 --> 00:16:48,210 servrar med. 338 00:16:48,210 --> 00:16:53,460 Så det har denna typ av asynkron icke-blockerande I / O-bibliotek, medan 339 00:16:53,460 --> 00:16:56,800 de vanliga C-bibliotek som vi har varit arbetar med, som om du bara 340 00:16:56,800 --> 00:16:59,500 använda dem på samma sätt som vi har använt dem med f öppnas och 341 00:16:59,500 --> 00:17:03,000 grejer, de som blockerar eftersom du faktiskt har att vänta på 342 00:17:03,000 --> 00:17:04,470 den fil som ska öppnas. 343 00:17:04,470 --> 00:17:09,290 >> Men Node.js ger dig det och det princip knyter i Googles V8 344 00:17:09,290 --> 00:17:14,030 JavaScript-motor, som är anledningen till att Chrome är så snabb vid bearbetning 345 00:17:14,030 --> 00:17:17,040 JavaScript eftersom det har denna V8-motor. 346 00:17:17,040 --> 00:17:22,460 Så jag vet att det låter som en av de WWDC utvecklare konferenser sak 347 00:17:22,460 --> 00:17:25,390 där de bara kasta en massa av brev antal saker för processorer 348 00:17:25,390 --> 00:17:26,910 och säger att det här är så coolt. 349 00:17:26,910 --> 00:17:34,200 Men det är coolt att de gjorde detta eftersom JavaScript - 350 00:17:34,200 --> 00:17:37,010 eller kanske om du inte är bekant med JavaScript än eftersom vi inte har haft 351 00:17:37,010 --> 00:17:38,180 föreläsningarna på det - 352 00:17:38,180 --> 00:17:40,770 men JavaScript är ett tolkat språk. 353 00:17:40,770 --> 00:17:41,970 >> Och detta är en viktig punkt också. 354 00:17:41,970 --> 00:17:45,790 Så det är viktigt för vår servrar att vara snabb, eller hur? 355 00:17:45,790 --> 00:17:49,970 Och om vi bara kör JavaScript kod som tolkades med bara 356 00:17:49,970 --> 00:17:52,130 alla gamla tolk kan det vara långsam. 357 00:17:52,130 --> 00:17:55,980 Så Node fördelar av att ha detta supersnabb V8 tolk. 358 00:17:55,980 --> 00:17:59,580 Och jag vet inte om de heter det eftersom V8 slag i pannan 359 00:17:59,580 --> 00:18:01,110 sak, men OK. 360 00:18:01,110 --> 00:18:07,070 >> Så jag har förberett några exempel på denna webbadress. 361 00:18:07,070 --> 00:18:10,490 Efter seminariet, jag slags gå till tala om hur du kan få Node set 362 00:18:10,490 --> 00:18:13,570 upp, men för nu, jag bara typ av vill att gå igenom några kodexempel. 363 00:18:13,570 --> 00:18:17,250 Så om du vill följa med, hela källkoden finns tillgänglig där. 364 00:18:17,250 --> 00:18:18,720 OK? 365 00:18:18,720 --> 00:18:22,280 >> Så jag lämnar denna URL upp för lite. 366 00:18:22,280 --> 00:18:24,440 Och då jag ska bara växla in i terminalen. 367 00:18:24,440 --> 00:18:29,670 368 00:18:29,670 --> 00:18:34,400 Är alla bra med denna URL? 369 00:18:34,400 --> 00:18:37,990 Så jag kommer att gå över till min terminal här. 370 00:18:37,990 --> 00:18:42,030 >> Så här är den kod som Jag har för idag. 371 00:18:42,030 --> 00:18:43,960 Varför gör vi inte börjar med simpler.js fil? 372 00:18:43,960 --> 00:18:49,110 373 00:18:49,110 --> 00:18:52,100 Den andra saken är att allt detta kod ska skrivas i 374 00:18:52,100 --> 00:18:56,660 JavaScript som du kan eller kanske inte är bekant med. 375 00:18:56,660 --> 00:19:00,170 Jag antar att ett par saker är att en hel del JavaScript-kod är den typ av 376 00:19:00,170 --> 00:19:04,000 syntax och struktur är mycket lik C, så du kan slags plocka upp det som 377 00:19:04,000 --> 00:19:05,020 du går längs. 378 00:19:05,020 --> 00:19:08,750 Jag har försökt att skriva en hel del av start kod för detta på ett sätt som är 379 00:19:08,750 --> 00:19:11,230 liknar C så att det är lite mer lättläst. 380 00:19:11,230 --> 00:19:15,980 Men som vi framsteg, jag ska vara visar några av de ytterligare 381 00:19:15,980 --> 00:19:18,980 funktioner i JavaScript som är ganska häftigt. 382 00:19:18,980 --> 00:19:21,510 >> Men låt oss titta på det här provprogram. 383 00:19:21,510 --> 00:19:24,820 Jag antar att allt är avskuren där. 384 00:19:24,820 --> 00:19:28,500 Jag ska bara fixa det verkliga snabbt om det är OK eller inte. 385 00:19:28,500 --> 00:19:31,400 Jag vet inte vad detta kommer att göra. 386 00:19:31,400 --> 00:19:34,660 Är det lite bättre? 387 00:19:34,660 --> 00:19:36,510 Kan du se var och grejer? 388 00:19:36,510 --> 00:19:39,320 OK. 389 00:19:39,320 --> 00:19:44,120 >> Så den första raden är som JavaScript version av en variabel 390 00:19:44,120 --> 00:19:44,800 deklaration. 391 00:19:44,800 --> 00:19:49,870 Så bara för att belysa vad detta skulle se ut i C. Så det här är precis som 392 00:19:49,870 --> 00:19:52,620 mig att säga index lika med tre eller något liknande. 393 00:19:52,620 --> 00:19:55,740 Så jag inte ange vilken typ. 394 00:19:55,740 --> 00:20:00,780 JavaScript har typer, men det är mycket dynamiskt skrivit i naturen, så 395 00:20:00,780 --> 00:20:02,580 gav inte någon form av typ på det. 396 00:20:02,580 --> 00:20:03,670 Så det har bara var. 397 00:20:03,670 --> 00:20:05,320 Det är som variabel. 398 00:20:05,320 --> 00:20:05,920 OK? 399 00:20:05,920 --> 00:20:08,340 >> Och jag ringer denna variabel HTTP. 400 00:20:08,340 --> 00:20:12,480 Och på min högra sida, jag har uttryck som jag vill sätta i HTTP. 401 00:20:12,480 --> 00:20:14,960 Och detta säger kräver HTTP. 402 00:20:14,960 --> 00:20:18,500 Så det här är ganska lik inkludera. 403 00:20:18,500 --> 00:20:22,940 Det är lite mer som kraftfull än inkluderar i den meningen att inkludera 404 00:20:22,940 --> 00:20:26,100 skulle bara kopiera och klistra in huvudet filen för funktionsprototyper eller 405 00:20:26,100 --> 00:20:27,930 vad med typ definitioner. 406 00:20:27,930 --> 00:20:30,590 Men kräver faktiskt går att få oss koden. 407 00:20:30,590 --> 00:20:33,280 >> Så du kan se det som importerar lite kod. 408 00:20:33,280 --> 00:20:37,960 Så någonstans i Node.js modul systemet eller vad, de har allt detta 409 00:20:37,960 --> 00:20:40,790 HTTP-serverkoden så jag är bara hämta det för min egen 410 00:20:40,790 --> 00:20:43,130 personligt bruk i detta program. 411 00:20:43,130 --> 00:20:44,260 OK? 412 00:20:44,260 --> 00:20:46,930 >> Så då jag har denna funktion som jag har skrivit. 413 00:20:46,930 --> 00:20:50,330 Och märker jag behövde inte ange returtypen eller typen av 414 00:20:50,330 --> 00:20:51,140 argumenten igen. 415 00:20:51,140 --> 00:20:54,440 Så slags lös skrivit i den typen av känsla. 416 00:20:54,440 --> 00:20:57,290 Två argument som det tar in, begäran och svar. 417 00:20:57,290 --> 00:21:02,080 Så det är begreppsmässigt ungefär som bekant från den bild som vi hade 418 00:21:02,080 --> 00:21:05,280 på skärmen innan eftersom vi får denna begäran som vi 419 00:21:05,280 --> 00:21:06,410 har från användaren. 420 00:21:06,410 --> 00:21:09,170 Och sedan har vi ett svar som Vi kan skriva saker till. 421 00:21:09,170 --> 00:21:15,060 >> Så den första raden i detta gör res.writeHead 200 och sedan detta 422 00:21:15,060 --> 00:21:17,070 innehållstypen text plain. 423 00:21:17,070 --> 00:21:19,300 Så låt oss pussla detta isär lite. 424 00:21:19,300 --> 00:21:22,340 Så låt oss bara fokusera på res.write för lite. 425 00:21:22,340 --> 00:21:28,420 Så skriver är i grund och botten, och skriva huvudet, är bara olika sätt att sorts skriva ut 426 00:21:28,420 --> 00:21:29,960 saker till svaret. 427 00:21:29,960 --> 00:21:30,770 OK? 428 00:21:30,770 --> 00:21:36,230 Så skriv huvudet, om någon kommer ihåg från HTTP-föreläsning, gör ni 429 00:21:36,230 --> 00:21:39,940 minns rubriker på toppen av HTTP sak? 430 00:21:39,940 --> 00:21:43,580 Så varför jag inte demo bara headers riktigt snabbt. 431 00:21:43,580 --> 00:21:44,640 Skulle det vara till hjälp? 432 00:21:44,640 --> 00:21:45,500 Eller ska vi bara sorts - 433 00:21:45,500 --> 00:21:46,070 OK. 434 00:21:46,070 --> 00:21:46,740 Visst. 435 00:21:46,740 --> 00:21:52,340 >> Så när webbläsaren går till google.com eller något liknande, 436 00:21:52,340 --> 00:21:54,250 det finns faktiskt lite mer - 437 00:21:54,250 --> 00:21:55,380 detta är som en hemlighet - 438 00:21:55,380 --> 00:21:58,340 Det är som en lite mer information som kommer genom röret än bara 439 00:21:58,340 --> 00:22:00,180 den liten sökning och allt. 440 00:22:00,180 --> 00:22:03,550 Så visa det här, jag ska att använda ett program som heter Curl. 441 00:22:03,550 --> 00:22:04,260 OK? 442 00:22:04,260 --> 00:22:08,020 Så detta är något som du kan köra på ditt kommando Mac OSX linje eller i 443 00:22:08,020 --> 00:22:09,830 apparat eller något annat. 444 00:22:09,830 --> 00:22:17,050 Och så om jag Curl HTTP google.com, Jag kommer att se HTML. 445 00:22:17,050 --> 00:22:21,230 Och detta är, i rättvisans namn, precis HTML den sortens säger åt dig att 446 00:22:21,230 --> 00:22:24,695 omdirigera till www om din webbläsare inte automatiskt hantera 447 00:22:24,695 --> 00:22:27,110 omdirigering. 448 00:22:27,110 --> 00:22:33,390 >> Så det här är bara HTML, men jag ska att lägga till Curl detta bindestreck flaggar jag. 449 00:22:33,390 --> 00:22:33,600 OK? 450 00:22:33,600 --> 00:22:35,600 Och detta kommer att visa mig rubrikerna. 451 00:22:35,600 --> 00:22:40,640 Så detta är också information som kommer igenom när jag får detta svar. 452 00:22:40,640 --> 00:22:41,260 OK? 453 00:22:41,260 --> 00:22:45,320 >> Så högst upp, ser du det här HTTP 301 flytta permanent. 454 00:22:45,320 --> 00:22:49,470 Och det är ganska viktigt eftersom det rör sig om statuskoden. 455 00:22:49,470 --> 00:22:53,750 Så 301 här är statuskoden, vilket egentligen bara ett heltal 456 00:22:53,750 --> 00:22:57,750 som talar om för webbläsaren eller den som är läser detta, om du låtsas att 457 00:22:57,750 --> 00:23:01,460 du är en webbläsare och du ser det här, princip nu om man tittar på 458 00:23:01,460 --> 00:23:04,960 det och du ser en 301, du vet att jag har att göra något speciellt utifrån 459 00:23:04,960 --> 00:23:08,810 301, eller något speciellt hände baserad på 301. 460 00:23:08,810 --> 00:23:12,640 Så det säger flyttat permanent. 461 00:23:12,640 --> 00:23:17,700 >> Och sedan, i princip, har vi ett gäng nyckelpar värde. 462 00:23:17,700 --> 00:23:22,100 Så vi får plats är www.google.com. 463 00:23:22,100 --> 00:23:25,190 Och sedan typ av allt det här andra grejer, men i grund och botten, vad platsen är 464 00:23:25,190 --> 00:23:29,662 säger är den nya platsen är på www.google.com. 465 00:23:29,662 --> 00:23:33,800 Så nu om du går till google.com, kommer du slags se webbläsarens typ av blink 466 00:23:33,800 --> 00:23:38,770 för en sekund och sedan omdirigera dig tillbaka till www.google.com. 467 00:23:38,770 --> 00:23:41,840 Så svaren kan innehålla dessa rubriker. 468 00:23:41,840 --> 00:23:43,330 >> Och ett par saker att påpeka. 469 00:23:43,330 --> 00:23:46,890 Så låt oss säga att vi var verkligen lyckat i att besöka en webbsida. 470 00:23:46,890 --> 00:23:49,040 Så låt mig gå till - 471 00:23:49,040 --> 00:23:51,080 vad är en bra hemsida? 472 00:23:51,080 --> 00:23:53,285 Jag är dålig på att tänka på bra webbplatser på plats. 473 00:23:53,285 --> 00:23:53,640 >> PUBLIK: Wikipedia. 474 00:23:53,640 --> 00:23:54,160 >> KEVIN Schmid: OK. 475 00:23:54,160 --> 00:23:56,040 Låt oss göra Wikipedia. 476 00:23:56,040 --> 00:23:58,680 Så här jag blev rörd. 477 00:23:58,680 --> 00:23:59,240 Åh vänta. 478 00:23:59,240 --> 00:24:00,160 Var jag? 479 00:24:00,160 --> 00:24:00,890 Ja, det var jag. 480 00:24:00,890 --> 00:24:01,100 OK. 481 00:24:01,100 --> 00:24:03,005 Så jag fick göra www. 482 00:24:03,005 --> 00:24:06,006 Så jag ska göra www. 483 00:24:06,006 --> 00:24:09,680 Och som ni kan se, här är all HTML att webbläsaren skulle bearbeta 484 00:24:09,680 --> 00:24:10,910 för Wikipedia. 485 00:24:10,910 --> 00:24:14,055 >> Men om jag fortsätter att rulla upp här, vad jag ser i toppen - 486 00:24:14,055 --> 00:24:17,800 wow, det finns en hel del HTML på Wikipedia - 487 00:24:17,800 --> 00:24:22,550 men vad jag kan se i toppen här är detta 200 statuskod som motståndare till 488 00:24:22,550 --> 00:24:24,570 301 som jag såg tidigare. 489 00:24:24,570 --> 00:24:27,100 Och märker att det har en fin vänlig OK bredvid den. 490 00:24:27,100 --> 00:24:29,470 Så det här är som den goda statuskod. 491 00:24:29,470 --> 00:24:31,160 >> Betyder det 200 nummer bekant? 492 00:24:31,160 --> 00:24:34,120 493 00:24:34,120 --> 00:24:39,880 Ja, därför att när jag gjorde simpler.js, Jag skrev en 200 där. 494 00:24:39,880 --> 00:24:43,290 Så det är i grund och botten säger berätta webbläsaren eller den som försöker få till 495 00:24:43,290 --> 00:24:45,440 detta att de var framgångsrika. 496 00:24:45,440 --> 00:24:49,040 Eller det ungefär som vi var framgångsrika också. 497 00:24:49,040 --> 00:24:54,320 >> Och det är denna typ av särskild syntax i Javascript för att förklara en 498 00:24:54,320 --> 00:24:59,870 karta över dessa tangenter som innehållstyp och dessa värden som text plain. 499 00:24:59,870 --> 00:25:03,780 Så om du tittar på det svar som vi kom tillbaka från Wikipedia innan, - 500 00:25:03,780 --> 00:25:06,200 Jag ska försöka att rulla upp lite snabbare - 501 00:25:06,200 --> 00:25:09,900 du har dessa nycklar som servern och dessa värden Apache. 502 00:25:09,900 --> 00:25:12,120 Så du har fått nycklar och värden. 503 00:25:12,120 --> 00:25:15,930 Och du kan ange detta i Nod vad att skicka tillbaka. 504 00:25:15,930 --> 00:25:19,380 >> Så det här är faktiskt ganska, i vissa sätt, och på vissa sätt är det inte 505 00:25:19,380 --> 00:25:23,170 egentligen, men det är lite lägre nivå än den PHP-kod som du kan vara 506 00:25:23,170 --> 00:25:26,980 skriva för P satt sju eftersom PHP och Apache sorts ta hand om några 507 00:25:26,980 --> 00:25:28,150 av dessa saker för dig. 508 00:25:28,150 --> 00:25:32,520 I PHP, kan du åsidosätta standard beteende genom att skriva egna rubriker. 509 00:25:32,520 --> 00:25:35,520 Men för tillämpningen av denna, får vi för att skriva ut våra egna huvuden. 510 00:25:35,520 --> 00:25:38,210 511 00:25:38,210 --> 00:25:41,105 >> Så gör den linjen vettigt att alla, skrivhuvudlinjen? 512 00:25:41,105 --> 00:25:41,380 OK. 513 00:25:41,380 --> 00:25:42,280 Awesome. 514 00:25:42,280 --> 00:25:45,870 >> Så vad jag gör är att jag avslutar svaret genom att säga hej världen. 515 00:25:45,870 --> 00:25:47,040 OK. 516 00:25:47,040 --> 00:25:49,920 Men det är bara en funktion kallad begäran handler. 517 00:25:49,920 --> 00:25:53,510 Så nu har jag faktiskt måste slags göra något med den här funktionen, eller hur? 518 00:25:53,510 --> 00:25:59,170 >> Så här det jag gör är att det är här linje som gör var-server lika 519 00:25:59,170 --> 00:26:03,530 HTTP.create server, och sedan jag passera i begäran hanteraren. 520 00:26:03,530 --> 00:26:06,080 Så det här är typ av nod sätt att skapa en server. 521 00:26:06,080 --> 00:26:08,790 Och märker att jag passerar i begäran-hanteraren. 522 00:26:08,790 --> 00:26:12,290 Så detta är träffande createServer funktion som jag vill att du ska göra mig en 523 00:26:12,290 --> 00:26:16,270 server, och när servern tar emot ett svar, jag vill att du ringer det här 524 00:26:16,270 --> 00:26:18,680 begära hanterarfunktionen. 525 00:26:18,680 --> 00:26:18,990 OK? 526 00:26:18,990 --> 00:26:22,290 >> Så att linje ganska mycket avslutar direkt. 527 00:26:22,290 --> 00:26:28,780 Så det var serverlinjen är gjort rätt efter att du gör det ganska mycket. 528 00:26:28,780 --> 00:26:31,770 Jag menar, det måste ställa in vissa interna tillstånd för att veta att du måste 529 00:26:31,770 --> 00:26:35,400 kallar denna begäran hanterarfunktion, men det kommer inte att sitta där och 530 00:26:35,400 --> 00:26:37,730 säg har användaren skickas mig en förfrågan ännu? 531 00:26:37,730 --> 00:26:39,270 Har användaren skickade mig en förfrågan ännu? 532 00:26:39,270 --> 00:26:40,780 Så den inte blockerar. 533 00:26:40,780 --> 00:26:41,650 OK? 534 00:26:41,650 --> 00:26:46,120 >> Så vad detta kommer att göra är det i grund och botten nu lagrar en pekare till denna kod, 535 00:26:46,120 --> 00:26:49,670 denna begäran hanterarfunktion, och sedan kommer att köra den koden när någon 536 00:26:49,670 --> 00:26:52,170 gör en förfrågan. 537 00:26:52,170 --> 00:26:54,120 Och sedan gör vi server.listen. 538 00:26:54,120 --> 00:26:56,950 539 00:26:56,950 --> 00:26:59,960 >> I 1337 finns det ganska godtyckligt. 540 00:26:59,960 --> 00:27:02,285 Jag hade ingen särskild anledning för att plocka det numret. 541 00:27:02,285 --> 00:27:03,860 Det var helt slumpmässigt. 542 00:27:03,860 --> 00:27:07,010 Men som bara anger porten. 543 00:27:07,010 --> 00:27:10,640 Så de flesta webbservrar så ser du att de använda port 80, eftersom det är typ 544 00:27:10,640 --> 00:27:11,810 i likhet med konventionen. 545 00:27:11,810 --> 00:27:16,170 Så om jag går till något liknande, Jag vet inte, Wikipedia.org, 546 00:27:16,170 --> 00:27:17,700 och jag satte kolon 8 - 547 00:27:17,700 --> 00:27:18,610 Oh wow, du kan inte se det. 548 00:27:18,610 --> 00:27:19,370 Jag är ledsen. 549 00:27:19,370 --> 00:27:21,820 Men om jag gör Wikipedia - 550 00:27:21,820 --> 00:27:24,810 Jag skriver det här bara så att det är klart på kameran. 551 00:27:24,810 --> 00:27:29,150 Men om jag tar detta i en webbläsare med ett kolon 80, som anger att gå till 552 00:27:29,150 --> 00:27:31,430 Wikipedia.org på port 80. 553 00:27:31,430 --> 00:27:36,200 Så det är som hur USA har flera portar som var du kan skicka 554 00:27:36,200 --> 00:27:37,440 saker för sorts. 555 00:27:37,440 --> 00:27:40,730 Så det är som att gå till just denna plats på den här servern. 556 00:27:40,730 --> 00:27:40,990 OK. 557 00:27:40,990 --> 00:27:45,730 >> Så jag valde just 1337. 558 00:27:45,730 --> 00:27:47,910 Det finns en hel rad siffror att du kan välja. 559 00:27:47,910 --> 00:27:50,390 Det var inte helt speciell. 560 00:27:50,390 --> 00:27:54,560 >> Men vad jag ska göra nu är jag ska köra nod. 561 00:27:54,560 --> 00:27:59,730 Låt mig verkligen ange att ett par rader ner så att du kan se det. 562 00:27:59,730 --> 00:28:03,130 Jag kommer att göra Node, och jag är kommer att köra simpler.js. 563 00:28:03,130 --> 00:28:06,880 Och vi kommer att prata om hur man får Nod inrättades en liten bit. 564 00:28:06,880 --> 00:28:09,350 Men nu är det bara att köra på servern. 565 00:28:09,350 --> 00:28:14,360 >> Så en sak som vi kan prova som inte får vara så spännande är att vi faktiskt kan 566 00:28:14,360 --> 00:28:16,300 försöker komma åt den i Curl. 567 00:28:16,300 --> 00:28:20,680 Så jag kan göra Curl, och min Maskinen är lokala värden. 568 00:28:20,680 --> 00:28:24,600 Du ser också denna skriftliga så här ibland. 569 00:28:24,600 --> 00:28:29,810 Lokal värd och 127.0.0.1 är snäll av som din hemdator. 570 00:28:29,810 --> 00:28:33,180 Så det är som att prata med din egen dator. 571 00:28:33,180 --> 00:28:33,760 OK. 572 00:28:33,760 --> 00:28:36,030 >> Och då kan jag säga 1337. 573 00:28:36,030 --> 00:28:39,630 Så om jag kör denna rad kod, den säger hallå världen. 574 00:28:39,630 --> 00:28:44,050 Och om jag ville se det där som hade innehållstyp text vanligt eller 575 00:28:44,050 --> 00:28:46,560 vad som helst, jag kan till och med sätta detta här. 576 00:28:46,560 --> 00:28:48,810 Och märker att det står OK. 577 00:28:48,810 --> 00:28:50,810 Och jag har text plain. 578 00:28:50,810 --> 00:28:53,140 Och så är det typ av allt det här andra saker som Node kommer att lägga in 579 00:28:53,140 --> 00:28:54,440 där för mig. 580 00:28:54,440 --> 00:28:55,700 Det är inte super viktigt. 581 00:28:55,700 --> 00:28:58,230 >> Jag menar, det finns någon form av teknisk aspekter på som är snäll 582 00:28:58,230 --> 00:29:02,280 coolt att prata om, men bara för att visa du, jag har också befogenhet att 583 00:29:02,280 --> 00:29:03,070 ändra dessa runt. 584 00:29:03,070 --> 00:29:06,280 Så jag kan bara lägga till ett gäng av sånt. 585 00:29:06,280 --> 00:29:11,780 Och så nu, om jag tittar i min utgång, kommer det att vara så. 586 00:29:11,780 --> 00:29:19,740 Så dessa rubriker gör vissa saker till webbläsare och sådana saker. 587 00:29:19,740 --> 00:29:23,040 >> Och rubriker kan i princip säga en webbläsare hur man ska reagera på någonting. 588 00:29:23,040 --> 00:29:26,280 Om du någonsin har hört talas om cookies innan, eller om du någonsin har varit irriterad 589 00:29:26,280 --> 00:29:29,330 genom en webbsida inställning kakor, eller aktiverat cookie-block eller 590 00:29:29,330 --> 00:29:30,320 något liknande. 591 00:29:30,320 --> 00:29:33,040 Du kan faktiskt ställa cookies i dessa huvuden. 592 00:29:33,040 --> 00:29:36,990 Så de berättar en webbläsare hur man beteende i vissa fall. 593 00:29:36,990 --> 00:29:37,750 OK. 594 00:29:37,750 --> 00:29:40,310 >> Så det var simpler.js. 595 00:29:40,310 --> 00:29:42,780 Är det någon som har några frågor på att källkoden filen? 596 00:29:42,780 --> 00:29:45,420 597 00:29:45,420 --> 00:29:45,610 OK. 598 00:29:45,610 --> 00:29:46,490 Cool. 599 00:29:46,490 --> 00:29:50,780 >> Så låt oss ta bort r från det och titta på simple.js. 600 00:29:50,780 --> 00:29:53,010 Så det här är ganska mycket samma program. 601 00:29:53,010 --> 00:29:56,030 Jag bara skrev det lite annorlunda eftersom jag ville att sortera på markeringen 602 00:29:56,030 --> 00:29:57,850 vissa funktioner i JavaScript. 603 00:29:57,850 --> 00:30:03,880 >> Så märker att begäran-hanteraren Funktionen har helt försvunnit. 604 00:30:03,880 --> 00:30:05,800 Oh ja, fick du en fråga? 605 00:30:05,800 --> 00:30:08,200 >> Publik: Ja, argumenten som bringas att passera till det 606 00:30:08,200 --> 00:30:10,120 funktion, vad är de? 607 00:30:10,120 --> 00:30:12,050 >> KEVIN SCHMID: Så de är JavaScript-objekt. 608 00:30:12,050 --> 00:30:15,230 I Node.js dokumentation, det princip säger vilka metoder är 609 00:30:15,230 --> 00:30:15,910 som finns på dem. 610 00:30:15,910 --> 00:30:19,602 Vi råkar bara ha tillgång till Denna metod kallas för skrivhuvudet och slutet 611 00:30:19,602 --> 00:30:20,730 och sånt. 612 00:30:20,730 --> 00:30:22,590 Men det finns en hel drös fler metoder. 613 00:30:22,590 --> 00:30:27,670 >> Och till exempel, som en av dem särskilt på rec, kan du göra 614 00:30:27,670 --> 00:30:34,540 något liknande rec.method som kommer berätta om det är en HTTP få eller 615 00:30:34,540 --> 00:30:36,780 HTTP POST-begäran och sånt. 616 00:30:36,780 --> 00:30:39,100 Så det finns alla typer av olika egenskaper, men de är båda 617 00:30:39,100 --> 00:30:42,560 JavaScript-objekt, och de bara har funktioner knutna till dem att du 618 00:30:42,560 --> 00:30:43,850 kan skriva saker till. 619 00:30:43,850 --> 00:30:45,520 OK? 620 00:30:45,520 --> 00:30:49,030 >> Så märker att begäran handler är helt borta. 621 00:30:49,030 --> 00:30:52,650 Men den kod som jag hade i begäran handler är fortfarande där. 622 00:30:52,650 --> 00:30:56,520 Jag har fortfarande denna res.writeHead och jag har fortfarande denna res.end. 623 00:30:56,520 --> 00:31:00,270 Och vad det här är ett exempel på JavaScript är denna idé om en 624 00:31:00,270 --> 00:31:01,460 anonym funktion. 625 00:31:01,460 --> 00:31:04,180 och anonym är som ett passande namn för det eftersom det bokstavligen inte 626 00:31:04,180 --> 00:31:05,180 ha ett namn. 627 00:31:05,180 --> 00:31:07,900 Det finns ingen begäran funktion hanteraren i där. 628 00:31:07,900 --> 00:31:10,110 >> Har inget namn, men det är fortfarande är att ta ett argument. 629 00:31:10,110 --> 00:31:12,250 Så jag fick fortfarande rec och res. 630 00:31:12,250 --> 00:31:16,180 Och jag har fortfarande koden. 631 00:31:16,180 --> 00:31:18,930 Detta är alldeles utmärkt JavaScript-kod. 632 00:31:18,930 --> 00:31:22,540 Så jag kan deklarera en funktion utan uttryckligen ge den ett namn. 633 00:31:22,540 --> 00:31:24,250 Det är lite förvirrande i början. 634 00:31:24,250 --> 00:31:26,230 Det finns några liknande användbara saker som du kan göra med 635 00:31:26,230 --> 00:31:28,450 dessa anonyma funktioner. 636 00:31:28,450 --> 00:31:32,100 Är det någon som har några frågor om detta, eller är det OK att bara, för nu, 637 00:31:32,100 --> 00:31:34,130 slags bara acceptera att det kommer att göra samma sak? 638 00:31:34,130 --> 00:31:36,700 639 00:31:36,700 --> 00:31:37,125 Japp? 640 00:31:37,125 --> 00:31:38,680 >> PUBLIK: Är fungerar först klass i JavaScript? 641 00:31:38,680 --> 00:31:41,020 >> KEVIN SCHMID: De är först klass i JavaScript. 642 00:31:41,020 --> 00:31:45,490 Och bara veta att dessa begrepp passerar i en anonym funktion som 643 00:31:45,490 --> 00:31:49,600 detta gäller för JavaScript som du kan skriva in ditt slutprojekt för 644 00:31:49,600 --> 00:31:51,260 webbläsaren också. 645 00:31:51,260 --> 00:31:56,700 Så till exempel i JavaScript din webbläsare, det är också något evenemang 646 00:31:56,700 --> 00:32:00,680 drivs i den meningen att det som du kommer har är när användaren klickar på den här 647 00:32:00,680 --> 00:32:02,640 knapp, jag vill att du kör den här koden. 648 00:32:02,640 --> 00:32:07,070 >> Så det är samma typ av idéer av klientsidan när ett musklick eller de 649 00:32:07,070 --> 00:32:09,870 musen över en bild på din webbsida, kör den här koden. 650 00:32:09,870 --> 00:32:11,350 Det kan gälla för servrar. 651 00:32:11,350 --> 00:32:16,380 Så det är ungefär som det spännande anledning till att Javascript är ett riktigt 652 00:32:16,380 --> 00:32:19,810 lämpliga eller en del människor tycker att det är en lämpligt språk för denna typ av 653 00:32:19,810 --> 00:32:22,530 händelse förare server för att du har dessa anonyma funktioner. 654 00:32:22,530 --> 00:32:26,150 Du har hela idén med denna asynkron kod. 655 00:32:26,150 --> 00:32:27,060 OK. 656 00:32:27,060 --> 00:32:30,360 Någon som har några frågor? 657 00:32:30,360 --> 00:32:30,470 >> OK. 658 00:32:30,470 --> 00:32:33,440 Så det var simple.js. 659 00:32:33,440 --> 00:32:38,070 Så låt oss titta på en mer eller ett par mer. 660 00:32:38,070 --> 00:32:42,040 Så det här är sleep.js. 661 00:32:42,040 --> 00:32:47,160 Så är någon bekant med C-funktionen sömn? 662 00:32:47,160 --> 00:32:50,936 Från kanske en av de tidigare föreläsningar eller något liknande? 663 00:32:50,936 --> 00:32:54,650 >> Så i princip kan du skicka in Jag tror att en antalet sekunder eller om du använder U 664 00:32:54,650 --> 00:32:57,080 sova ett antal millisekunder eller nanosekunder. 665 00:32:57,080 --> 00:33:00,450 Och i grund och botten programmet kommer bara sluta kör för denna tid. 666 00:33:00,450 --> 00:33:01,280 Rätt? 667 00:33:01,280 --> 00:33:06,970 Och så kommer det att vakna upp till slut och då det kommer bara fortsätta att köra 668 00:33:06,970 --> 00:33:08,340 programmet. 669 00:33:08,340 --> 00:33:12,740 >> Så här servern slags ger intrycket av att sova. 670 00:33:12,740 --> 00:33:17,580 Så märker att vi har samma res.writeHead 200 med rubriken som 671 00:33:17,580 --> 00:33:22,130 tidigare, men då vi kallar detta funktion kallad set timeout. 672 00:33:22,130 --> 00:33:26,170 Ställ timeout finns även i webbläsaren Google Chrome 673 00:33:26,170 --> 00:33:28,000 eller Safari eller något annat. 674 00:33:28,000 --> 00:33:31,720 Och i grund och botten vad det gör här är det att ta in en funktion. 675 00:33:31,720 --> 00:33:33,360 Kallelse, igen, det är en anonym funktion. 676 00:33:33,360 --> 00:33:36,310 Så det är ganska coolt att vi är med hjälp av en anonym funktion inom en 677 00:33:36,310 --> 00:33:38,950 anonym funktion som kan vara lite konstigt. 678 00:33:38,950 --> 00:33:42,270 >> Men det tar den funktionen, vilket är princip säger - och hur detta 679 00:33:42,270 --> 00:33:47,430 verk är 5.000 millisekunder, jag vill ha dig att utföra den funktion som 680 00:33:47,430 --> 00:33:50,830 bara slutar svaret och skriver hej. 681 00:33:50,830 --> 00:33:56,730 Så detta ger intryck av liknande sova, men hur detta faktiskt 682 00:33:56,730 --> 00:33:59,780 fungerar är att vi ska gå igenom denna linje mycket snabbt. 683 00:33:59,780 --> 00:34:01,190 Vi ska bara skriva något. 684 00:34:01,190 --> 00:34:03,780 Och sedan kommer vi också gå igenom denna linje mycket snabbt. 685 00:34:03,780 --> 00:34:08,620 Så vi inte faktiskt går att vänta i fem sekunder. 686 00:34:08,620 --> 00:34:11,370 Vi kommer bara att köra denna kod direkt. 687 00:34:11,370 --> 00:34:14,219 >> Och så är det, återigen, den här lilla händelse slinga som nu har denna sak 688 00:34:14,219 --> 00:34:17,570 register som i grunden är just ständigt går runt i en cirkel 689 00:34:17,570 --> 00:34:21,620 och titta på klockan i en enda tråd och säger, har fem sekunder 690 00:34:21,620 --> 00:34:22,360 passerade än? 691 00:34:22,360 --> 00:34:26,409 Och sedan när den ser att den andra sidan har flyttat ut fem sekunder eller 692 00:34:26,409 --> 00:34:29,190 vad som helst, då den vaknar upp och säger: åh, vad ska jag göra? 693 00:34:29,190 --> 00:34:30,350 Åh jag måste köra den här koden. 694 00:34:30,350 --> 00:34:33,110 Och då det kommer att köra res.end hej. 695 00:34:33,110 --> 00:34:35,360 >> Så återigen, vi aldrig väntat här. 696 00:34:35,360 --> 00:34:38,590 Så det är inte att den här koden inuti denna funktion kommer att ta fem 697 00:34:38,590 --> 00:34:39,900 sekunder att köra. 698 00:34:39,900 --> 00:34:43,090 Denna kod kommer att köras ganska mycket ögonblickligen, åtminstone i förhållande till 699 00:34:43,090 --> 00:34:46,139 de fem sekunder som vi talade om tidigare innan. 700 00:34:46,139 --> 00:34:52,100 >> Så bara för att visa detta i handling, Jag kan göra Node.sleep.js. 701 00:34:52,100 --> 00:34:55,159 Och gjorde jag röra upp något? 702 00:34:55,159 --> 00:34:56,310 Möjligen. 703 00:34:56,310 --> 00:34:57,410 Ursäkta. 704 00:34:57,410 --> 00:34:59,530 Låt oss se vad vi kan göra för att fixa detta. 705 00:34:59,530 --> 00:35:10,830 706 00:35:10,830 --> 00:35:12,080 OK. 707 00:35:12,080 --> 00:35:15,460 708 00:35:15,460 --> 00:35:17,464 Så definitivt använda Node.js. 709 00:35:17,464 --> 00:35:19,440 Jag skojar bara. 710 00:35:19,440 --> 00:35:19,570 OK. 711 00:35:19,570 --> 00:35:20,820 Bara en sekund. 712 00:35:20,820 --> 00:35:27,380 713 00:35:27,380 --> 00:35:27,900 OK. 714 00:35:27,900 --> 00:35:29,130 Jag vet vad det är. 715 00:35:29,130 --> 00:35:34,440 >> Så problemet är att i min andra fliken här, jag kör Node redan på 716 00:35:34,440 --> 00:35:36,590 att samma adress 1337. 717 00:35:36,590 --> 00:35:43,370 Så fel att det kastade, om vi ser på det verkliga noga, är adressen i 718 00:35:43,370 --> 00:35:45,180 använda, EADDRINUSE. 719 00:35:45,180 --> 00:35:47,970 Så jag använde redan 1337 här. 720 00:35:47,970 --> 00:35:52,210 Så om jag stänger detta av, och då jag nu försöker köra detta, förhoppningsvis, allt 721 00:35:52,210 --> 00:35:53,210 kommer att bli bra. 722 00:35:53,210 --> 00:35:53,440 OK. 723 00:35:53,440 --> 00:35:57,020 Så du kan bara ha en sak sorterar att lyssna på en port på en gång. 724 00:35:57,020 --> 00:35:59,660 En annan lösning skulle ha varit för mig att bara redigera det programmet och göra 725 00:35:59,660 --> 00:36:02,370 det bli som 1338 eller något så. 726 00:36:02,370 --> 00:36:04,100 >> Men nu sömn är igång. 727 00:36:04,100 --> 00:36:06,400 Så låt oss faktiskt prova det i browser denna gång eftersom det är en 728 00:36:06,400 --> 00:36:09,080 liten mekanismer för att se den i en terminal. 729 00:36:09,080 --> 00:36:13,560 Så jag ska bara gå till det 127 adress igen vid 1337. 730 00:36:13,560 --> 00:36:14,850 Och om du kan se det - 731 00:36:14,850 --> 00:36:18,050 Jag vet inte om du kan - men min läsares tar en mycket, mycket lång 732 00:36:18,050 --> 00:36:20,600 tid att ladda eller liknande fem sekunder. 733 00:36:20,600 --> 00:36:23,460 >> Och sedan efter det, det äntligen avslutades reaktionen. 734 00:36:23,460 --> 00:36:29,070 Och du kan inte se det eftersom saken flyttas över lite, men om jag gör 735 00:36:29,070 --> 00:36:32,500 detta lite mindre, du kan se den säger hej. 736 00:36:32,500 --> 00:36:35,130 Så jag fick hej, men efter fem sekunder. 737 00:36:35,130 --> 00:36:38,510 Och det kan vara lite renare att se det här på terminalen, så jag är 738 00:36:38,510 --> 00:36:40,980 kommer att göra en - 739 00:36:40,980 --> 00:36:43,540 låt oss göra här - 740 00:36:43,540 --> 00:36:48,370 låt oss göra Curl den adressen återigen med 1337. 741 00:36:48,370 --> 00:36:50,820 Och jag bara typ av sitta här i fem sekunder. 742 00:36:50,820 --> 00:36:53,760 Men märker att servern kan acceptera nya svar. 743 00:36:53,760 --> 00:36:54,940 Så det skriver hej. 744 00:36:54,940 --> 00:36:58,720 >> Och att demo detta, i princip vad Jag kan göra i denna andra flik - 745 00:36:58,720 --> 00:37:02,640 så låt oss säga att jag gör det i en annan flik, Jag ska göra Curl och samma 746 00:37:02,640 --> 00:37:03,780 sak igen. 747 00:37:03,780 --> 00:37:06,600 Och jag ska försöka sparka dessa ni av vid samma tidpunkt. 748 00:37:06,600 --> 00:37:08,260 Så jag ska göra det här, och jag är kommer att tävla över här och jag är 749 00:37:08,260 --> 00:37:09,650 kommer att göra det igen. 750 00:37:09,650 --> 00:37:14,030 >> Och låt oss göra det så att du kan se dem båda. 751 00:37:14,030 --> 00:37:20,250 Att man tryckt hej och att man tryckt hej hela vägen på - 752 00:37:20,250 --> 00:37:22,550 låt oss göra det experimentet igen. 753 00:37:22,550 --> 00:37:25,100 Faktiskt, låt oss använda detta trick, om det är OK. 754 00:37:25,100 --> 00:37:30,520 >> Så jag kommer att använda ett skal sak som gör att jag kan i princip köra två kopior 755 00:37:30,520 --> 00:37:32,630 av detta program parallellt. 756 00:37:32,630 --> 00:37:36,070 Så det ska köra det första programmet och det andra programmet parallellt. 757 00:37:36,070 --> 00:37:39,060 Så nu om jag trycker på Enter, det kommer att göra denna begäran ganska mycket 758 00:37:39,060 --> 00:37:40,570 momentant samtidigt. 759 00:37:40,570 --> 00:37:42,620 Så låt oss ge det ett skott. 760 00:37:42,620 --> 00:37:44,950 >> Så nu märker det står två processer. 761 00:37:44,950 --> 00:37:50,630 Och om du är nyfiken, att 27.000 nummer är i grunden den process-ID. 762 00:37:50,630 --> 00:37:52,940 Och sedan märker, de utskrivna hej samtidigt. 763 00:37:52,940 --> 00:37:56,820 Det var inte som vi fick vänta fem sekunder för en och sedan efter det, 764 00:37:56,820 --> 00:37:59,640 fem sekunder senare få den andra. 765 00:37:59,640 --> 00:38:03,300 Så det är ganska, på vissa sätt, det är inte riktigt bevis, men det är 766 00:38:03,300 --> 00:38:07,390 intuitiva bevis för att det är inte bara som att vänta fem sekunder och blockering 767 00:38:07,390 --> 00:38:08,960 hela tråden. 768 00:38:08,960 --> 00:38:10,720 OK coolt. 769 00:38:10,720 --> 00:38:17,850 >> Så Aron ställde en fråga tidigare att var väl det som om vi gör något - 770 00:38:17,850 --> 00:38:18,735 Japp? 771 00:38:18,735 --> 00:38:19,051 >> PUBLIK: Vänta. 772 00:38:19,051 --> 00:38:21,585 Hur är det annorlunda printf buffert, men? 773 00:38:21,585 --> 00:38:23,010 Är det inte automatiskt göra det? 774 00:38:23,010 --> 00:38:25,390 Varför vi behöver oroa dig för det? 775 00:38:25,390 --> 00:38:26,555 >> KEVIN Schmid: Åh, kunde du säga att en gång till? 776 00:38:26,555 --> 00:38:29,510 >> PUBLIK: inte gillar printf buffert gör exakt samma sak? 777 00:38:29,510 --> 00:38:31,280 >> KEVIN Schmid: Den printf buffert? 778 00:38:31,280 --> 00:38:32,753 >> PUBLIK: Ja. 779 00:38:32,753 --> 00:38:33,244 OK. 780 00:38:33,244 --> 00:38:40,609 Inte var i ett av de frågesporter de var talar om hur om du just printf 781 00:38:40,609 --> 00:38:42,899 något och sedan har det paus en andra, och sedan har du den slinga tio 782 00:38:42,899 --> 00:38:46,530 gånger, det ska vänta tio sekunder och sedan printf allt tillsammans? 783 00:38:46,530 --> 00:38:47,460 >> KEVIN Schmid: Åh, OK. 784 00:38:47,460 --> 00:38:49,170 >> PUBLIK: Är det att göra samma sak sedan i det här fallet? 785 00:38:49,170 --> 00:38:52,630 >> KEVIN Schmid: Så frågan var i grund och botten på en av de tidigare frågesporter 786 00:38:52,630 --> 00:38:57,200 eller något, det var en fråga som i grund och botten om du säger utskrifts f 10 787 00:38:57,200 --> 00:39:01,490 saker på en gång och sedan sov som i processen med att skriva dem ut, 788 00:39:01,490 --> 00:39:04,850 vid slutet av någon anledning, skulle det bara dumpa dem alla ut på skärmen. 789 00:39:04,850 --> 00:39:06,740 Så det är ungefär två olika begrepp här. 790 00:39:06,740 --> 00:39:10,400 >> Så jag antar att en sak är att det i detta fallet är vi att göra med två olika 791 00:39:10,400 --> 00:39:13,510 slags människor frågar servern efter saker på samma gång. 792 00:39:13,510 --> 00:39:17,455 Och på grund av att den printf slags väntar så där och dumpar ut allt 793 00:39:17,455 --> 00:39:21,760 på en gång är mer relaterade till hur printf slags - 794 00:39:21,760 --> 00:39:25,100 så långt printf är faktiskt genomförts är det i grund och botten måste 795 00:39:25,100 --> 00:39:28,850 prata till operativsystemet att skriva i det där till konsolen. 796 00:39:28,850 --> 00:39:33,460 Så det inte vill göra allt detta grejer direkt när du säger printf 797 00:39:33,460 --> 00:39:36,260 snöre eftersom det kunde bli dyrt om det måste 798 00:39:36,260 --> 00:39:37,340 göra det varje gång. 799 00:39:37,340 --> 00:39:41,530 >> Så om du gör printf hey, ditt program kanske faktiskt inte ut att 800 00:39:41,530 --> 00:39:43,040 omedelbart till konsolen. 801 00:39:43,040 --> 00:39:46,080 Man skulle kunna säga, OK, jag skrev det. 802 00:39:46,080 --> 00:39:49,570 Och sedan slags vänta på dig att ge det lite mer innan faktiskt 803 00:39:49,570 --> 00:39:51,380 skriva ut till konsolen. 804 00:39:51,380 --> 00:39:54,040 >> Så anledningen till att så var fallet - 805 00:39:54,040 --> 00:39:56,450 och det är ganska orelaterade till sömn - 806 00:39:56,450 --> 00:40:00,060 är att sömn var liksom bara injicerades in där för att demonstrera 807 00:40:00,060 --> 00:40:02,480 Faktum är att den inte skriver det synkront. 808 00:40:02,480 --> 00:40:06,210 Men anledningen till det är just prestanda så att du inte behöver 809 00:40:06,210 --> 00:40:08,920 gör att många kontakter till det operativsystemet. 810 00:40:08,920 --> 00:40:12,300 >> Men här, det vi verkligen försöker göra med denna sömn sak är bara show 811 00:40:12,300 --> 00:40:17,730 att när vi har två personer som besöker denna webbplats, det kommer inte att sätta 812 00:40:17,730 --> 00:40:22,310 dem i en linje där det kommer att säga Jag måste hjälpa dig, och sedan när jag är 813 00:40:22,310 --> 00:40:25,350 helt klar med att hjälpa dig efter dessa fem sekunder, sedan kommer jag att 814 00:40:25,350 --> 00:40:26,750 gå vidare till nästa person. 815 00:40:26,750 --> 00:40:29,515 Så den första personens begäran inte binda upp den händelsen loop 816 00:40:29,515 --> 00:40:31,610 om det är vettigt. 817 00:40:31,610 --> 00:40:34,980 >> Men här är faktiskt ett exempel av något som kommer att knyta 818 00:40:34,980 --> 00:40:36,090 upp händelsen slingan. 819 00:40:36,090 --> 00:40:39,130 Så här är en hemsk funktion beräkna den n: te Fibonacci. 820 00:40:39,130 --> 00:40:43,510 Det är bokstavligen värre sätt du kan beräkna den n: te Fibonacci nummer. 821 00:40:43,510 --> 00:40:48,480 Och det är faktiskt bara att erkänna var detta kom från, 822 00:40:48,480 --> 00:40:49,330 det finns faktiskt - 823 00:40:49,330 --> 00:40:53,230 Jag menar, kan du försöka att gå och hitta det - men det är som en väldigt lång blogg 824 00:40:53,230 --> 00:40:54,130 posta att någon skrev. 825 00:40:54,130 --> 00:40:55,660 Det är som en av dessa Reddit saker. 826 00:40:55,660 --> 00:40:59,650 Men någon kritik Node.js, och de använde detta som ett exempel. 827 00:40:59,650 --> 00:41:03,700 Så jag liksom ville bara visa er två olika perspektiv bara för att få 828 00:41:03,700 --> 00:41:07,320 en allmän förståelse av begreppen bakom dessa två saker. 829 00:41:07,320 --> 00:41:13,050 >> Men detta väljs som bara en hemsk, fruktansvärt ineffektivt beräkningsmässigt 830 00:41:13,050 --> 00:41:15,940 intensiva sätt att beräkna n: te Fibonacci nummer. 831 00:41:15,940 --> 00:41:21,180 Så precis som en sidoanteckning, varför är det hemskt ut på ett sätt? 832 00:41:21,180 --> 00:41:23,210 Japp? 833 00:41:23,210 --> 00:41:25,130 >> PUBLIK: Säg att du startar ut med 1000. 834 00:41:25,130 --> 00:41:27,050 1000 delas i 999 och 998. 835 00:41:27,050 --> 00:41:28,970 Var och en av detta delar sig i två saker. 836 00:41:28,970 --> 00:41:30,890 Var och en av detta delar sig i två saker. 837 00:41:30,890 --> 00:41:31,355 >> KEVIN Schmid: Höger. 838 00:41:31,355 --> 00:41:32,400 >> PUBLIK: Hela vägen ner. 839 00:41:32,400 --> 00:41:32,840 >> KEVIN Schmid: Exakt. 840 00:41:32,840 --> 00:41:37,330 Så bara för att upprepa för kameran, om jag ringa FIB på som 1000 eller något 841 00:41:37,330 --> 00:41:41,810 så där, det är uppenbarligen inte mindre än eller lika med ett så jag ska 842 00:41:41,810 --> 00:41:46,040 gå till denna annat fall, och då ska jag ringa FIB 999 plus FIB 998. 843 00:41:46,040 --> 00:41:50,290 Och så ganska mycket alla som arbete som FIB 999 gör är 844 00:41:50,290 --> 00:41:52,950 typ av på denna nivå. 845 00:41:52,950 --> 00:41:55,620 Om du går ner, är det ännu mer överflödiga än så, men om du bara 846 00:41:55,620 --> 00:42:01,390 tror computing fib 998 blir oss ganska nära fib 999. 847 00:42:01,390 --> 00:42:05,860 Så vi borde verkligen vara lite mer smart om hur vi slags åter 848 00:42:05,860 --> 00:42:07,580 dessa, men vi inte återanvända dessa saker alls. 849 00:42:07,580 --> 00:42:11,860 Så ni kan föreställa er detta gigantiska, gigantiskt träd som är bara hemskt. 850 00:42:11,860 --> 00:42:12,940 >> Men hur som helst, OK. 851 00:42:12,940 --> 00:42:14,040 Så det var fib. 852 00:42:14,040 --> 00:42:15,530 Det tar bara ett tag att köra. 853 00:42:15,530 --> 00:42:16,510 Japp? 854 00:42:16,510 --> 00:42:17,760 >> PUBLIK: [OHÖRBAR]. 855 00:42:17,760 --> 00:42:20,430 856 00:42:20,430 --> 00:42:22,481 >> KEVIN Schmid: Åh, kunde du upprepa frågan? 857 00:42:22,481 --> 00:42:23,731 >> PUBLIK: [OHÖRBAR]. 858 00:42:23,731 --> 00:42:30,840 859 00:42:30,840 --> 00:42:33,990 >> KEVIN SCHMID: Åh, så det är bara kod det kommer att vara typ av på 860 00:42:33,990 --> 00:42:34,850 serversidan. 861 00:42:34,850 --> 00:42:38,100 Så det här kommer inte att finnas i webbläsaren eller något. 862 00:42:38,100 --> 00:42:42,160 Det är i grund och botten vad vi har är att när användaren här ganska mycket märken 863 00:42:42,160 --> 00:42:45,300 deras begäran igen, när vi liksom göra en förfrågan, vi kommer att kalla 864 00:42:45,300 --> 00:42:47,040 denna funktion på serversidan. 865 00:42:47,040 --> 00:42:50,480 Och då får vi resultatet tillbaka från att kalla denna funktion. 866 00:42:50,480 --> 00:42:52,460 Och sedan kommer vi bara skriva ut det till användaren. 867 00:42:52,460 --> 00:42:54,580 Så användaren egentligen inte behandlar med denna funktion för mycket. 868 00:42:54,580 --> 00:42:57,270 >> Var det frågan? 869 00:42:57,270 --> 00:42:58,470 Låter det vettigt? 870 00:42:58,470 --> 00:42:58,810 OK. 871 00:42:58,810 --> 00:43:00,930 Cool. 872 00:43:00,930 --> 00:43:04,240 >> Så återigen, gör vi hela denna res.writeHead sak där vi skriver ut 873 00:43:04,240 --> 00:43:05,150 rubriken. 874 00:43:05,150 --> 00:43:09,730 Och så avslutar jag svaret genom att göra det magiska numret är fib 45. 875 00:43:09,730 --> 00:43:12,100 Så låt oss bara köra den här servern. 876 00:43:12,100 --> 00:43:15,190 Så jag ska göra en Nod fib.js. 877 00:43:15,190 --> 00:43:17,340 Så nu min fib-servern är igång. 878 00:43:17,340 --> 00:43:21,790 >> Och så här kommer jag att göra en av dessa. 879 00:43:21,790 --> 00:43:22,200 OK? 880 00:43:22,200 --> 00:43:24,960 Så jag ska bara säga, Curl. 881 00:43:24,960 --> 00:43:32,226 Så det kommer att ta ett tag, men förhoppningsvis snart kommer att avslutas och 882 00:43:32,226 --> 00:43:35,660 det kommer att skriva ut den 45: e Fibonacci nummer. 883 00:43:35,660 --> 00:43:36,910 >> PUBLIK: [OHÖRBAR]. 884 00:43:36,910 --> 00:43:40,720 885 00:43:40,720 --> 00:43:42,050 >> KEVIN SCHMID: Det bör få gjort ganska snart. 886 00:43:42,050 --> 00:43:43,780 Så det bör ta 5-6 sekunder. 887 00:43:43,780 --> 00:43:48,570 Jag vet inte det är bara V8 är super snabb, men i varje fall är detta ett 888 00:43:48,570 --> 00:43:52,700 mycket korta exempel och avsikt klumpiga av en icke-trivial 889 00:43:52,700 --> 00:43:54,200 beräkning. 890 00:43:54,200 --> 00:43:56,700 Så efter ett tag, det får det. 891 00:43:56,700 --> 00:44:02,130 >> Men nu, vad händer om jag gör det samma typ av experiment som innan där jag gör 892 00:44:02,130 --> 00:44:04,010 två ansökningar samtidigt? 893 00:44:04,010 --> 00:44:06,990 Så här kommer jag att en Curl på den adressen, och jag ska 894 00:44:06,990 --> 00:44:08,260 att göra en annan Curl. 895 00:44:08,260 --> 00:44:12,070 Och kom ihåg, när vi gjorde detta för sova server, när vi i princip hade det 896 00:44:12,070 --> 00:44:15,320 efter fem sekunder, de ganska mycket båda kom tillbaka rätt 897 00:44:15,320 --> 00:44:16,380 ungefär samtidigt. 898 00:44:16,380 --> 00:44:18,650 Så det var inte särskilt bunden. 899 00:44:18,650 --> 00:44:20,290 >> Men låt oss prova det nu. 900 00:44:20,290 --> 00:44:22,370 OK, så vi fick våra två processer. 901 00:44:22,370 --> 00:44:24,210 Kom ihåg att det är de process ID. 902 00:44:24,210 --> 00:44:25,900 Det kommer att bli lite tafatt medan vi stall. 903 00:44:25,900 --> 00:44:31,340 904 00:44:31,340 --> 00:44:35,360 Så låt oss bara stanna här och vänta. 905 00:44:35,360 --> 00:44:37,090 >> Så en av dem skulle komma tillbaka efter liknande - 906 00:44:37,090 --> 00:44:39,190 OK, så man kom tillbaka. 907 00:44:39,190 --> 00:44:43,570 Men varför gjorde inte den andra man kommit tillbaka ännu? 908 00:44:43,570 --> 00:44:44,389 Japp? 909 00:44:44,389 --> 00:44:49,280 >> PUBLIK: Servern kan inte göra något medan den beräknar det stora antal. 910 00:44:49,280 --> 00:44:51,620 >> KEVIN Schmid: Höger. 911 00:44:51,620 --> 00:44:55,395 Så svaret var bara att servern verkligen inte kan göra något medan 912 00:44:55,395 --> 00:44:57,460 det beräkna det Fibonacci nummer. 913 00:44:57,460 --> 00:44:59,360 Så nu fick jag bara mina två saker tillbaka. 914 00:44:59,360 --> 00:45:03,210 Men jag antar att bara tänka på koden lite mer, hur det funkar 915 00:45:03,210 --> 00:45:05,030 och allt. 916 00:45:05,030 --> 00:45:11,750 >> Så denna funktion här är den kod som Jag har sagt det här servern för att köra när det 917 00:45:11,750 --> 00:45:14,100 tar emot ett nytt inkommande begäran. 918 00:45:14,100 --> 00:45:17,940 Så det är bara att köra igenom detta hela koden, och då det kommer att gå 919 00:45:17,940 --> 00:45:21,120 tillbaka till händelsen slingan och sedan fortsätta kolla efter nya händelser. 920 00:45:21,120 --> 00:45:23,670 Så i princip vad vi har händer är servern är 921 00:45:23,670 --> 00:45:25,080 lyssna efter nya saker. 922 00:45:25,080 --> 00:45:28,070 Den första personen frågar efter vad 45 är. 923 00:45:28,070 --> 00:45:30,490 Vi kör den här koden för att beräkna den. 924 00:45:30,490 --> 00:45:33,420 Denna kod tar ungefär fem till sex sekunder att köra. 925 00:45:33,420 --> 00:45:36,990 Sedan går vi tillbaka till händelsen slingan och söka efter nya förfrågningar. 926 00:45:36,990 --> 00:45:42,700 >> Så detta är ett exempel på hur, om du få saker som är så kallade compute 927 00:45:42,700 --> 00:45:48,140 bunden, eller använder mycket computational, inte makt, men som är 928 00:45:48,140 --> 00:45:50,260 beräkningsintensiva - 929 00:45:50,260 --> 00:45:54,080 Jag antar att en sak att säga om detta är att denna funktion gör helt, 930 00:45:54,080 --> 00:45:56,310 för det mesta, söt nyttigt arbete rätt. 931 00:45:56,310 --> 00:45:59,970 Hela tiden att det återuppringning Funktionen kördes, det var ganska 932 00:45:59,970 --> 00:46:03,670 mycket spenderar större delen av sin tid bara datoranvändning som n: te Fibonacci nummer. 933 00:46:03,670 --> 00:46:05,930 >> Men vi hade bara en tråd att ta itu med. 934 00:46:05,930 --> 00:46:10,270 I Apache-modellen, när två personer framställt begäran att få fib 45, vi 935 00:46:10,270 --> 00:46:11,610 skulle ha haft två olika trådar. 936 00:46:11,610 --> 00:46:15,060 Och sedan operativsystemets jobb skulle ha varit, eller användarnivå 937 00:46:15,060 --> 00:46:18,660 kod som hanterar de trådar, skulle har varit att skära upp det på 938 00:46:18,660 --> 00:46:23,060 CPU, eller ens om du hade flera processorer, distribuerar dem jämnt över processorer 939 00:46:23,060 --> 00:46:26,130 så att de var både mål ungefär samtidigt. 940 00:46:26,130 --> 00:46:31,120 >> Så bara för att visa hur vi kan sortera om - och detta är inte ett totalt perfekt 941 00:46:31,120 --> 00:46:34,280 lösning, men typ av hur vi kan gör en komma tillbaka hit och göra 942 00:46:34,280 --> 00:46:35,880 lite bättre. 943 00:46:35,880 --> 00:46:41,540 Så vad jag har här är ett program som heter Fib C. Och detta i grund och botten använder 944 00:46:41,540 --> 00:46:45,690 en annan av Nodes moduler som kallas Barn Process-modulen. 945 00:46:45,690 --> 00:46:49,210 Så jag har bland annat varit i toppen typ som att jag skulle göra ett halvt kilo inkluderar 946 00:46:49,210 --> 00:46:51,230 barn process.h eller något. 947 00:46:51,230 --> 00:46:56,210 Nu har jag tillgång till denna CP variabel som har alla mina funktionalitet. 948 00:46:56,210 --> 00:47:01,810 >> Så nu vad jag gör i detta svar handler är jag kör det här programmet 949 00:47:01,810 --> 00:47:04,100 dot slash fib 45. 950 00:47:04,100 --> 00:47:06,820 Så vad jag har gjort - och jag ska bara att kliva ur programmet för ett 951 00:47:06,820 --> 00:47:07,620 lite - 952 00:47:07,620 --> 00:47:11,060 har jag skrivit ett C-program som princip beräknar 953 00:47:11,060 --> 00:47:12,630 n: te Fibonacci nummer. 954 00:47:12,630 --> 00:47:15,960 Så här är bara ett program som jag skrivit i C som beräknar detta. 955 00:47:15,960 --> 00:47:19,040 Jag kan kompilera det, och jag kan köra det på kommandoraden. 956 00:47:19,040 --> 00:47:22,150 Och det kommer att beräkna 45: e Fibonacci nummer. 957 00:47:22,150 --> 00:47:24,510 >> Så märker det bara tar ungefär lika länge. 958 00:47:24,510 --> 00:47:28,240 Jag förmodligen kunde ha använt streck 03 till optimera det eller något liknande, 959 00:47:28,240 --> 00:47:31,050 men jag gjorde precis som vanliga kompilatorinställningar. 960 00:47:31,050 --> 00:47:33,260 Och det skriver ut. 961 00:47:33,260 --> 00:47:36,830 >> Men nu, vad ska jag liksom göra? 962 00:47:36,830 --> 00:47:39,800 Åh förlåt, fel fil. 963 00:47:39,800 --> 00:47:42,800 Så jag gör samma saker med rubriken som tidigare. 964 00:47:42,800 --> 00:47:45,780 Då gör jag det här cp.exec. 965 00:47:45,780 --> 00:47:49,460 Vad detta kommer att göra är att det är kommer att köra det här programmet. 966 00:47:49,460 --> 00:47:51,960 Men hur detta fungerar är att det kommer inte att vänta på 967 00:47:51,960 --> 00:47:53,400 det programmet till slut. 968 00:47:53,400 --> 00:47:56,000 Det står bara i princip exekvera programmet. 969 00:47:56,000 --> 00:47:58,700 Så i princip skriver detta i kommandotolken sorts. 970 00:47:58,700 --> 00:48:02,350 >> Och sedan, när du är klar med det, kör den här funktionen. 971 00:48:02,350 --> 00:48:04,800 Så nu vi sorts få detta helt återställd sak av 972 00:48:04,800 --> 00:48:06,750 som om vi inte väntar. 973 00:48:06,750 --> 00:48:08,530 Innebär den typen av vettigt? 974 00:48:08,530 --> 00:48:08,990 Japp? 975 00:48:08,990 --> 00:48:11,060 >> PUBLIK: [OHÖRBAR]? 976 00:48:11,060 --> 00:48:13,610 >> KEVIN SCHMID: Så detta kommer faktiskt öppna upp en ny process för att göra det. 977 00:48:13,610 --> 00:48:19,310 Så detta är faktiskt, på vissa sätt, ondska, inte super ont, men det är 978 00:48:19,310 --> 00:48:22,990 viktigt att säga att detta är typ av att gå tillbaka till, å ena sidan, Apache 979 00:48:22,990 --> 00:48:26,450 modell där vi gör trådar och processer för varje begäran eller 980 00:48:26,450 --> 00:48:29,280 processer för varje förfrågan. 981 00:48:29,280 --> 00:48:32,090 Så det här är typ av analog vad Apache gör. 982 00:48:32,090 --> 00:48:35,110 I vissa fall kommer det att bara använda en ny tråd, vilket är lite mer ljus 983 00:48:35,110 --> 00:48:39,040 vikt än en process, men Apache kunde hamna forking en ny process 984 00:48:39,040 --> 00:48:43,370 som är typ av vad vi gör här implicit genom att göra punkt snedstreck fib 45. 985 00:48:43,370 --> 00:48:48,690 >> Och då i så fall, vi slags ådra samma kostnader för processer. 986 00:48:48,690 --> 00:48:50,710 Så det här är bara en sak du kan göra. 987 00:48:50,710 --> 00:48:52,600 Men bara för att visa denna typ av löpning. 988 00:48:52,600 --> 00:48:57,120 Och detta prat är bara verkligen syftar till presentera denna typ av program som 989 00:48:57,120 --> 00:49:00,710 sätt att visa olika perspektiv på hur man designar servrar så. 990 00:49:00,710 --> 00:49:08,300 Så detta är igång, och sedan nu om jag gör här igen, fick jag två process ID. 991 00:49:08,300 --> 00:49:10,320 >> Låt oss bara prata om saker att påpeka. 992 00:49:10,320 --> 00:49:11,980 Så märker att de är stegvis. 993 00:49:11,980 --> 00:49:12,700 Det är coolt. 994 00:49:12,700 --> 00:49:15,140 Eftersom det var 27.122 innan. 995 00:49:15,140 --> 00:49:18,580 Men varsel nu, kom de tillbaka vid ungefär samma tidpunkt. 996 00:49:18,580 --> 00:49:23,960 >> Och nu, en bra fråga att ställa om varför var att ärendet är, vars jobb 997 00:49:23,960 --> 00:49:27,590 var det nu för sorts göra dessa saker slags spela rättvist med varje 998 00:49:27,590 --> 00:49:31,350 andra, dessa två fall av dot slash fib 45 som jag sprang 999 00:49:31,350 --> 00:49:32,880 eller att Nod ran? 1000 00:49:32,880 --> 00:49:36,940 Vilka slags gör det rimligt att de båda få slags balanserad körning? 1001 00:49:36,940 --> 00:49:42,900 1002 00:49:42,900 --> 00:49:44,220 >> PUBLIK: [OHÖRBAR]. 1003 00:49:44,220 --> 00:49:44,620 >> KEVIN Schmid: Ja. 1004 00:49:44,620 --> 00:49:49,740 Så i princip, när jag gör dot slash fib 45 eller nåt sånt, nu är det 1005 00:49:49,740 --> 00:49:53,750 typ av upp till operativsystemet för att hantera runtime av dessa program. 1006 00:49:53,750 --> 00:49:56,920 Och nu kan schemalägga dem på olika processorer eller det 1007 00:49:56,920 --> 00:49:58,330 kan schemalägga dem. 1008 00:49:58,330 --> 00:50:01,870 Det kan skiva upp den tid som man CPU blir det eller att de får 1009 00:50:01,870 --> 00:50:03,330 för att köras på en processor. 1010 00:50:03,330 --> 00:50:05,620 Så det är tanken bakom det. 1011 00:50:05,620 --> 00:50:07,220 Är det vettigt att alla? 1012 00:50:07,220 --> 00:50:10,950 Så nu Nod inte riktigt spelar en del i att dela upp dessa uppgifter. 1013 00:50:10,950 --> 00:50:12,200 OK. 1014 00:50:12,200 --> 00:50:14,050 1015 00:50:14,050 --> 00:50:17,840 >> Så det är nästan det för exempel. 1016 00:50:17,840 --> 00:50:23,370 Jag ville bara visa en sak eftersom mycket av detta har hittills varit 1017 00:50:23,370 --> 00:50:27,350 inte helt super praktiskt i vissa fall. 1018 00:50:27,350 --> 00:50:30,970 Jag kan tänka mig att komma hem efter detta prata och något och säga liknande, 1019 00:50:30,970 --> 00:50:35,710 väl Jag fick typ av ur denna diskussion som Jag kan göra en Fibonacci-server för 1020 00:50:35,710 --> 00:50:37,360 mitt slutprojekt. 1021 00:50:37,360 --> 00:50:40,770 Så här är bara typ av ytterligare ett exempel som förhoppningsvis kommer att bli - 1022 00:50:40,770 --> 00:50:44,620 Kanske inte, men kanske - lite mer slags betydelse för slutprojekt och 1023 00:50:44,620 --> 00:50:46,440 tänka framåt för sånt. 1024 00:50:46,440 --> 00:50:48,870 >> Så detta är chat.js. 1025 00:50:48,870 --> 00:50:52,290 Så det här är ungefär som en del prov serversidan kod som du kan använda för att 1026 00:50:52,290 --> 00:50:55,700 upprätta en liten chatt-server som du kanske har sett på 1027 00:50:55,700 --> 00:50:56,630 Facebook Chat eller något annat. 1028 00:50:56,630 --> 00:50:59,990 Så jag säger inte att det är som Facebook Chatta, men det är typ av 1029 00:50:59,990 --> 00:51:06,230 som en bra - kanske inte bra, men kanske bra - utgångspunkten för en pratstund 1030 00:51:06,230 --> 00:51:08,560 server för din webbplats för ett slutprojekt. 1031 00:51:08,560 --> 00:51:11,040 Så låt oss titta på vad den gör. 1032 00:51:11,040 --> 00:51:15,500 >> Så vi får denna speciella sak i toppen, Var detta SIO 1033 00:51:15,500 --> 00:51:17,050 lika kräver Socket.IO. 1034 00:51:17,050 --> 00:51:20,280 Så detta är en annan sak att den inte faktiskt levereras med 1035 00:51:20,280 --> 00:51:22,300 Nod men du kan installera den. 1036 00:51:22,300 --> 00:51:23,480 Det är en Nod-modul. 1037 00:51:23,480 --> 00:51:25,670 Så det är precis som en förlängning till Node. 1038 00:51:25,670 --> 00:51:29,220 >> SocketIO är faktiskt riktigt typ av cool. 1039 00:51:29,220 --> 00:51:32,550 Det är en abstraktion som i princip vad det gör är att det tillåter dig att 1040 00:51:32,550 --> 00:51:35,770 har denna ström av kommunikation mellan en bana 1041 00:51:35,770 --> 00:51:39,430 webbläsare och en webbserver. 1042 00:51:39,430 --> 00:51:45,250 Så för det mesta så långt har vi haft dessa mycket snabb en sekund eller två 1043 00:51:45,250 --> 00:51:48,790 andra meddelanden mellan en bana webbläsaren och webbservern. 1044 00:51:48,790 --> 00:51:53,310 Så det är i princip gå till google.com, get grejer, skicka tillbaka, och sedan 1045 00:51:53,310 --> 00:51:53,770 vi är klara. 1046 00:51:53,770 --> 00:51:56,560 Vi kommer aldrig prata igen förrän användare skriver i något annat. 1047 00:51:56,560 --> 00:52:01,090 >> Men vad Socket.IO och liknande typ av saker - och SocketIO är faktiskt en 1048 00:52:01,090 --> 00:52:03,940 av de saker som är byggt på så WebSocket som är typ av tillgänglig 1049 00:52:03,940 --> 00:52:06,440 som en del av HTML5 - 1050 00:52:06,440 --> 00:52:09,620 som tillåter dig att ha denna fortlöpande dialog. 1051 00:52:09,620 --> 00:52:13,990 Och detta är mycket användbart i en chattserver sånt eftersom det är 1052 00:52:13,990 --> 00:52:17,390 ungefär som en fortlöpande dialog några sätt för om du chattar 1053 00:52:17,390 --> 00:52:21,540 med någon, kan du nu skicka ett meddelande ner i röret, varefter 1054 00:52:21,540 --> 00:52:23,940 Servern kan sända ett meddelande ned röret till den andra personen att du är 1055 00:52:23,940 --> 00:52:24,520 chattar med. 1056 00:52:24,520 --> 00:52:26,903 Och då kan du ha denna utbyta så. 1057 00:52:26,903 --> 00:52:30,590 1058 00:52:30,590 --> 00:52:32,850 >> Så det är ungefär vad SocketIO är bra för. 1059 00:52:32,850 --> 00:52:38,400 Anledningen till att SocketIO använder WebSockets som en sak är att i 1060 00:52:38,400 --> 00:52:43,980 Förutom att bara vanliga gamla WebSockets, det gör också några knep för att i grunden 1061 00:52:43,980 --> 00:52:45,610 göra den webbläsare kompatibel. 1062 00:52:45,610 --> 00:52:50,040 Så webbläsare som Internet Explorer Tyvärr stöder inte WebSockets 1063 00:52:50,040 --> 00:52:50,810 direkt ur lådan. 1064 00:52:50,810 --> 00:52:55,290 Så den använder någon annan typ av coola snyggt saker med Adobe Flash för att möjliggöra 1065 00:52:55,290 --> 00:52:57,170 dig att ha kors webbläsare stöd. 1066 00:52:57,170 --> 00:52:58,800 Så det är verkligen användbart. 1067 00:52:58,800 --> 00:53:02,440 >> Och faktiskt, jag vet att jag är typ av körs på tid här, men CS50 1068 00:53:02,440 --> 00:53:08,490 Diskutera, har du någonsin sett något liksom, jag vet inte, tom så och så är 1069 00:53:08,490 --> 00:53:11,030 svara på detta inlägg eller något så där, den funktionen? 1070 00:53:11,030 --> 00:53:12,250 Det är SocketIO. 1071 00:53:12,250 --> 00:53:15,580 Så när någon börjar skriva i diskutera rutan för att göra ett svar eller 1072 00:53:15,580 --> 00:53:20,040 något, gör vad är din webbläsare heter i SocketIO avger någon form av 1073 00:53:20,040 --> 00:53:22,660 händelse som säger att någon är svara på detta inlägg. 1074 00:53:22,660 --> 00:53:26,110 >> Då servern säger, OK, vad ska jag göra? 1075 00:53:26,110 --> 00:53:29,270 Ja nu har jag att säga till de andra killarna som är på CS50 Diskutera ser 1076 00:53:29,270 --> 00:53:31,170 på detta inlägg som någon har att svara. 1077 00:53:31,170 --> 00:53:34,190 Så det är ungefär vad SocketIO är bra för, detta fortsatta slags 1078 00:53:34,190 --> 00:53:35,930 ström av dialog. 1079 00:53:35,930 --> 00:53:37,250 OK. 1080 00:53:37,250 --> 00:53:40,060 >> Så vad jag har här - och vi är bara kommer att ignorera anslutningar arrayen 1081 00:53:40,060 --> 00:53:41,390 för lite - 1082 00:53:41,390 --> 00:53:43,080 det jag gör är att jag en annan lyssnar. 1083 00:53:43,080 --> 00:53:46,880 Så det är bara det sätt på Socket.IO är säger låt oss lyssna på den här porten. 1084 00:53:46,880 --> 00:53:50,060 Och så gör jag detta på anslutning. 1085 00:53:50,060 --> 00:53:53,360 Så det är bara i princip Socket IO: s sätt att säga, när vi får en 1086 00:53:53,360 --> 00:53:55,840 anslutning, jag vill ha dig för att köra den här koden. 1087 00:53:55,840 --> 00:53:59,870 >> Och märker att istället för att ha rec och res gick in där jag har Socket. 1088 00:53:59,870 --> 00:54:03,260 Och detta Socket idé är i grunden detta sak som du kan skriva till och läsa 1089 00:54:03,260 --> 00:54:05,750 från den som finns i användarens meddelanden möjligen. 1090 00:54:05,750 --> 00:54:10,700 Och de meddelanden som du vill skicka kan gå igenom det Socket. 1091 00:54:10,700 --> 00:54:12,140 Låter det vettigt? 1092 00:54:12,140 --> 00:54:14,490 Så det är det fortsatta sak. 1093 00:54:14,490 --> 00:54:17,820 >> Så vad jag gör är att jag kallar Socket.emit. 1094 00:54:17,820 --> 00:54:20,330 Och avger tar ganska mycket två argument. 1095 00:54:20,330 --> 00:54:24,100 Det första argumentet är en sträng precis som representerar typen av 1096 00:54:24,100 --> 00:54:25,270 sak du avger. 1097 00:54:25,270 --> 00:54:28,120 Så för detta fall, jag har användning denna sträng nytt meddelande. 1098 00:54:28,120 --> 00:54:32,670 Och det är bara i princip säger att typ av denna sak, vad jag är 1099 00:54:32,670 --> 00:54:34,750 sändning, är ett nytt meddelande. 1100 00:54:34,750 --> 00:54:38,460 Så du kan lyssna efter specifika typer som nytt meddelande eller vad 1101 00:54:38,460 --> 00:54:39,960 genom att använda dot vidare. 1102 00:54:39,960 --> 00:54:44,570 >> Så anslutning och användaren skickas dit, om man tittar på var vi kallar prick på, 1103 00:54:44,570 --> 00:54:48,150 de är andra strängar som representerar typer av användarmeddelanden. 1104 00:54:48,150 --> 00:54:52,060 Så det är i princip att du kan få den här emit en av dessa typer av meddelanden, och 1105 00:54:52,060 --> 00:54:55,520 sedan göra något som svar på ett av dessa meddelandetyper 1106 00:54:55,520 --> 00:54:57,640 >> Så jag avger denna nya budskap. 1107 00:54:57,640 --> 00:55:00,540 Vi kommer att ignorera connections.push för en sekund. 1108 00:55:00,540 --> 00:55:03,360 Men då säger jag, Socket.on användar skickats. 1109 00:55:03,360 --> 00:55:07,540 Så nu är det är ungefär som när användare skickar ett meddelande till mig, jag vill ha 1110 00:55:07,540 --> 00:55:09,240 att du kör den här koden. 1111 00:55:09,240 --> 00:55:12,080 Och märker att det anonym funktion tar upp här 1112 00:55:12,080 --> 00:55:16,300 heter uppgifter som i huvudsak går att ha användarens meddelande. 1113 00:55:16,300 --> 00:55:20,700 >> Så nu ska vi typ prat om anslutningarna arrayen. 1114 00:55:20,700 --> 00:55:24,590 Så det här är avsedd för en chattklient där i stort sett alla är typ av i 1115 00:55:24,590 --> 00:55:25,950 samma chattrum. 1116 00:55:25,950 --> 00:55:29,640 Så i princip, vad vi behöver för att hålla runt är några array som i grund och botten 1117 00:55:29,640 --> 00:55:33,170 representerar alla de människor som chattar i vissa sätt, om det är vettigt. 1118 00:55:33,170 --> 00:55:33,340 Rätt? 1119 00:55:33,340 --> 00:55:37,190 Eftersom vi behöver veta vem dessa killar är så att vi kan skicka meddelanden 1120 00:55:37,190 --> 00:55:39,140 att andra människor skickar till oss. 1121 00:55:39,140 --> 00:55:44,440 >> Vad denna kod gör är när användaren skickar ett meddelande - det är den typ av 1122 00:55:44,440 --> 00:55:45,300 händelsen - 1123 00:55:45,300 --> 00:55:47,120 vi kommer att köra den här koden. 1124 00:55:47,120 --> 00:55:51,240 Och det vi gör är att vi kör igenom detta array som vi har kallat anslutningar. 1125 00:55:51,240 --> 00:55:54,390 Och ganska mycket för varje anslutning utom den som är vårt, det är 1126 00:55:54,390 --> 00:55:59,520 vad denna kod säger, vi skickar en ny budskap med det bifogade meddelandet 1127 00:55:59,520 --> 00:56:01,210 information. 1128 00:56:01,210 --> 00:56:04,880 >> Så om du märker här, vad jag gjorde när användaren faktiskt gör en ny 1129 00:56:04,880 --> 00:56:08,560 anslutning Jag har lagt till JavaScript.push metod är detta 1130 00:56:08,560 --> 00:56:12,100 i princip bara att säga som till att Socket som ett värde i 1131 00:56:12,100 --> 00:56:13,900 våra kontakter array. 1132 00:56:13,900 --> 00:56:20,560 Så nu när den här koden körs, kommer det skicka saker till de särskilda 1133 00:56:20,560 --> 00:56:22,020 anslutningar. 1134 00:56:22,020 --> 00:56:26,980 Så det här kan vara en bra utgångspunkt för framställning av en chattserver 1135 00:56:26,980 --> 00:56:28,250 eller något liknande. 1136 00:56:28,250 --> 00:56:33,315 >> Och den typ av häftiga är att den kod som du ser här ut på och 1137 00:56:33,315 --> 00:56:36,390 avge och sånt är samma typ av JavaScript-kod som du skulle 1138 00:56:36,390 --> 00:56:39,260 skriva i webbläsaren för att interagera med servern. 1139 00:56:39,260 --> 00:56:42,480 Så det är därför SocketIO är typ av snyggt och användbar på detta sätt. 1140 00:56:42,480 --> 00:56:45,680 1141 00:56:45,680 --> 00:56:49,250 >> Oh och bara en sak riktigt snabbt. 1142 00:56:49,250 --> 00:56:55,970 Det fanns en CS50 slutprojekt förra året som i princip genomfört en chatt 1143 00:56:55,970 --> 00:56:57,840 server i Node.js. 1144 00:56:57,840 --> 00:57:01,350 Jag tycker det är Harvardchats.org men jag är inte - 1145 00:57:01,350 --> 00:57:02,940 OK. 1146 00:57:02,940 --> 00:57:06,190 Jag är inte säker på vad webbadressen är, men Jag kan skicka ut det efteråt. 1147 00:57:06,190 --> 00:57:09,260 Men det är ganska coolt vad du kan göra med Node.js. 1148 00:57:09,260 --> 00:57:14,680 >> Så jag hoppas att, i allmänhet, ni har en bra känsla för vad Node.js är användbart 1149 00:57:14,680 --> 00:57:17,870 för och hur du kan kanske gälla till din slutprojekt. 1150 00:57:17,870 --> 00:57:21,050 Jag kommer att skicka ut lite mer resurser tillsammans med detta. 1151 00:57:21,050 --> 00:57:23,170 Och tack för att ni kom. 1152 00:57:23,170 --> 00:57:23,610 Tack. 1153 00:57:23,610 --> 00:57:27,168 >> [Applåder]