1 00:00:00,000 --> 00:00:08,350 2 00:00:08,350 --> 00:00:09,710 >> KEVIN SCHMID: Hej alle. 3 00:00:09,710 --> 00:00:12,640 Velkommen til CS50 seminar på Node.js. 4 00:00:12,640 --> 00:00:13,955 Mit navn er Kevin. 5 00:00:13,955 --> 00:00:15,580 Jeg er en CS50 TF. 6 00:00:15,580 --> 00:00:17,650 Og jeg er lidt ligesom virkelig begejstret om dette seminar. 7 00:00:17,650 --> 00:00:20,430 Jeg tror Node.js er meget cool. 8 00:00:20,430 --> 00:00:24,200 Jeg håber, at dette seminar kan bruges som en god, jeg gætte, springbræt for 9 00:00:24,200 --> 00:00:26,380 nogle af dine afsluttende projekter, hvis du er interesseret i at bruge 10 00:00:26,380 --> 00:00:27,630 noget som Node.js. 11 00:00:27,630 --> 00:00:29,770 12 00:00:29,770 --> 00:00:33,320 >> Vi slags starter seminaret fra ved bare tale om en lille smule af det 13 00:00:33,320 --> 00:00:36,970 slags baggrund skalerbarhed perspektiver Node.js, og derefter 14 00:00:36,970 --> 00:00:39,240 Vi flytter til nogle kode eksempler. 15 00:00:39,240 --> 00:00:42,340 Og jeg vil have koden på en hjemmeside, og du kan se på koden. 16 00:00:42,340 --> 00:00:45,475 Og efter seminaret, vil jeg sortere snak om, hvordan du kan oprette Node.js 17 00:00:45,475 --> 00:00:48,220 på din computer. 18 00:00:48,220 --> 00:00:48,710 >> OK. 19 00:00:48,710 --> 00:00:49,760 Så lad os komme i gang. 20 00:00:49,760 --> 00:00:53,700 Så jeg tror bare jeg ønsker at tale om webservere, virkelig, først. 21 00:00:53,700 --> 00:00:59,730 Og for at starte denne diskussion, jeg dybest set har et diagram, der er fra 22 00:00:59,730 --> 00:01:04,269 lærebog anvendes til CS61, som dybest set viser interaktionen 23 00:01:04,269 --> 00:01:08,510 mellem en klient proces, ligesom din web browser eller gerne dit mål klient eller 24 00:01:08,510 --> 00:01:11,340 sådan noget, og en web-server. 25 00:01:11,340 --> 00:01:15,150 Så denne type ligner den billede, som du så i foredrag om 26 00:01:15,150 --> 00:01:19,270 Onsdag hvor dybest set har vi nogle klient proces som Google Chrome. 27 00:01:19,270 --> 00:01:22,980 >> Og så trin et er klient sender en anmodning. 28 00:01:22,980 --> 00:01:27,510 Så det kan være noget lignende og lad os besøg, ved jeg ikke, CS50.net. 29 00:01:27,510 --> 00:01:29,320 Så vi udstede denne anmodning. 30 00:01:29,320 --> 00:01:34,280 Og er der nogen huske navnet på den protokol, der angiver, hvordan der 31 00:01:34,280 --> 00:01:35,610 skal struktureres anmodning? 32 00:01:35,610 --> 00:01:36,382 Yep. 33 00:01:36,382 --> 00:01:37,650 >> PUBLIKUM: [uhørligt]. 34 00:01:37,650 --> 00:01:38,150 >> KEVIN SCHMID: Præcis. 35 00:01:38,150 --> 00:01:40,100 Så det er ligesom HTTP, right? 36 00:01:40,100 --> 00:01:44,720 Så dybest set specifikationen for hvordan denne anmodning bør faktisk lagt 37 00:01:44,720 --> 00:01:47,450 ud, fordi i slutningen af ​​dagen, denne anmodning er egentlig bare gerne et 38 00:01:47,450 --> 00:01:50,240 streng, der stort set siger, jeg vil have det. 39 00:01:50,240 --> 00:01:53,580 Og specifikationen for det er HTTP. 40 00:01:53,580 --> 00:01:55,270 Så det er ligesom en protokol. 41 00:01:55,270 --> 00:01:57,920 >> Så serveren modtager denne anmodning. 42 00:01:57,920 --> 00:02:01,610 Så du fyre har en web-server installeret i CS50 apparatet. 43 00:02:01,610 --> 00:02:02,460 Det er Apache. 44 00:02:02,460 --> 00:02:06,230 Og i denne uge, når du arbejder på problemet sæt syv, vil du rent faktisk skal arbejde 45 00:02:06,230 --> 00:02:08,160 med at web-server. 46 00:02:08,160 --> 00:02:12,380 Så serveren modtager denne anmodning, og så har det at slags ridse sin 47 00:02:12,380 --> 00:02:15,090 hoved og sige ligesom godt, hvad gør jeg med det? 48 00:02:15,090 --> 00:02:20,060 >> Så er baseret på, hvad det beslutter at gøre, så det kan have at kontakte nogle slags 49 00:02:20,060 --> 00:02:20,730 ressource. 50 00:02:20,730 --> 00:02:23,700 Og denne ressource kunne være en masse forskellige ting. 51 00:02:23,700 --> 00:02:26,810 For én, kan det være lige som en statisk HTML-fil. 52 00:02:26,810 --> 00:02:29,820 Så det kunne bare være ligesom nogle HTML, der er ligesom for 53 00:02:29,820 --> 00:02:31,100 din personlige hjemmeside. 54 00:02:31,100 --> 00:02:35,360 Det kunne være en statisk fil som et billede eller som en film, som du har. 55 00:02:35,360 --> 00:02:37,660 Det kunne endda nødt til at tale til en form for database 56 00:02:37,660 --> 00:02:39,530 ligesom en MySQL-database. 57 00:02:39,530 --> 00:02:43,910 Så det behøver ikke altid at kommunikere med en ressource, men i 58 00:02:43,910 --> 00:02:45,700 nogle tilfælde, det kunne. 59 00:02:45,700 --> 00:02:47,800 >> Så hvad det kommer til at gøre efter det er det kommer til at 60 00:02:47,800 --> 00:02:49,430 sende tilbage svaret. 61 00:02:49,430 --> 00:02:53,130 Og svaret til dette er også angivet af HTTP. 62 00:02:53,130 --> 00:02:54,830 Så kunden kan modtage det. 63 00:02:54,830 --> 00:02:56,740 Det kan rive det fra hinanden og behandle den. 64 00:02:56,740 --> 00:03:00,900 Og så får du en webside som Google eller CS50.net eller 65 00:03:00,900 --> 00:03:02,240 uanset hvad du gik til. 66 00:03:02,240 --> 00:03:03,100 OK? 67 00:03:03,100 --> 00:03:06,080 >> Så dette er den grundlæggende interaktion, vi kommer til at beskæftige sig med. 68 00:03:06,080 --> 00:03:08,770 Og vi temmelig meget kommer til at være fokus på denne del af 69 00:03:08,770 --> 00:03:10,640 interaktion, serveren. 70 00:03:10,640 --> 00:03:10,990 OK. 71 00:03:10,990 --> 00:03:12,210 Fedt. 72 00:03:12,210 --> 00:03:15,500 Nogen, der har nogen spørgsmål så videre? 73 00:03:15,500 --> 00:03:17,720 OK. 74 00:03:17,720 --> 00:03:22,430 >> Så som vi sagde, webserveren modtager denne HTTP-anmodning, og udsteder derefter dette 75 00:03:22,430 --> 00:03:24,760 HTTP-svar. 76 00:03:24,760 --> 00:03:29,100 Og som vi talte om før, CS50 apparat webserver er Apache. 77 00:03:29,100 --> 00:03:32,490 Så når du fyre arbejde på P sæt syv, du kommer til at arbejde med 78 00:03:32,490 --> 00:03:34,120 Apache webserver. 79 00:03:34,120 --> 00:03:37,890 Du vil aldrig nødt til virkelig at arbejde med Apache direkte for meget. 80 00:03:37,890 --> 00:03:41,920 Du slags konfigurere Apache lidt når du angiver de virtuelle værter eller 81 00:03:41,920 --> 00:03:44,970 v værter og vi får som i en lille smule. 82 00:03:44,970 --> 00:03:50,620 >> Men dybest set, Apache webserver sat op til at arbejde med PHP slags 83 00:03:50,620 --> 00:03:51,730 af ud af boksen. 84 00:03:51,730 --> 00:03:56,170 Så hvad der virkelig sker, er, når du går til en af ​​dine websteder som, siger, 85 00:03:56,170 --> 00:04:00,360 lokale vært skråstreg index.php eller noget, er din browser sender, at 86 00:04:00,360 --> 00:04:04,330 anmodning, og derefter Apache sidder der og tal ud med det at gøre. 87 00:04:04,330 --> 00:04:08,840 Og handlingen er at udføre at kode i index.php og 88 00:04:08,840 --> 00:04:11,330 derefter sende det ud igen. 89 00:04:11,330 --> 00:04:15,640 Så der er der. 90 00:04:15,640 --> 00:04:16,980 Så vi slags talt om dette. 91 00:04:16,980 --> 00:04:21,990 Så det kunne bare tjene en statisk fil eller køre nogle PHP-kode og derefter emne 92 00:04:21,990 --> 00:04:23,510 svaret. 93 00:04:23,510 --> 00:04:27,670 >> Så et fælles spørgsmål, der kan komme op er godt, hvordan vi egentlig beskæftige 94 00:04:27,670 --> 00:04:31,750 med at have flere brugere på samme tid? 95 00:04:31,750 --> 00:04:36,930 Så tænk hvis du var at skrive en web server, hvis du havde en webserver, 96 00:04:36,930 --> 00:04:39,900 du prøvede at skrive i noget som C eller noget lignende, 97 00:04:39,900 --> 00:04:45,150 dybest set kan du tænke over, hvordan der kunne være en slags kode, 98 00:04:45,150 --> 00:04:49,330 ville modtage anmodningen, men så det har at gøre alt dette arbejde på det. 99 00:04:49,330 --> 00:04:53,060 Det kan have til for eksempel, skal du kontakte database eller noget lignende. 100 00:04:53,060 --> 00:04:53,300 Right? 101 00:04:53,300 --> 00:04:56,010 Og så ville det gøre den slags af behandling og derefter 102 00:04:56,010 --> 00:04:57,060 sendes tilbage svaret. 103 00:04:57,060 --> 00:04:58,950 Så det er ligesom den høje niveau overblik. 104 00:04:58,950 --> 00:05:04,210 >> Men det er ikke umiddelbart indlysende, hvordan du kan gøre det, så to personer eller 105 00:05:04,210 --> 00:05:09,040 endda 1.000 mennesker kunne arbejde med din web-server på samme tid. 106 00:05:09,040 --> 00:05:14,880 Så den løsning, Apache bruger kaldes tråde eller processer. 107 00:05:14,880 --> 00:05:16,770 Så du har måske hørt om disse vilkår før. 108 00:05:16,770 --> 00:05:22,190 Det er OK, hvis du ikke har, men bare tænke om tråde eller processer som måder for 109 00:05:22,190 --> 00:05:26,290 et operativsystem eller en bruger program eller noget lignende, eller en web-server 110 00:05:26,290 --> 00:05:28,810 at slags udføre flere ting på én gang. 111 00:05:28,810 --> 00:05:31,760 Så du har måske hørt udtrykket som tråde for henrettelse. 112 00:05:31,760 --> 00:05:34,140 Så det er lidt som om du er slags multitasking. 113 00:05:34,140 --> 00:05:37,710 >> Og hvis du har set på kassen af ​​din laptop, eller noget lignende, 114 00:05:37,710 --> 00:05:43,040 multicore, hvad du kan gøre, er at du kan køre to forskellige tråde på forskellige 115 00:05:43,040 --> 00:05:46,700 dele af CPU'en, så de kan rent faktisk sker på samme tid. 116 00:05:46,700 --> 00:05:48,100 Så det er virkelig kraftfuld. 117 00:05:48,100 --> 00:05:52,270 Og det er lidt af Apaches løsning på dette problem. 118 00:05:52,270 --> 00:05:57,900 >> Så er der lidt ligesom eventuelle problemer med denne tilgang selv? 119 00:05:57,900 --> 00:05:59,870 Så jeg tror jeg slags skrev dem der. 120 00:05:59,870 --> 00:06:03,440 Men begge slags bruge en masse hukommelse. 121 00:06:03,440 --> 00:06:07,490 Det er meget dyrt at skabe en tråd eller en proces. 122 00:06:07,490 --> 00:06:11,750 >> Og en del af begrundelsen er, at bare ligesom når du kører et C-program 123 00:06:11,750 --> 00:06:15,090 som din primære og derefter at opkald en anden funktion, der har 124 00:06:15,090 --> 00:06:16,520 en slags skorsten. 125 00:06:16,520 --> 00:06:19,910 Så tråde kræver også en helt særskilt stak der 126 00:06:19,910 --> 00:06:21,220 kan være ganske store. 127 00:06:21,220 --> 00:06:25,170 Og hvis du kan forestille dig at have tonsvis af brugere på dit websted, ville du have 128 00:06:25,170 --> 00:06:26,280 en masse forskellige tråde. 129 00:06:26,280 --> 00:06:28,230 Det er en masse af stakke til administrere og vedligeholde. 130 00:06:28,230 --> 00:06:31,280 Så det er store hukommelse forbrug. 131 00:06:31,280 --> 00:06:35,650 >> Og så også, lad os sige, at du kun har én CPU, eller lad os sige du har 132 00:06:35,650 --> 00:06:38,460 flere tråde end du har disse multicores. 133 00:06:38,460 --> 00:06:38,730 Right? 134 00:06:38,730 --> 00:06:43,280 Så lad os sige, du havde 10 tråde og du kun havde fem CPU'er. 135 00:06:43,280 --> 00:06:46,260 Du slags nødt til at gøre denne ting, hvor du skifte mellem den aktuelle 136 00:06:46,260 --> 00:06:49,090 én, der kører, fordi du kan ikke køre alle 10 på en gang. 137 00:06:49,090 --> 00:06:50,980 Og det hedder en sammenhæng switch. 138 00:06:50,980 --> 00:06:54,260 Og dette udtryk har faktisk et par forskellige sammenhænge, ​​men lad os bare 139 00:06:54,260 --> 00:06:56,620 Tænk på det som at skifte mellem to tråde. 140 00:06:56,620 --> 00:06:59,730 Det kan være temmelig dyre, fordi dybest set, hvad du skal gøre er at du 141 00:06:59,730 --> 00:07:03,340 nødt til at stoppe, hvad du laver, skal du gemme tilstand af at der kører tråd, og 142 00:07:03,340 --> 00:07:05,440 derefter skifte til et andet sted. 143 00:07:05,440 --> 00:07:09,420 >> Så betyder alle slags ser motivation hvorfor tråde og 144 00:07:09,420 --> 00:07:12,030 processer kan være lidt pladskrævende? 145 00:07:12,030 --> 00:07:13,840 Og vidste du et spørgsmål? 146 00:07:13,840 --> 00:07:14,376 OK. 147 00:07:14,376 --> 00:07:15,070 Fedt. 148 00:07:15,070 --> 00:07:18,090 Nogen har nogen spørgsmål? 149 00:07:18,090 --> 00:07:19,620 OK. 150 00:07:19,620 --> 00:07:26,720 >> Så hvis vi tager et skridt tilbage til en anden, der er lidt ligesom en 151 00:07:26,720 --> 00:07:30,350 bemærkning om, at vi kan lave om en masse af web-applikationer. 152 00:07:30,350 --> 00:07:34,810 Og det er virkelig, at en masse af dem faktisk ikke gøre så meget nyttige 153 00:07:34,810 --> 00:07:37,140 arbejde inde i en tråd. 154 00:07:37,140 --> 00:07:41,170 Så har nogen gang på P sæt syv på alle? 155 00:07:41,170 --> 00:07:45,650 Så vil du måske beskrive nogle af de dele? 156 00:07:45,650 --> 00:07:47,850 Har du arbejdet på login eller sådan noget? 157 00:07:47,850 --> 00:07:49,330 >> PUBLIKUM: Nej. 158 00:07:49,330 --> 00:07:49,780 >> KEVIN SCHMID: OK. 159 00:07:49,780 --> 00:07:50,150 Det gør ikke noget. 160 00:07:50,150 --> 00:07:50,900 Undskyld. 161 00:07:50,900 --> 00:07:55,790 Men dybest set, i P sæt, er du vil være at gøre en masse slags 162 00:07:55,790 --> 00:07:59,760 forespørgsler til en database for at få nogle oplysninger fra denne database. 163 00:07:59,760 --> 00:08:03,330 Og hvad din kode vil gøre, hvad der Apache proces eller 164 00:08:03,330 --> 00:08:06,030 at Apache tråden kommer til at gøre mens det har at kontakte 165 00:08:06,030 --> 00:08:08,990 database er det slags kommer til at være sidder der, og det vil være 166 00:08:08,990 --> 00:08:12,130 venter for databasen til at svare. 167 00:08:12,130 --> 00:08:16,290 >> Nu, lyder måske ikke som den helt store håndtere, fordi databasen er på din 168 00:08:16,290 --> 00:08:18,240 CS50 apparat, right? 169 00:08:18,240 --> 00:08:22,930 Men der er en vis form for netværk latens der, fordi nu på nettet 170 00:08:22,930 --> 00:08:26,830 server har at udstede sit eget anmodning til databasen til at kommunikere med 171 00:08:26,830 --> 00:08:29,520 database og derefter få at oplysninger tilbage. 172 00:08:29,520 --> 00:08:33,190 Så nu er det som godt vente på mig, jeg er kommer til at gå få noget fra 173 00:08:33,190 --> 00:08:35,770 database og så er der en masse venter foregår. 174 00:08:35,770 --> 00:08:36,870 Giver det mening? 175 00:08:36,870 --> 00:08:38,580 >> Og for nogle ting er det ikke så slemt. 176 00:08:38,580 --> 00:08:41,950 Hvis det bare har at, for eksempel, access memory, er det ikke lide 177 00:08:41,950 --> 00:08:44,100 forfærdelig I / O-latency. 178 00:08:44,100 --> 00:08:47,110 Og når jeg siger, I / O-latency, hvad jeg henviser til, er ligesom enhver form for lignende 179 00:08:47,110 --> 00:08:48,290 input output. 180 00:08:48,290 --> 00:08:52,950 Men for at få adgang til en fil på disken, som hvis jeg ønskede at tjene den statiske HTML 181 00:08:52,950 --> 00:08:57,850 fil, som var på min webside eller noget, jeg slags nødt til at 182 00:08:57,850 --> 00:09:02,310 stoppe for lidt, læse filen i fra disken, og derefter i 183 00:09:02,310 --> 00:09:04,400 den proces jeg venter. 184 00:09:04,400 --> 00:09:06,700 Jeg gør ikke nyttigt arbejde. 185 00:09:06,700 --> 00:09:11,270 >> Dette er ikke tilfældet for alt, men det er almindelig i applikationer som P sæt 186 00:09:11,270 --> 00:09:13,960 syv og en masse ansøgninger at du ikke er 187 00:09:13,960 --> 00:09:15,440 faktisk gør meget tænkning. 188 00:09:15,440 --> 00:09:19,090 Og når jeg siger tankegang, mener jeg ligesom beregningsmæssige arbejde. 189 00:09:19,090 --> 00:09:23,270 Så beregningsmæssige arbejde kunne være noget gerne sige, du ville 190 00:09:23,270 --> 00:09:26,590 skrive en web-server, der netop beregnet n'te Fibonacci-tal. 191 00:09:26,590 --> 00:09:29,300 Det lyder ikke som en særlig sjov webserver. 192 00:09:29,300 --> 00:09:34,220 Ligesom jeg ville ikke forvente, at webstedet til at være den næste Facebook, men der er nogle 193 00:09:34,220 --> 00:09:35,610 slags beregningsmæssige arbejde. 194 00:09:35,610 --> 00:09:39,570 >> Og du kan forestille dig at udskifte det med en anden form for interessant 195 00:09:39,570 --> 00:09:43,070 beregningsmæssige arbejde. 196 00:09:43,070 --> 00:09:46,050 Lad os sige, du skrev noget , der beregnes grader af 197 00:09:46,050 --> 00:09:49,170 adskillelse mellem to mennesker eller noget lignende. 198 00:09:49,170 --> 00:09:51,860 Så det indebærer en vis form beregning, right? 199 00:09:51,860 --> 00:09:56,630 Og selv da, at gøre, at du stadig har at gøre en masse for at vente på måske 200 00:09:56,630 --> 00:09:59,550 du nødt til at søge en database til at se op, hvem der er venner med hvem eller 201 00:09:59,550 --> 00:10:00,600 noget lignende. 202 00:10:00,600 --> 00:10:03,510 Så der er den slags begreb beregningsmæssige arbejde. 203 00:10:03,510 --> 00:10:05,260 Giver det mening? 204 00:10:05,260 --> 00:10:08,258 Er der nogen, der har nogen spørgsmål? 205 00:10:08,258 --> 00:10:11,960 >> Åh, og jeg tror jeg sætte chat-servere der fordi chat-servere er lidt 206 00:10:11,960 --> 00:10:13,240 et andet godt eksempel på dette. 207 00:10:13,240 --> 00:10:15,250 En chat-server ikke har at gøre meget tænkning. 208 00:10:15,250 --> 00:10:18,350 Det har bare at vente for folk at sende beskeder og derefter når 209 00:10:18,350 --> 00:10:19,800 de gør, så send 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å bare for at opsummere igen, Apache og lignende webservere som denne gaffel en 213 00:10:28,180 --> 00:10:31,470 masse af tråde og processer, der kan være slags spild. 214 00:10:31,470 --> 00:10:37,530 Så jeg gætter på det spørgsmål, der kan komme fra der har vi brug for at have 215 00:10:37,530 --> 00:10:39,610 flere tråde og processer? 216 00:10:39,610 --> 00:10:41,890 Hvad hvis vi bare havde en? 217 00:10:41,890 --> 00:10:45,710 >> Så lad os slags male et billede af, hvad det ville se ud. 218 00:10:45,710 --> 00:10:47,810 Så lad os bruge én tråd. 219 00:10:47,810 --> 00:10:48,660 OK? 220 00:10:48,660 --> 00:10:52,790 Så bare forestille sig dette med én tråd. 221 00:10:52,790 --> 00:10:56,600 >> Lad os antage, vi ikke virkelig gør at meget nyttigt - og når jeg siger 222 00:10:56,600 --> 00:10:59,450 nyttigt, jeg mener beregningsmæssige arbejde - 223 00:10:59,450 --> 00:11:01,130 i de flere tråde før. 224 00:11:01,130 --> 00:11:04,180 Så lad os slags konsolidere alt i én tråd. 225 00:11:04,180 --> 00:11:07,780 Så hvad hvis vi havde en tråd den slags af bare går rundt i loop og 226 00:11:07,780 --> 00:11:10,880 konstant kontrol gjorde noget ny ske. 227 00:11:10,880 --> 00:11:15,130 Så for eksempel, noget nyt skete kunne betyde, jeg fik noget tilbage fra 228 00:11:15,130 --> 00:11:19,310 databasen, eller nogen sendt mig en ny HTTP-anmodning. 229 00:11:19,310 --> 00:11:22,290 Så det er slags arrangementer at ske, ikke? 230 00:11:22,290 --> 00:11:26,130 >> Og så hvad jeg kan gøre, når de nye Ting sker, er i samme tråd 231 00:11:26,130 --> 00:11:30,120 af udførelse, denne enkelt tråd af udførelse, jeg kan kalde noget kode, 232 00:11:30,120 --> 00:11:32,410 ville håndtere denne særlige ting. 233 00:11:32,410 --> 00:11:36,640 Så for eksempel, hvis jeg fik noget tilbage fra databasen, kunne jeg køre min 234 00:11:36,640 --> 00:11:40,960 lille beregningsmæssige del af det, faktisk bare forbereder ting at 235 00:11:40,960 --> 00:11:42,620 sende tilbage til brugeren. 236 00:11:42,620 --> 00:11:46,710 Det gør den slags mening? 237 00:11:46,710 --> 00:11:49,940 >> Men hvad er egentlig det konsekvenser af dette? 238 00:11:49,940 --> 00:11:50,660 Right? 239 00:11:50,660 --> 00:11:53,730 Fordi vi har skrevet en masse kode, - 240 00:11:53,730 --> 00:11:58,330 og jeg bare kommer til at springe fremad i dias, hvis det er OK. 241 00:11:58,330 --> 00:12:00,930 Så hvis du ikke har noget imod, jeg er bare kommer til at tage et skridt tilbage. 242 00:12:00,930 --> 00:12:03,410 Så denne slags ting er kaldes en begivenhed løkke. 243 00:12:03,410 --> 00:12:04,070 OK? 244 00:12:04,070 --> 00:12:07,240 Og det er sådan det grundlæggende Ideen bag Node.js. 245 00:12:07,240 --> 00:12:11,240 >> Så hvad Node.js egentlig laver som en web server er at der er en enkelt tråd 246 00:12:11,240 --> 00:12:14,850 der er dybest set går rundt i en løkke som en mens en slags under 247 00:12:14,850 --> 00:12:18,510 hætten af ​​Node.js, der er konstant kontrol, modtog vi nye ting? 248 00:12:18,510 --> 00:12:22,720 Og så vil det køre handlere at du opretter. 249 00:12:22,720 --> 00:12:26,720 Men et godt spørgsmål at stille, er, hvordan kan vi gøre dette ske 250 00:12:26,720 --> 00:12:28,090 med eksisterende ting? 251 00:12:28,090 --> 00:12:32,440 >> Så jeg sætte en linje af C-kode her, at dybest set ligner det at åbne en 252 00:12:32,440 --> 00:12:33,060 fil, right? 253 00:12:33,060 --> 00:12:36,090 Jeg Hun kom bare ud med et album. 254 00:12:36,090 --> 00:12:39,600 Så jeg var nødt til at åbne hende en ny fil. 255 00:12:39,600 --> 00:12:43,810 Så den måde, vores C-kode til drift - 256 00:12:43,810 --> 00:12:47,890 og jeg gætte grunden til jeg valgte filer var fordi det er sådan det omfang 257 00:12:47,890 --> 00:12:52,000 af I / O-arbejde, som vi har gjort i C en fornemmelse af, at der er input-output. 258 00:12:52,000 --> 00:12:55,070 Så vi kalder denne kode, gør dette f åben. 259 00:12:55,070 --> 00:12:59,370 Og derefter på den næste linje i vores program, kan vi nu arbejde med f.. 260 00:12:59,370 --> 00:13:02,710 >> Så det ville være et eksempel på noget, det er ligesom synkron eller 261 00:13:02,710 --> 00:13:06,850 blokering på grund på den første linje der venter vi, indtil vi 262 00:13:06,850 --> 00:13:08,110 få åbnet filen. 263 00:13:08,110 --> 00:13:12,260 Så på den anden linje, ved vi, at vi kan arbejde med f, men det betyder, at 264 00:13:12,260 --> 00:13:16,240 at anden linje kan ikke rigtig køre indtil den første linie er udført. 265 00:13:16,240 --> 00:13:17,760 Giver det mening? 266 00:13:17,760 --> 00:13:20,890 >> Så det ville være dårligt at sætte i en event handler. 267 00:13:20,890 --> 00:13:23,920 Og grunden til det er, at denne slags ventetider, right? 268 00:13:23,920 --> 00:13:26,500 Så det ville vende os tilbage til de samme ting. 269 00:13:26,500 --> 00:13:29,470 Og nu vil vi ikke engang har fordel af flere tråde eller 270 00:13:29,470 --> 00:13:32,390 processer, fordi vi fik en tråd i Node.js. 271 00:13:32,390 --> 00:13:35,496 Giver det mening for alle? 272 00:13:35,496 --> 00:13:35,990 >> PUBLIKUM: Vent. 273 00:13:35,990 --> 00:13:36,980 Så hvad er erstatningen? 274 00:13:36,980 --> 00:13:37,840 >> KEVIN SCHMID: Åh, så ja. 275 00:13:37,840 --> 00:13:39,560 Så jeg har tænkt mig at komme til udskiftningen. 276 00:13:39,560 --> 00:13:40,430 OK. 277 00:13:40,430 --> 00:13:42,960 Så hvad hvis vi havde noget der lignede dette? 278 00:13:42,960 --> 00:13:45,730 Så hvad hvis nu jeg redigerede f åbent lidt? 279 00:13:45,730 --> 00:13:48,370 Så jeg passerer i samme to argumenter som før. 280 00:13:48,370 --> 00:13:52,610 Jeg elsker stadig den nye sang at hun kom ud med. 281 00:13:52,610 --> 00:13:57,260 Men jeg passerer en tredje ting, som er denne variabel kaldet kode. 282 00:13:57,260 --> 00:14:02,280 >> Men hvad er koden faktisk i denne sammenhæng? 283 00:14:02,280 --> 00:14:05,360 Er det som en almindelig C-variabel? 284 00:14:05,360 --> 00:14:06,740 Det er en funktion, right? 285 00:14:06,740 --> 00:14:09,450 Og det kan være lidt underligt, fordi Jeg er faktisk ligesom nu passerer et 286 00:14:09,450 --> 00:14:12,320 kan fungere i en anden funktion. 287 00:14:12,320 --> 00:14:14,400 >> Så et par ting at bemærke om dette. 288 00:14:14,400 --> 00:14:17,145 Én, jeg faktisk ikke kalde koden funktion. 289 00:14:17,145 --> 00:14:20,650 Så du kan ikke se koden med venstre paren, Højre parentes. 290 00:14:20,650 --> 00:14:23,010 Jeg er bare passerer i kode. 291 00:14:23,010 --> 00:14:26,990 Og i C, hvad det rent faktisk ville gøre er at give mig en pointer til, at den faktiske 292 00:14:26,990 --> 00:14:29,740 kode, og så dette kunne køre den. 293 00:14:29,740 --> 00:14:33,350 Men tænk over det, som du er passerer kode, når 294 00:14:33,350 --> 00:14:35,150 at filen åbnes. 295 00:14:35,150 --> 00:14:41,430 >> Men hvad det betyder er, at nu resten af ​​mit program som kunne gøre 296 00:14:41,430 --> 00:14:47,050 andre ting, fortsætte kan gøre andre ting, mens vi ikke rigtig vente, men 297 00:14:47,050 --> 00:14:50,890 bare have i bagsiden af ​​vores hoveder, når den pågældende fil åbne, køre som 298 00:14:50,890 --> 00:14:52,130 kode øverst. 299 00:14:52,130 --> 00:14:53,390 Giver det mening? 300 00:14:53,390 --> 00:14:58,060 >> Og nu ideen bag Node.js er, at koden i at gøre ting med f 301 00:14:58,060 --> 00:15:04,590 del skal være temmelig kort og enkel og ligetil og ikke rigtig være 302 00:15:04,590 --> 00:15:06,160 meget regnekraft. 303 00:15:06,160 --> 00:15:09,390 Det kan have til at åbne en anden fil, men der bør også være temmelig hurtig 304 00:15:09,390 --> 00:15:14,710 fordi det bare skal sige gøre en anden f åbne og derefter kalde denne anden kode. 305 00:15:14,710 --> 00:15:19,100 >> Så bare for at være helt klar, f åbner der gør den nye Katy Perry sang 306 00:15:19,100 --> 00:15:23,060 Udført mp3, der kommer til at temmelig meget tilbage straks. 307 00:15:23,060 --> 00:15:27,820 Og så kan vi bare fortsætte med at gøre andre ting, fordi alt, hvad der nu f 308 00:15:27,820 --> 00:15:33,410 åben indkaldelse gør er at fortælle stort set den underliggende f åben kode åbne denne fil 309 00:15:33,410 --> 00:15:36,020 og når du er færdig åbne denne fil, eller når du får det tilbage, 310 00:15:36,020 --> 00:15:37,480 derefter køre denne kode. 311 00:15:37,480 --> 00:15:39,540 Men det betyder faktisk ikke køre denne kode. 312 00:15:39,540 --> 00:15:41,815 Og du havde et spørgsmål? 313 00:15:41,815 --> 00:15:46,180 >> PUBLIKUM: Du syntes at antyde et par tider, tilføjer beregningsmæssigt 314 00:15:46,180 --> 00:15:50,545 intensiv kode slags bryde [Uhørligt] drevet system. 315 00:15:50,545 --> 00:15:51,795 [Uhørligt]? 316 00:15:51,795 --> 00:15:54,450 317 00:15:54,450 --> 00:15:55,290 >> KEVIN SCHMID: Det er et godt spørgsmål. 318 00:15:55,290 --> 00:15:59,280 Så jeg har faktisk et eksempel på, hvordan du kunne integrere beregningsmæssigt 319 00:15:59,280 --> 00:16:01,090 intensiv kode i en lille smule. 320 00:16:01,090 --> 00:16:03,620 Så når vi kommer til de kodeeksempler, Jeg vil være sikker på at trække det ene. 321 00:16:03,620 --> 00:16:04,700 Er det OK? 322 00:16:04,700 --> 00:16:05,950 Tak. 323 00:16:05,950 --> 00:16:07,690 324 00:16:07,690 --> 00:16:08,750 >> Hvad var dit navn? 325 00:16:08,750 --> 00:16:10,620 >> PUBLIKUM: Aaron. 326 00:16:10,620 --> 00:16:14,830 >> KEVIN SCHMID: Aaron bringer en meget god pointe, som er, at hvis jeg havde 327 00:16:14,830 --> 00:16:18,560 nogle regnekraft kode i det gøre ting med f del, resten af 328 00:16:18,560 --> 00:16:22,880 mit program kan ikke køre og kan ikke lytte for nye anmodninger eller noget, før alle 329 00:16:22,880 --> 00:16:24,270 at ting er færdig. 330 00:16:24,270 --> 00:16:27,390 Så hvis jeg skriver Node kode i almindelighed medmindre vi gør noget som jeg har tænkt mig 331 00:16:27,390 --> 00:16:33,060 at foreslå senere, når vi ser på kode eksempler, jeg er nødt til at være sikker på at 332 00:16:33,060 --> 00:16:36,060 min kode ikke binde denne begivenhed løkke. 333 00:16:36,060 --> 00:16:38,120 Giver det mening? 334 00:16:38,120 --> 00:16:38,350 OK. 335 00:16:38,350 --> 00:16:40,040 Fedt. 336 00:16:40,040 --> 00:16:47,090 >> Så Node.js tilbyder denne ramme, du kan bygge disse hændelsesstyrede 337 00:16:47,090 --> 00:16:48,210 servere med. 338 00:16:48,210 --> 00:16:53,460 Så det har den slags asynkron ikke-blokerende I / O-biblioteker, hvorimod 339 00:16:53,460 --> 00:16:56,800 standard C-biblioteker, som vi har været arbejder med, ligesom hvis du bare 340 00:16:56,800 --> 00:16:59,500 bruge dem på samme måde, som vi har brugt dem med f åbner og 341 00:16:59,500 --> 00:17:03,000 stuff, er dem, der blokerer, fordi du faktisk nødt til at vente på 342 00:17:03,000 --> 00:17:04,470 at filen for at åbne. 343 00:17:04,470 --> 00:17:09,290 >> Men Node.js giver dig det, og det dybest set binder ind i Googles V8 344 00:17:09,290 --> 00:17:14,030 JavaScript-motor, der er årsagen at Chrome er så hurtigt på behandling 345 00:17:14,030 --> 00:17:17,040 JavaScript, fordi det har denne V8-motor. 346 00:17:17,040 --> 00:17:22,460 Så jeg ved, det lyder som en af ​​dem WWDC udvikler konferencer ting 347 00:17:22,460 --> 00:17:25,390 hvor de bare smide en flok af brev nummer ting for processorer 348 00:17:25,390 --> 00:17:26,910 og sige dette er så cool. 349 00:17:26,910 --> 00:17:34,200 Men det er cool, at de gjorde dette, fordi JavaScript - 350 00:17:34,200 --> 00:17:37,010 eller måske hvis du ikke er bekendt med JavaScript endnu, fordi vi ikke har haft 351 00:17:37,010 --> 00:17:38,180 forelæsningerne på det - 352 00:17:38,180 --> 00:17:40,770 men JavaScript er et fortolket sprog. 353 00:17:40,770 --> 00:17:41,970 >> Og det er et vigtigt punkt. 354 00:17:41,970 --> 00:17:45,790 Så det er vigtigt for vores web servere til at være hurtig, right? 355 00:17:45,790 --> 00:17:49,970 Og hvis vi bare kører JavaScript kode, som blev fortolket med blot 356 00:17:49,970 --> 00:17:52,130 noget gammelt tolk det kunne være langsom. 357 00:17:52,130 --> 00:17:55,980 Så Node fordele ved at have denne super hurtig V8 tolk. 358 00:17:55,980 --> 00:17:59,580 Og jeg ved ikke, om de kaldte det fordi V8 slag i panden 359 00:17:59,580 --> 00:18:01,110 ting, men OK. 360 00:18:01,110 --> 00:18:07,070 >> Så jeg har forberedt nogle eksempler på denne URL. 361 00:18:07,070 --> 00:18:10,490 Efter seminaret, jeg slags vil tale om, hvordan du kan få Node sæt 362 00:18:10,490 --> 00:18:13,570 op, men for nu, jeg bare slags ønsker at gå gennem nogle kode eksempler. 363 00:18:13,570 --> 00:18:17,250 Så hvis du ønsker at følge med, hele kildekoden er tilgængelig der. 364 00:18:17,250 --> 00:18:18,720 OK? 365 00:18:18,720 --> 00:18:22,280 >> Så jeg vil forlade denne URL op til en lille. 366 00:18:22,280 --> 00:18:24,440 Og så er jeg bare kommer til at skifte til terminalen. 367 00:18:24,440 --> 00:18:29,670 368 00:18:29,670 --> 00:18:34,400 Er alle godt med denne webadresse? 369 00:18:34,400 --> 00:18:37,990 Så jeg har tænkt mig at skifte over til min terminal her. 370 00:18:37,990 --> 00:18:42,030 >> Så her er den kode, Jeg har i dag. 371 00:18:42,030 --> 00:18:43,960 Hvorfor starter vi ikke med simpler.js fil? 372 00:18:43,960 --> 00:18:49,110 373 00:18:49,110 --> 00:18:52,100 Den anden ting er, at alt dette kode vil blive skrevet i 374 00:18:52,100 --> 00:18:56,660 JavaScript som du måske eller kan ikke være bekendt med. 375 00:18:56,660 --> 00:19:00,170 Jeg gætte et par ting er, at mange af JavaScript-kode er den slags 376 00:19:00,170 --> 00:19:04,000 syntaks og struktur er meget lig C, så du kan slags samle det op som 377 00:19:04,000 --> 00:19:05,020 du gå. 378 00:19:05,020 --> 00:19:08,750 Jeg har prøvet at skrive en masse af de Koden for dette begynder på en måde, der er 379 00:19:08,750 --> 00:19:11,230 svarende til C, så det er lidt mere læsevenlig. 380 00:19:11,230 --> 00:19:15,980 Men som vi fremskridt, vil jeg være viser nogle af de ekstra 381 00:19:15,980 --> 00:19:18,980 funktioner i JavaScript, er slags cool. 382 00:19:18,980 --> 00:19:21,510 >> Men lad os se på denne prøve program. 383 00:19:21,510 --> 00:19:24,820 Jeg gætter alt er afskåret der. 384 00:19:24,820 --> 00:19:28,500 Jeg skal bare til at fastsætte, at reel hurtigt, hvis det er OK eller ej. 385 00:19:28,500 --> 00:19:31,400 Jeg ved ikke, hvad det kommer til at gøre. 386 00:19:31,400 --> 00:19:34,660 Er det lidt bedre? 387 00:19:34,660 --> 00:19:36,510 Kan du se den var og kram? 388 00:19:36,510 --> 00:19:39,320 OK. 389 00:19:39,320 --> 00:19:44,120 >> Så den første linje er ligesom JavaScript version af en variabel 390 00:19:44,120 --> 00:19:44,800 erklæring. 391 00:19:44,800 --> 00:19:49,870 Så bare for at fremhæve, hvad det ville se ud i C. Så det er ligesom 392 00:19:49,870 --> 00:19:52,620 mig at sige indeks er lig med tre eller noget lignende. 393 00:19:52,620 --> 00:19:55,740 Så jeg ikke angive typen. 394 00:19:55,740 --> 00:20:00,780 JavaScript har dog typer, men det er meget dynamisk skrevet i naturen, så 395 00:20:00,780 --> 00:20:02,580 ikke giver nogen form for type på det. 396 00:20:02,580 --> 00:20:03,670 Så det har blot var. 397 00:20:03,670 --> 00:20:05,320 Det er ligesom variabel. 398 00:20:05,320 --> 00:20:05,920 OK? 399 00:20:05,920 --> 00:20:08,340 >> Og jeg ringer denne variabel HTTP. 400 00:20:08,340 --> 00:20:12,480 Og på min højre side, har jeg den udtryk, som jeg ønsker at sætte i HTTP. 401 00:20:12,480 --> 00:20:14,960 Og det siger kræver HTTP. 402 00:20:14,960 --> 00:20:18,500 Så dette er slags ligner at inkludere. 403 00:20:18,500 --> 00:20:22,940 Det er lidt mere ligesom kraftigere end omfatter i den forstand, der omfatter 404 00:20:22,940 --> 00:20:26,100 ville bare kopiere og indsætte header fil til funktionstasterne prototyper eller 405 00:20:26,100 --> 00:20:27,930 hvad med de definitioner type. 406 00:20:27,930 --> 00:20:30,590 Men kræver rent faktisk sker at få os koden. 407 00:20:30,590 --> 00:20:33,280 >> Så du kan tænke på det som importere noget kode. 408 00:20:33,280 --> 00:20:37,960 Så et eller andet sted i Node.js modulet systemet eller hvad, de har alt dette 409 00:20:37,960 --> 00:20:40,790 HTTP-server-kode, så jeg er bare hente det for min egen 410 00:20:40,790 --> 00:20:43,130 personlig brug i dette program. 411 00:20:43,130 --> 00:20:44,260 OK? 412 00:20:44,260 --> 00:20:46,930 >> Så har jeg denne funktion at jeg har skrevet. 413 00:20:46,930 --> 00:20:50,330 Og bemærk, jeg behøvede ikke at specificere afkastet type eller typen af ​​den 414 00:20:50,330 --> 00:20:51,140 argumenter igen. 415 00:20:51,140 --> 00:20:54,440 Så slags løs indtastet den slags mening. 416 00:20:54,440 --> 00:20:57,290 To argumenter som den træffer i, anmodningen og svar. 417 00:20:57,290 --> 00:21:02,080 Så det er begrebsmæssigt lidt ligesom kender fra det billede, vi havde 418 00:21:02,080 --> 00:21:05,280 på skærmen, før fordi vi får denne anmodning, at vi 419 00:21:05,280 --> 00:21:06,410 har fra brugeren. 420 00:21:06,410 --> 00:21:09,170 Og så har vi et svar, vi kan skrive ting til. 421 00:21:09,170 --> 00:21:15,060 >> Så den første linje i denne gør res.writeHead 200 og så er denne 422 00:21:15,060 --> 00:21:17,070 indholdstype tekst sletten. 423 00:21:17,070 --> 00:21:19,300 Så lad os brik dette hinanden lidt. 424 00:21:19,300 --> 00:21:22,340 Så lad os bare fokusere på res.write for lidt. 425 00:21:22,340 --> 00:21:28,420 Så skriv er dybest set, og skrive hoved, er bare måder at slags skrive 426 00:21:28,420 --> 00:21:29,960 ting til svaret. 427 00:21:29,960 --> 00:21:30,770 OK? 428 00:21:30,770 --> 00:21:36,230 Så skriv hovedet, hvis nogen husker fra HTTP foredrag, tror du fyre 429 00:21:36,230 --> 00:21:39,940 huske overskrifter på toppen af ​​HTTP ting? 430 00:21:39,940 --> 00:21:43,580 Så hvorfor jeg ikke bare demo headers hurtigt. 431 00:21:43,580 --> 00:21:44,640 Ville det være nyttigt? 432 00:21:44,640 --> 00:21:45,500 Eller skal vi bare slags - 433 00:21:45,500 --> 00:21:46,070 OK. 434 00:21:46,070 --> 00:21:46,740 Sure. 435 00:21:46,740 --> 00:21:52,340 >> Så når din browser går til google.com eller noget lignende, 436 00:21:52,340 --> 00:21:54,250 Der er faktisk en lidt mere - 437 00:21:54,250 --> 00:21:55,380 det er ligesom en hemmelighed - 438 00:21:55,380 --> 00:21:58,340 Der er ligesom lidt mere information der kommer gennem røret end blot 439 00:21:58,340 --> 00:22:00,180 den lille søgning og alting. 440 00:22:00,180 --> 00:22:03,550 Så for at vise dig det, jeg vil at bruge et program kaldet Curl. 441 00:22:03,550 --> 00:22:04,260 OK? 442 00:22:04,260 --> 00:22:08,020 Så det er noget, du kan køre på Mac OSX kommandolinjen eller i 443 00:22:08,020 --> 00:22:09,830 apparat eller hvad. 444 00:22:09,830 --> 00:22:17,050 Og så hvis jeg Krølle HTTP google.com, Jeg har tænkt mig at se HTML. 445 00:22:17,050 --> 00:22:21,230 Og det er i retfærdighed, bare HTML den slags fortæller dig at 446 00:22:21,230 --> 00:22:24,695 omdirigere til www, hvis din browser ikke automatisk håndtere 447 00:22:24,695 --> 00:22:27,110 omdirigering. 448 00:22:27,110 --> 00:22:33,390 >> Så dette er blot HTML, men jeg har tænkt mig at tilføje til Krølle denne bindestreg jeg flag. 449 00:22:33,390 --> 00:22:33,600 OK? 450 00:22:33,600 --> 00:22:35,600 Og det kommer til at vise mig overskrifterne. 451 00:22:35,600 --> 00:22:40,640 Så dette er også oplysninger, der kommer igennem, når jeg får dette svar. 452 00:22:40,640 --> 00:22:41,260 OK? 453 00:22:41,260 --> 00:22:45,320 >> Så i toppen, kan du se dette HTTP 301 flytte permanent. 454 00:22:45,320 --> 00:22:49,470 Og det er ret vigtigt, fordi dette refererer til status kode. 455 00:22:49,470 --> 00:22:53,750 Så 301 her er status-koden, som er dybest set bare et heltal 456 00:22:53,750 --> 00:22:57,750 der fortæller browseren, eller hvem er læser dette, hvis du foregiver at 457 00:22:57,750 --> 00:23:01,460 du er en browser og du ser dette, dybest set nu, hvis man ser på 458 00:23:01,460 --> 00:23:04,960 det, og du ser en 301, du ved, jeg har at gøre noget særligt baseret på 459 00:23:04,960 --> 00:23:08,810 Særlig skete 301, eller noget baseret på 301. 460 00:23:08,810 --> 00:23:12,640 Så det siger flyttet permanent. 461 00:23:12,640 --> 00:23:17,700 >> Og så, dybest set, vi har en flok af de vigtigste værdi par. 462 00:23:17,700 --> 00:23:22,100 Så vi får placering er www.google.com. 463 00:23:22,100 --> 00:23:25,190 Og så slags alt det andre ting, men dybest set, hvad placeringen er 464 00:23:25,190 --> 00:23:29,662 ordsprog er den nye placering er på www.google.com. 465 00:23:29,662 --> 00:23:33,800 Så nu, hvis du går til google.com, vil du slags se browser slags blink 466 00:23:33,800 --> 00:23:38,770 for en anden og derefter omdirigere dig tilbage til www.google.com. 467 00:23:38,770 --> 00:23:41,840 Så svarene kan indeholde disse overskrifter. 468 00:23:41,840 --> 00:23:43,330 >> Og et par ting at påpege. 469 00:23:43,330 --> 00:23:46,890 Så lad os sige, vi var faktisk en succes i at besøge en webside. 470 00:23:46,890 --> 00:23:49,040 Så lad mig gå til - 471 00:23:49,040 --> 00:23:51,080 hvad er en god hjemmeside? 472 00:23:51,080 --> 00:23:53,285 Jeg er dårlig til at tænke på gode hjemmesider på stedet. 473 00:23:53,285 --> 00:23:53,640 >> PUBLIKUM: Wikipedia. 474 00:23:53,640 --> 00:23:54,160 >> KEVIN SCHMID: OK. 475 00:23:54,160 --> 00:23:56,040 Lad os gøre Wikipedia. 476 00:23:56,040 --> 00:23:58,680 Så her jeg blev flyttet. 477 00:23:58,680 --> 00:23:59,240 Åh vent. 478 00:23:59,240 --> 00:24:00,160 Var jeg? 479 00:24:00,160 --> 00:24:00,890 Ja, jeg var. 480 00:24:00,890 --> 00:24:01,100 OK. 481 00:24:01,100 --> 00:24:03,005 Så jeg fik at gøre www. 482 00:24:03,005 --> 00:24:06,006 Så jeg har tænkt mig at gøre www. 483 00:24:06,006 --> 00:24:09,680 Og som du kan se, her er alle de HTML at browseren vil behandle 484 00:24:09,680 --> 00:24:10,910 Wikipedia. 485 00:24:10,910 --> 00:24:14,055 >> Men hvis jeg holder rulle op her, hvad jeg vil se i toppen - 486 00:24:14,055 --> 00:24:17,800 wow, der er en masse af HTML på Wikipedia - 487 00:24:17,800 --> 00:24:22,550 men hvad jeg kan se i toppen her er denne 200 status kode i modsætning til den 488 00:24:22,550 --> 00:24:24,570 301, som jeg så tidligere. 489 00:24:24,570 --> 00:24:27,100 Og bemærk, at det har en dejlig venlig OK ved siden af. 490 00:24:27,100 --> 00:24:29,470 Så det er ligesom god tilstand kode. 491 00:24:29,470 --> 00:24:31,160 >> Betyder at 200 nummer ser bekendt? 492 00:24:31,160 --> 00:24:34,120 493 00:24:34,120 --> 00:24:39,880 Ja, fordi når jeg gjorde simpler.js, Jeg skrev en 200 der. 494 00:24:39,880 --> 00:24:43,290 Så det er dybest set siger fortælle browser eller hvem der forsøger at komme til 495 00:24:43,290 --> 00:24:45,440 det, at de var en succes. 496 00:24:45,440 --> 00:24:49,040 Eller den slags, som vi lykkedes også. 497 00:24:49,040 --> 00:24:54,320 >> Og der er denne form for speciel syntaks i Javascript for at erklære en 498 00:24:54,320 --> 00:24:59,870 kort af disse taster som indholdstype og disse værdier som tekst sletten. 499 00:24:59,870 --> 00:25:03,780 Så hvis man ser på det svar, vi kommet tilbage fra Wikipedia før, - 500 00:25:03,780 --> 00:25:06,200 Jeg har tænkt mig at forsøge at rulle op lidt hurtigere - 501 00:25:06,200 --> 00:25:09,900 du har disse taster som server og disse værdier Apache. 502 00:25:09,900 --> 00:25:12,120 Så du har fået nøgler og værdier. 503 00:25:12,120 --> 00:25:15,930 Og du kan angive dette i Node, hvad de skal sende tilbage. 504 00:25:15,930 --> 00:25:19,380 >> Så dette er faktisk slags, i nogle måder, og på nogle måder er det ikke 505 00:25:19,380 --> 00:25:23,170 rigtig, men det er lidt lavere niveau end den PHP-kode, som du måske 506 00:25:23,170 --> 00:25:26,980 skriver for P sæt syv fordi PHP og Apache slags tage sig af nogle 507 00:25:26,980 --> 00:25:28,150 af disse ting for dig. 508 00:25:28,150 --> 00:25:32,520 I PHP kan du tilsidesætte standardindstillingen adfærd ved at skrive dine egne overskrifter. 509 00:25:32,520 --> 00:25:35,520 Men i forbindelse med dette, får vi at skrive vores egne overskrifter. 510 00:25:35,520 --> 00:25:38,210 511 00:25:38,210 --> 00:25:41,105 >> Så gør denne linje giver mening at alle, det skrivehoved linje? 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å hvad jeg gør, er jeg afslutte svar ved at sige hej verden. 515 00:25:45,870 --> 00:25:47,040 OK. 516 00:25:47,040 --> 00:25:49,920 Men det er bare en funktion kaldet sagsbehandler. 517 00:25:49,920 --> 00:25:53,510 Så nu har jeg faktisk nødt til at slags gøre noget med denne funktion, right? 518 00:25:53,510 --> 00:25:59,170 >> Så her hvad jeg gør, er der denne linje, som siger VaR server lig 519 00:25:59,170 --> 00:26:03,530 HTTP.create server, og så er jeg passere i sagsbehandleren. 520 00:26:03,530 --> 00:26:06,080 Så det er lidt af Node måde at skabe en server. 521 00:26:06,080 --> 00:26:08,790 Og bemærk, at jeg passerer i sagsbehandleren. 522 00:26:08,790 --> 00:26:12,290 Så dette fortæller createServer funktion, som jeg vil have dig til at gøre mig en 523 00:26:12,290 --> 00:26:16,270 server, og når serveren modtager et svar, jeg har brug for dig til at kalde denne 524 00:26:16,270 --> 00:26:18,680 sagsbehandler funktion. 525 00:26:18,680 --> 00:26:18,990 OK? 526 00:26:18,990 --> 00:26:22,290 >> Så denne linje temmelig meget færdig med det samme. 527 00:26:22,290 --> 00:26:28,780 Så var serveren linje er gjort rigtigt når du gør det temmelig meget. 528 00:26:28,780 --> 00:26:31,770 Jeg mener, det har at etablere nogle interne stat til at vide, at du ville have til 529 00:26:31,770 --> 00:26:35,400 kalder sagsbehandler funktion, men det kommer ikke til at sidde der og 530 00:26:35,400 --> 00:26:37,730 sige har brugeren sendt mig en anmodning endnu? 531 00:26:37,730 --> 00:26:39,270 Har brugeren sendte mig en anmodning endnu? 532 00:26:39,270 --> 00:26:40,780 Så det ikke blokerer. 533 00:26:40,780 --> 00:26:41,650 OK? 534 00:26:41,650 --> 00:26:46,120 >> Så hvad det vil gøre, er det dybest set gemmer nu en pegepind til denne kode, 535 00:26:46,120 --> 00:26:49,670 denne sagsbehandler funktion, og derefter vil køre denne kode, når nogen 536 00:26:49,670 --> 00:26:52,170 fremsætter en anmodning. 537 00:26:52,170 --> 00:26:54,120 Og så gør vi server.listen. 538 00:26:54,120 --> 00:26:56,950 539 00:26:56,950 --> 00:26:59,960 >> 1337 er der temmelig vilkårlig. 540 00:26:59,960 --> 00:27:02,285 Jeg havde ingen særlig grund for at plukke dette nummer. 541 00:27:02,285 --> 00:27:03,860 Det var helt tilfældigt. 542 00:27:03,860 --> 00:27:07,010 Men der bare angiver den port. 543 00:27:07,010 --> 00:27:10,640 Så de fleste webservere, du vil se, at de bruge port 80, da det er sådan 544 00:27:10,640 --> 00:27:11,810 ligesom konventionen. 545 00:27:11,810 --> 00:27:16,170 Så hvis jeg går til noget lignende, Jeg ved det ikke, Wikipedia.org, 546 00:27:16,170 --> 00:27:17,700 og jeg sætter kolon 8 - 547 00:27:17,700 --> 00:27:18,610 oh wow, kan du ikke se det. 548 00:27:18,610 --> 00:27:19,370 Undskyld. 549 00:27:19,370 --> 00:27:21,820 Men hvis jeg gør Wikipedia - 550 00:27:21,820 --> 00:27:24,810 Jeg skriver det her, bare så at det er klart, på kameraet. 551 00:27:24,810 --> 00:27:29,150 Men hvis jeg tage dette i en browser med et kolon 80, der angiver at gå til 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 er ligesom, hvordan USA har flere havne som, hvor du kan sende 554 00:27:36,200 --> 00:27:37,440 ting til slags. 555 00:27:37,440 --> 00:27:40,730 Så det er ligesom at gå til denne særlige placeres på denne server. 556 00:27:40,730 --> 00:27:40,990 OK. 557 00:27:40,990 --> 00:27:45,730 >> Så jeg valgte netop 1337. 558 00:27:45,730 --> 00:27:47,910 Der er en hel række af numre at du kan vælge. 559 00:27:47,910 --> 00:27:50,390 Det var ikke helt speciel. 560 00:27:50,390 --> 00:27:54,560 >> Men hvad jeg har tænkt mig at gøre nu er jeg har tænkt mig at køre Node. 561 00:27:54,560 --> 00:27:59,730 Lad mig faktisk ind, at et par linjer ned, så du kan se det. 562 00:27:59,730 --> 00:28:03,130 Jeg har tænkt mig at gøre Node, og jeg er kommer til at køre simpler.js. 563 00:28:03,130 --> 00:28:06,880 Og vi taler om, hvordan du får Node sat op i en lille smule. 564 00:28:06,880 --> 00:28:09,350 Men nu er det bare at køre serveren. 565 00:28:09,350 --> 00:28:14,360 >> Så én ting, vi kan prøve, der ikke må være så spændende er, at vi rent faktisk kan 566 00:28:14,360 --> 00:28:16,300 forsøge at få adgang til det i Curl. 567 00:28:16,300 --> 00:28:20,680 Så jeg kan gøre Curl, og mit maskinen er lokale vært. 568 00:28:20,680 --> 00:28:24,600 Du kan også se denne skriftlige som denne til tider. 569 00:28:24,600 --> 00:28:29,810 Lokale vært og 127.0.0.1 er venlige ligesom din hjemmecomputer. 570 00:28:29,810 --> 00:28:33,180 Så det er som at tale med din egen computer. 571 00:28:33,180 --> 00:28:33,760 OK. 572 00:28:33,760 --> 00:28:36,030 >> Og så kan jeg sige 1337. 573 00:28:36,030 --> 00:28:39,630 Så hvis jeg køre denne linje kode, det siger hej verden. 574 00:28:39,630 --> 00:28:44,050 Og hvis jeg ønskede at se, at ting, der havde indholdstype tekst almindeligt eller 575 00:28:44,050 --> 00:28:46,560 uanset hvad, jeg kunne endda sætte dette her. 576 00:28:46,560 --> 00:28:48,810 Og bemærk, at det siger OK. 577 00:28:48,810 --> 00:28:50,810 Og jeg har tekst sletten. 578 00:28:50,810 --> 00:28:53,140 Og så er der slags alt dette andet ting, Node vil tilføje i 579 00:28:53,140 --> 00:28:54,440 der for mig. 580 00:28:54,440 --> 00:28:55,700 Det er ikke super vigtigt. 581 00:28:55,700 --> 00:28:58,230 >> Jeg mener, der er en form for teknisk aspekter på, som er lidt 582 00:28:58,230 --> 00:29:02,280 cool at snakke om, men bare for at vise dig, jeg har også magt til at 583 00:29:02,280 --> 00:29:03,070 ændre disse rundt. 584 00:29:03,070 --> 00:29:06,280 Så jeg kan bare tilføje en flok af den slags. 585 00:29:06,280 --> 00:29:11,780 Og så nu, hvis jeg ser i min udgang, vil det være det. 586 00:29:11,780 --> 00:29:19,740 Så disse overskrifter betyder visse ting til browsere og ting som. 587 00:29:19,740 --> 00:29:23,040 >> Og headere kan stort set fortælle en browser hvordan man reagerer på noget. 588 00:29:23,040 --> 00:29:26,280 Hvis du nogensinde har hørt om cookies før, eller hvis du nogensinde har været irriteret 589 00:29:26,280 --> 00:29:29,330 af en webside indstilling cookies, eller tændt cookie blok eller 590 00:29:29,330 --> 00:29:30,320 noget lignende. 591 00:29:30,320 --> 00:29:33,040 Du kan faktisk sætte cookies i disse overskrifter. 592 00:29:33,040 --> 00:29:36,990 Så de fortæller en browser, hvordan man adfærd i nogle tilfælde. 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 Er der nogen har nogen spørgsmål på denne kildekode fil? 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 Fedt. 599 00:29:46,490 --> 00:29:50,780 >> Så lad os fjerne r fra det og se på simple.js. 600 00:29:50,780 --> 00:29:53,010 Så dette er temmelig meget det samme program. 601 00:29:53,010 --> 00:29:56,030 Jeg skrev bare det lidt anderledes fordi jeg ønskede at sortere fremhævningstype 602 00:29:56,030 --> 00:29:57,850 nogle af funktionerne i JavaScript. 603 00:29:57,850 --> 00:30:03,880 >> Så opdager, at sagsbehandleren funktionen er helt forsvundet. 604 00:30:03,880 --> 00:30:05,800 Åh jep, har du et spørgsmål? 605 00:30:05,800 --> 00:30:08,200 >> Publikum: Ja, de argumenter der føres til at 606 00:30:08,200 --> 00:30:10,120 funktion, hvad er de? 607 00:30:10,120 --> 00:30:12,050 >> KEVIN SCHMID: Så dem er JavaScript objekter. 608 00:30:12,050 --> 00:30:15,230 I Node.js dokumentation, er det dybest set siger, hvad metoder er 609 00:30:15,230 --> 00:30:15,910 tilgængelig på dem. 610 00:30:15,910 --> 00:30:19,602 Vi har lige tilfældigvis har adgang til denne fremgangsmåde kaldes skrive hoved og afslutning 611 00:30:19,602 --> 00:30:20,730 og den slags. 612 00:30:20,730 --> 00:30:22,590 Men der er en hel flok flere metoder. 613 00:30:22,590 --> 00:30:27,670 >> Og for eksempel, som en af ​​dem især på rec, kan du gøre 614 00:30:27,670 --> 00:30:34,540 noget rec.method som vil fortælle dig, om det er en HTTP få eller 615 00:30:34,540 --> 00:30:36,780 HTTP POST-anmodninger og ting som. 616 00:30:36,780 --> 00:30:39,100 Så der er alle mulige forskellige egenskaber, men de er begge 617 00:30:39,100 --> 00:30:42,560 JavaScript objekter, og de skal bare have funktioner, der er knyttet til dem, at du 618 00:30:42,560 --> 00:30:43,850 kan skrive ting. 619 00:30:43,850 --> 00:30:45,520 OK? 620 00:30:45,520 --> 00:30:49,030 >> Så bemærke, at sagsbehandleren er helt forsvundet. 621 00:30:49,030 --> 00:30:52,650 Men den kode, jeg havde i anmodning handleren er der stadig. 622 00:30:52,650 --> 00:30:56,520 Jeg har stadig denne res.writeHead og jeg har stadig denne res.end. 623 00:30:56,520 --> 00:31:00,270 Og hvad dette er et eksempel på i JavaScript er denne idé om en 624 00:31:00,270 --> 00:31:01,460 anonym funktion. 625 00:31:01,460 --> 00:31:04,180 og anonymt er som et passende navn for det, fordi det bogstaveligt talt ikke 626 00:31:04,180 --> 00:31:05,180 have et navn. 627 00:31:05,180 --> 00:31:07,900 Der er ingen funktion anmodning handleren derinde. 628 00:31:07,900 --> 00:31:10,110 >> Har ikke noget navn, men det stadig er at tage et argument. 629 00:31:10,110 --> 00:31:12,250 Så jeg stadig fik rec og res. 630 00:31:12,250 --> 00:31:16,180 Og jeg har stadig koden. 631 00:31:16,180 --> 00:31:18,930 Det er helt fint JavaScript-kode. 632 00:31:18,930 --> 00:31:22,540 Så jeg kan erklære en funktion uden udtrykkeligt give den et navn. 633 00:31:22,540 --> 00:31:24,250 Det er lidt forvirrende i starten. 634 00:31:24,250 --> 00:31:26,230 Der er nogle som nyttige ting at du kan gøre med 635 00:31:26,230 --> 00:31:28,450 disse anonyme funktioner. 636 00:31:28,450 --> 00:31:32,100 Er der nogen, der har spørgsmål om dette, eller er det OK bare at for nu, 637 00:31:32,100 --> 00:31:34,130 slags bare acceptere, at det vil gøre det samme? 638 00:31:34,130 --> 00:31:36,700 639 00:31:36,700 --> 00:31:37,125 Yep? 640 00:31:37,125 --> 00:31:38,680 >> PUBLIKUM: Er funktioner først klasse i JavaScript? 641 00:31:38,680 --> 00:31:41,020 >> KEVIN SCHMID: De er først klasse i JavaScript. 642 00:31:41,020 --> 00:31:45,490 Og bare vide, at disse begreber passerer i en anonym funktion som 643 00:31:45,490 --> 00:31:49,600 dette gælder for JavaScript, som du kan skrive i dit afsluttende projekt for 644 00:31:49,600 --> 00:31:51,260 webbrowseren også. 645 00:31:51,260 --> 00:31:56,700 Så for eksempel i JavaScript i din browser, det er også noget begivenhed 646 00:31:56,700 --> 00:32:00,680 kørt i den forstand, at hvad du vil har er, når brugeren klikker på dette 647 00:32:00,680 --> 00:32:02,640 knap, jeg vil have dig til at køre denne kode. 648 00:32:02,640 --> 00:32:07,070 >> Så det er den samme slags ideer klientsiden når et museklik eller de 649 00:32:07,070 --> 00:32:09,870 musen over nogle billede på din webside, skal du køre denne kode. 650 00:32:09,870 --> 00:32:11,350 Det kan anvendes på servere. 651 00:32:11,350 --> 00:32:16,380 Så det er lidt ligesom det spændende Grunden til, at JavaScript er en rigtig 652 00:32:16,380 --> 00:32:19,810 egnede eller nogle mennesker synes, det er en passende sprog til denne form for 653 00:32:19,810 --> 00:32:22,530 begivenhed driver server, fordi du har disse anonyme funktioner. 654 00:32:22,530 --> 00:32:26,150 Du har hele ideen om denne asynkrone kode. 655 00:32:26,150 --> 00:32:27,060 OK. 656 00:32:27,060 --> 00:32:30,360 Nogen har nogen spørgsmål? 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å lad os se på en mere eller et par mere. 660 00:32:38,070 --> 00:32:42,040 Så dette er sleep.js. 661 00:32:42,040 --> 00:32:47,160 Så er der nogen bekendt med C-funktionen søvn? 662 00:32:47,160 --> 00:32:50,936 Fra måske en af ​​de tidligere foredrag eller sådan noget? 663 00:32:50,936 --> 00:32:54,650 >> Så dybest set kan du gå på Jeg tror, ​​en antal sekunder, eller hvis du bruger U 664 00:32:54,650 --> 00:32:57,080 sove antal millisekunder eller nanosekunder. 665 00:32:57,080 --> 00:33:00,450 Og dybest set programmet vil bare stoppe køre for at mængden af ​​tid. 666 00:33:00,450 --> 00:33:01,280 Right? 667 00:33:01,280 --> 00:33:06,970 Og så vil det vågne op med tiden og så det vil bare fortsætte med at køre 668 00:33:06,970 --> 00:33:08,340 programmet. 669 00:33:08,340 --> 00:33:12,740 >> Så denne server slags giver indtryk af at sove. 670 00:33:12,740 --> 00:33:17,580 Så bemærke, at vi har den samme res.writeHead 200 med overskriften som 671 00:33:17,580 --> 00:33:22,130 før, men så vi kalder dette funktion kaldet sæt timeout. 672 00:33:22,130 --> 00:33:26,170 Indstil timeout fås også i din web browser Google Chrome 673 00:33:26,170 --> 00:33:28,000 eller Safari eller hvad. 674 00:33:28,000 --> 00:33:31,720 Og dybest set, hvad det gør her Det tager i en funktion. 675 00:33:31,720 --> 00:33:33,360 Bemærk, igen, det er en anonym funktion. 676 00:33:33,360 --> 00:33:36,310 Så det er lidt cool, fordi vi er ved hjælp af en anonym funktion i et 677 00:33:36,310 --> 00:33:38,950 anonym funktion, som kan være lidt underligt. 678 00:33:38,950 --> 00:33:42,270 >> Men det tager den funktion, som er dybest set siger, - og den måde, denne 679 00:33:42,270 --> 00:33:47,430 værker er i 5000 millisekunder, jeg vil du at udføre den funktion, som 680 00:33:47,430 --> 00:33:50,830 bare ender svaret og skriver hej. 681 00:33:50,830 --> 00:33:56,730 Så det giver indtryk af lignende sove, men den måde, dette faktisk 682 00:33:56,730 --> 00:33:59,780 virker, er vi køre gennem denne linje meget hurtigt. 683 00:33:59,780 --> 00:34:01,190 Vi er bare at skrive noget. 684 00:34:01,190 --> 00:34:03,780 Og så vil vi også køre igennem denne linje meget hurtigt. 685 00:34:03,780 --> 00:34:08,620 Så vi faktisk ikke gå at vente fem sekunder. 686 00:34:08,620 --> 00:34:11,370 Vi vil bare køre denne kode øjeblikkeligt. 687 00:34:11,370 --> 00:34:14,219 >> Og så er der igen, denne lille begivenhed loop, der nu har denne ting 688 00:34:14,219 --> 00:34:17,570 registre, der dybest set er lige konstant går rundt i en cirkel 689 00:34:17,570 --> 00:34:21,620 og ser på uret i et enkelt tråd og sige, har fem sekunder 690 00:34:21,620 --> 00:34:22,360 gået endnu? 691 00:34:22,360 --> 00:34:26,409 Og så når den ser, at den anden hånd er flyttet ligesom fem sekunder eller 692 00:34:26,409 --> 00:34:29,190 uanset hvad, så er det vågner op og siger, åh, hvad skal jeg gøre? 693 00:34:29,190 --> 00:34:30,350 Åh jeg er nødt til at køre denne kode. 694 00:34:30,350 --> 00:34:33,110 Og så det kommer til at køre res.end hej. 695 00:34:33,110 --> 00:34:35,360 >> Så igen, vi aldrig venter her. 696 00:34:35,360 --> 00:34:38,590 Så det er ikke, at denne kode inde i denne funktion kommer til at tage fem 697 00:34:38,590 --> 00:34:39,900 sekunder til at køre. 698 00:34:39,900 --> 00:34:43,090 Denne kode vil køre temmelig meget øjeblikkeligt, i det mindste i forhold til 699 00:34:43,090 --> 00:34:46,139 de fem sekunder, vi talte om tidligere før. 700 00:34:46,139 --> 00:34:52,100 >> Så bare for at vise dette i aktion, Jeg kan gøre Node.sleep.js. 701 00:34:52,100 --> 00:34:55,159 Og gjorde jeg rod op noget? 702 00:34:55,159 --> 00:34:56,310 Muligvis. 703 00:34:56,310 --> 00:34:57,410 Undskyld. 704 00:34:57,410 --> 00:34:59,530 Lad os se hvad vi kan gøre for at løse dette. 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å helt sikkert bruge Node.js. 709 00:35:17,464 --> 00:35:19,440 Jeg er bare sjov. 710 00:35:19,440 --> 00:35:19,570 OK. 711 00:35:19,570 --> 00:35:20,820 Blot ét sek. 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 Jeg ved, hvad det er. 715 00:35:29,130 --> 00:35:34,440 >> Så problemet er, at i min anden fane her, var jeg kører Node allerede på 716 00:35:34,440 --> 00:35:36,590 samme adresse, 1337. 717 00:35:36,590 --> 00:35:43,370 Så den fejl, dette kastede, hvis vi ser ved det virkelig nøje, er adressen i 718 00:35:43,370 --> 00:35:45,180 bruge, EADDRINUSE. 719 00:35:45,180 --> 00:35:47,970 Så jeg var allerede bruger 1337 her. 720 00:35:47,970 --> 00:35:52,210 Så hvis jeg lukker det ud, og så er jeg nu forsøger at køre dette forhåbentlig alt 721 00:35:52,210 --> 00:35:53,210 vil være fint. 722 00:35:53,210 --> 00:35:53,440 OK. 723 00:35:53,440 --> 00:35:57,020 Så du kan kun have én ting sortere af at lytte på en port på en gang. 724 00:35:57,020 --> 00:35:59,660 En anden løsning ville have været for mig til blot redigere dette program, og gøre 725 00:35:59,660 --> 00:36:02,370 det være som 1338 eller noget sådan. 726 00:36:02,370 --> 00:36:04,100 >> Men nu søvn kører. 727 00:36:04,100 --> 00:36:06,400 Så lad os faktisk prøve det i browser denne gang, fordi det er en 728 00:36:06,400 --> 00:36:09,080 lidt spændende at se det i en terminal. 729 00:36:09,080 --> 00:36:13,560 Så jeg bare kommer til at gå til at 127 adressen igen på 1337. 730 00:36:13,560 --> 00:36:14,850 Og hvis du kan se det - 731 00:36:14,850 --> 00:36:18,050 Jeg ved ikke, om du kan - men min browserens tage en meget, meget lang 732 00:36:18,050 --> 00:36:20,600 tid at indlæse eller lignende fem sekunder. 733 00:36:20,600 --> 00:36:23,460 >> Og så efter at det endelig sluttede svaret. 734 00:36:23,460 --> 00:36:29,070 Og du kan ikke se det, fordi de ting flyttes over en lille, men hvis jeg gør 735 00:36:29,070 --> 00:36:32,500 dette lidt mindre, du kan se det, siger hej. 736 00:36:32,500 --> 00:36:35,130 Så jeg fik den hey, men efter fem sekunder. 737 00:36:35,130 --> 00:36:38,510 Og det kan være lidt renere at se det her på terminalen, så jeg er 738 00:36:38,510 --> 00:36:40,980 kommer til at gøre en - 739 00:36:40,980 --> 00:36:43,540 lad os gøre i her - 740 00:36:43,540 --> 00:36:48,370 lad os gøre Curl denne adresse igen med 1337. 741 00:36:48,370 --> 00:36:50,820 Og jeg bare lidt nødt til at sidde her i fem sekunder. 742 00:36:50,820 --> 00:36:53,760 Men bemærk, at serveren kan acceptere nye svar. 743 00:36:53,760 --> 00:36:54,940 Så det udskriver hej. 744 00:36:54,940 --> 00:36:58,720 >> Og til demo dette, dybest set, hvad Jeg kan gøre i denne anden fane - 745 00:36:58,720 --> 00:37:02,640 så lad os sige, at jeg gør dette i en anden fane, Jeg har tænkt mig at gøre Curl og det samme 746 00:37:02,640 --> 00:37:03,780 ting igen. 747 00:37:03,780 --> 00:37:06,600 Og jeg har tænkt mig at forsøge at sparke disse fyre off på samme tid. 748 00:37:06,600 --> 00:37:08,260 Så jeg har tænkt mig at gøre dette, og jeg er kommer til at køre over her, og jeg er 749 00:37:08,260 --> 00:37:09,650 kommer til at gøre det igen. 750 00:37:09,650 --> 00:37:14,030 >> Og lad os gøre det, så du kan se dem begge. 751 00:37:14,030 --> 00:37:20,250 At man udskrevet hey, og at man trykt hey hele vejen - 752 00:37:20,250 --> 00:37:22,550 lad os gøre det eksperiment igen. 753 00:37:22,550 --> 00:37:25,100 Faktisk, lad os bruge denne trick, hvis det er OK. 754 00:37:25,100 --> 00:37:30,520 >> Så jeg har tænkt mig at bruge en shell ting, tillader mig at stort set køre to eksemplarer 755 00:37:30,520 --> 00:37:32,630 af dette program parallelt. 756 00:37:32,630 --> 00:37:36,070 Så det vil løbe det første program og det andet program i parallel. 757 00:37:36,070 --> 00:37:39,060 Så nu, hvis jeg trykker på Enter, går det at gøre denne anmodning temmelig meget 758 00:37:39,060 --> 00:37:40,570 går på samme tid. 759 00:37:40,570 --> 00:37:42,620 Så lad os give det et skud. 760 00:37:42,620 --> 00:37:44,950 >> Så nu mærke til det, siger to processer. 761 00:37:44,950 --> 00:37:50,630 Og hvis du er nysgerrig, at 27.000 nummer er dybest set den proces id. 762 00:37:50,630 --> 00:37:52,940 Og derefter mærke, de udskrives hej samtidig. 763 00:37:52,940 --> 00:37:56,820 Det var ikke som vi måtte vente fem sekunder for en og derefter efter at, 764 00:37:56,820 --> 00:37:59,640 fem sekunder senere få den anden. 765 00:37:59,640 --> 00:38:03,300 Så det er lidt på nogle måder, det er ikke rigtig beviser, men det er 766 00:38:03,300 --> 00:38:07,390 intuitiv beviser for, at det ikke bare ligesom vente fem sekunder, og blokere 767 00:38:07,390 --> 00:38:08,960 hele tråden. 768 00:38:08,960 --> 00:38:10,720 OK cool. 769 00:38:10,720 --> 00:38:17,850 >> Så Aron stillede et spørgsmål tidligere, at var, godt hvad hvis vi gør noget - 770 00:38:17,850 --> 00:38:18,735 Yep? 771 00:38:18,735 --> 00:38:19,051 >> PUBLIKUM: Vent. 772 00:38:19,051 --> 00:38:21,585 Hvordan er det forskelligt fra printf puffer, selv? 773 00:38:21,585 --> 00:38:23,010 Er det ikke automatisk gøre det? 774 00:38:23,010 --> 00:38:25,390 Hvorfor skal vi nødt til at bekymre sig om det? 775 00:38:25,390 --> 00:38:26,555 >> KEVIN SCHMID: Åh, kunne du sige, at en gang mere? 776 00:38:26,555 --> 00:38:29,510 >> PUBLIKUM: Er ikke lide printf buffer gøre præcis de samme ting? 777 00:38:29,510 --> 00:38:31,280 >> KEVIN SCHMID: Den printf buffer? 778 00:38:31,280 --> 00:38:32,753 >> PUBLIKUM: Ja. 779 00:38:32,753 --> 00:38:33,244 OK. 780 00:38:33,244 --> 00:38:40,609 Var ikke i en af ​​de quizzer, de var taler om, hvordan, hvis du lige printf 781 00:38:40,609 --> 00:38:42,899 noget, og så har den pause en sekund, og så har du det loop ti 782 00:38:42,899 --> 00:38:46,530 gange, vil det vente ti sekunder, og derefter printf det hele sammen? 783 00:38:46,530 --> 00:38:47,460 >> KEVIN SCHMID: Åh, OK. 784 00:38:47,460 --> 00:38:49,170 >> PUBLIKUM: Er det at gøre det samme ting, så i dette tilfælde? 785 00:38:49,170 --> 00:38:52,630 >> KEVIN SCHMID: Så spørgsmålet var dybest set i en af ​​de tidligere quizzer 786 00:38:52,630 --> 00:38:57,200 eller noget, der var et spørgsmål, som dybest set, hvis du siger print F 10 787 00:38:57,200 --> 00:39:01,490 ting på en gang og derefter sov ligesom i processen med at udskrive dem ud, 788 00:39:01,490 --> 00:39:04,850 ved udgangen af ​​en eller anden grund, ville det bare dumpe dem alle ud på skærmen. 789 00:39:04,850 --> 00:39:06,740 Så der er lidt to forskellige koncepter her. 790 00:39:06,740 --> 00:39:10,400 >> Så jeg gætte en ting er, at i denne tilfælde er der tale om to forskellige 791 00:39:10,400 --> 00:39:13,510 slags mennesker beder serveren for ting på samme tid. 792 00:39:13,510 --> 00:39:17,455 Og grunden til, at printf slags venter sådan og dumper det hele ud 793 00:39:17,455 --> 00:39:21,760 på én gang er mere relateret til hvordan printf slags - 794 00:39:21,760 --> 00:39:25,100 så den måde printf er faktisk gennemføres, er det dybest set har at 795 00:39:25,100 --> 00:39:28,850 tale med operativsystemet til at skrive at ting til konsollen. 796 00:39:28,850 --> 00:39:33,460 Så det vil ikke gøre alt dette ting det samme, når du siger printf 797 00:39:33,460 --> 00:39:36,260 noget snor, fordi det kunne blive dyrt, hvis det har til 798 00:39:36,260 --> 00:39:37,340 gøre det hver gang. 799 00:39:37,340 --> 00:39:41,530 >> Så hvis du gør printf hey, dit program kan faktisk ikke udskrive det 800 00:39:41,530 --> 00:39:43,040 straks til konsollen. 801 00:39:43,040 --> 00:39:46,080 Det kan sige, OK, jeg skrev det. 802 00:39:46,080 --> 00:39:49,570 Og så slags vente for dig at give det lidt mere før der rent faktisk 803 00:39:49,570 --> 00:39:51,380 skrive det ud til konsollen. 804 00:39:51,380 --> 00:39:54,040 >> Så grunden til, at det var tilfældet - 805 00:39:54,040 --> 00:39:56,450 og det er lidt relateret til søvn - 806 00:39:56,450 --> 00:40:00,060 er, at søvn var slags bare injiceres i der for at demonstrere 807 00:40:00,060 --> 00:40:02,480 faktum, at det ikke skriver det synkront. 808 00:40:02,480 --> 00:40:06,210 Men grunden til det er bare ydeevne, så du ikke behøver at 809 00:40:06,210 --> 00:40:08,920 gør, at mange kontakter til operativsystemet. 810 00:40:08,920 --> 00:40:12,300 >> Men her, hvad vi virkelig forsøger at gøre med denne søvn ting er bare show 811 00:40:12,300 --> 00:40:17,730 at når vi har to mennesker besøger denne hjemmeside, er det ikke kommer til at sætte 812 00:40:17,730 --> 00:40:22,310 dem i en linje, hvor det kommer til at sige Jeg er nødt til at hjælpe dig, og så når jeg er 813 00:40:22,310 --> 00:40:25,350 helt færdig hjælpe dig efter disse fem sekunder og derefter vil jeg 814 00:40:25,350 --> 00:40:26,750 gå videre til den næste person. 815 00:40:26,750 --> 00:40:29,515 Så den første person anmodning ikke binde denne begivenhed loop 816 00:40:29,515 --> 00:40:31,610 hvis det giver mening. 817 00:40:31,610 --> 00:40:34,980 >> Men her er faktisk et eksempel af noget, der vil binde 818 00:40:34,980 --> 00:40:36,090 op tilfælde løkke. 819 00:40:36,090 --> 00:40:39,130 Så her er en forfærdelig funktion til beregne den n'te Fibonacci. 820 00:40:39,130 --> 00:40:43,510 Det er bogstaveligt talt det værre måde, du kan beregne den n'te Fibonacci-tal. 821 00:40:43,510 --> 00:40:48,480 Og det er faktisk bare at anerkende hvor det kom fra, 822 00:40:48,480 --> 00:40:49,330 der er faktisk - 823 00:40:49,330 --> 00:40:53,230 Jeg mener, kan du prøve at gå finde det - men der er ligesom en meget langvarig blog 824 00:40:53,230 --> 00:40:54,130 skrive, at nogen skrev. 825 00:40:54,130 --> 00:40:55,660 Det er ligesom en af ​​de Reddit ting. 826 00:40:55,660 --> 00:40:59,650 Men nogen kritiserede Node.js, og de brugte dette som et eksempel. 827 00:40:59,650 --> 00:41:03,700 Så jeg slags ville bare vise dig to forskellige perspektiver bare for at få 828 00:41:03,700 --> 00:41:07,320 en generel forståelse af begreberne bag disse to ting. 829 00:41:07,320 --> 00:41:13,050 >> Men dette er valgt som blot en frygtelig, grueligt ineffektiv beregningsmæssigt 830 00:41:13,050 --> 00:41:15,940 intensiv måde at beregne n'te Fibonacci-tal. 831 00:41:15,940 --> 00:41:21,180 Så lige som en side bemærkning, hvorfor er det forfærdelig gerne på én måde? 832 00:41:21,180 --> 00:41:23,210 Yep? 833 00:41:23,210 --> 00:41:25,130 >> PUBLIKUM: Sig du starter med 1.000. 834 00:41:25,130 --> 00:41:27,050 1.000 deler sig i 999 og 998. 835 00:41:27,050 --> 00:41:28,970 Hver af denne deler sig i to ting. 836 00:41:28,970 --> 00:41:30,890 Hver af denne deler sig i to ting. 837 00:41:30,890 --> 00:41:31,355 >> KEVIN SCHMID: Right. 838 00:41:31,355 --> 00:41:32,400 >> PUBLIKUM: Hele vejen ned. 839 00:41:32,400 --> 00:41:32,840 >> KEVIN SCHMID: Præcis. 840 00:41:32,840 --> 00:41:37,330 Så bare for at gentage til kameraet, hvis jeg kalder fib på ligesom 1.000 eller noget 841 00:41:37,330 --> 00:41:41,810 sådan, er det naturligvis ikke er mindre end eller lig med en, så jeg har tænkt mig at 842 00:41:41,810 --> 00:41:46,040 gå til denne andet tilfælde, og så jeg har tænkt mig at kalde fib 999 plus fib 998. 843 00:41:46,040 --> 00:41:50,290 Og så temmelig meget alle, der arbejde, fib 999 gør, er 844 00:41:50,290 --> 00:41:52,950 slags på dette niveau. 845 00:41:52,950 --> 00:41:55,620 Hvis du går ned, er det endnu mere overflødig end det, men hvis du bare 846 00:41:55,620 --> 00:42:01,390 tænke computing fib 998 får os temmelig tæt på fib 999. 847 00:42:01,390 --> 00:42:05,860 Så vi skal virkelig være en smule mere klog på, hvordan vi slags genbruge 848 00:42:05,860 --> 00:42:07,580 disse, men vi er ikke genbruge disse ting overhovedet. 849 00:42:07,580 --> 00:42:11,860 Så du kan forestille dig denne gigantiske, gigantisk træ, der er bare forfærdeligt. 850 00:42:11,860 --> 00:42:12,940 >> Men alligevel, OK. 851 00:42:12,940 --> 00:42:14,040 Så det var fib. 852 00:42:14,040 --> 00:42:15,530 Det tager bare et stykke tid at køre. 853 00:42:15,530 --> 00:42:16,510 Yep? 854 00:42:16,510 --> 00:42:17,760 >> PUBLIKUM: [uhørligt]. 855 00:42:17,760 --> 00:42:20,430 856 00:42:20,430 --> 00:42:22,481 >> KEVIN SCHMID: Åh, kunne du gentage spørgsmålet? 857 00:42:22,481 --> 00:42:23,731 >> PUBLIKUM: [uhørligt]. 858 00:42:23,731 --> 00:42:30,840 859 00:42:30,840 --> 00:42:33,990 >> KEVIN SCHMID: Åh, så dette er blot kode der kommer til at være slags på 860 00:42:33,990 --> 00:42:34,850 server side. 861 00:42:34,850 --> 00:42:38,100 Så dette er ikke kommer til at findes i browseren eller noget. 862 00:42:38,100 --> 00:42:42,160 Det er dybest set, hvad vi har, er, at når brugeren her temmelig meget fabrikater 863 00:42:42,160 --> 00:42:45,300 deres anmodning igen, når vi slags fremsætte en anmodning, vi kommer til at kalde 864 00:42:45,300 --> 00:42:47,040 denne funktion på serveren side. 865 00:42:47,040 --> 00:42:50,480 Og så vil vi få resultatet tilbage fra at kalde denne funktion. 866 00:42:50,480 --> 00:42:52,460 Og så vil vi bare udskrive til brugeren. 867 00:42:52,460 --> 00:42:54,580 Så brugeren ikke rigtig beskæftige med denne funktion for meget. 868 00:42:54,580 --> 00:42:57,270 >> Var det spørgsmål? 869 00:42:57,270 --> 00:42:58,470 Giver det mening? 870 00:42:58,470 --> 00:42:58,810 OK. 871 00:42:58,810 --> 00:43:00,930 Fedt. 872 00:43:00,930 --> 00:43:04,240 >> Så igen, vi gør hele denne res.writeHead ting, hvor vi udskrive 873 00:43:04,240 --> 00:43:05,150 overskriften. 874 00:43:05,150 --> 00:43:09,730 Og så kan jeg afslutte reaktion ved at gøre det magiske tal er fib 45.. 875 00:43:09,730 --> 00:43:12,100 Så lad os bare køre denne server. 876 00:43:12,100 --> 00:43:15,190 Så jeg har tænkt mig at gøre en node fib.js. 877 00:43:15,190 --> 00:43:17,340 Så nu er min fib serveren kører. 878 00:43:17,340 --> 00:43:21,790 >> Og så er her, jeg har tænkt mig til at gøre en af ​​disse. 879 00:43:21,790 --> 00:43:22,200 OK? 880 00:43:22,200 --> 00:43:24,960 Så jeg vil bare sige, Curl. 881 00:43:24,960 --> 00:43:32,226 Så det kommer til at tage lidt tid, men forhåbentlig snart vil slutte og 882 00:43:32,226 --> 00:43:35,660 det vil udskrive at 45th Fibonacci-tal. 883 00:43:35,660 --> 00:43:36,910 >> PUBLIKUM: [uhørligt]. 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 temmelig snart. 886 00:43:42,050 --> 00:43:43,780 Så det burde tage 5-6 sekunder. 887 00:43:43,780 --> 00:43:48,570 Jeg kender ikke det er bare V8 være super hurtigt, men under alle omstændigheder er dette en 888 00:43:48,570 --> 00:43:52,700 meget kort eksempel og bevidst inelegant af en ikke-triviel 889 00:43:52,700 --> 00:43:54,200 beregning. 890 00:43:54,200 --> 00:43:56,700 Så efter et stykke tid, betyder det at få denne. 891 00:43:56,700 --> 00:44:02,130 >> Men nu, hvad nu hvis jeg gør det samme slags eksperiment som før, hvor jeg gør 892 00:44:02,130 --> 00:44:04,010 to anmodninger på samme tid? 893 00:44:04,010 --> 00:44:06,990 Så her jeg har tænkt mig at en Curl på denne adresse, og jeg har tænkt mig 894 00:44:06,990 --> 00:44:08,260 at gøre en anden Curl. 895 00:44:08,260 --> 00:44:12,070 Og husk, når vi gjorde dette for sove server, da vi grundlæggende havde det 896 00:44:12,070 --> 00:44:15,320 efter fem sekunder, de temmelig meget begge kom tilbage til højre 897 00:44:15,320 --> 00:44:16,380 omkring samme tid. 898 00:44:16,380 --> 00:44:18,650 Så det var ikke specielt bundet op. 899 00:44:18,650 --> 00:44:20,290 >> Men lad os prøve det nu. 900 00:44:20,290 --> 00:44:22,370 OK, så vi fik vores to processer. 901 00:44:22,370 --> 00:44:24,210 Husk det er de proces-id'er. 902 00:44:24,210 --> 00:44:25,900 Dette kommer til at være lidt akavet, mens vi i stå. 903 00:44:25,900 --> 00:44:31,340 904 00:44:31,340 --> 00:44:35,360 Så lad os bare blive her og vente. 905 00:44:35,360 --> 00:44:37,090 >> Så en af ​​dem skulle komme tilbage efter lignende - 906 00:44:37,090 --> 00:44:39,190 OK, så kom tilbage. 907 00:44:39,190 --> 00:44:43,570 Men hvorfor så ikke den anden man kommer tilbage endnu? 908 00:44:43,570 --> 00:44:44,389 Yep? 909 00:44:44,389 --> 00:44:49,280 >> PUBLIKUM: Serveren kan ikke gøre noget mens det computing det store nummer. 910 00:44:49,280 --> 00:44:51,620 >> KEVIN SCHMID: Right. 911 00:44:51,620 --> 00:44:55,395 Så svaret var bare, at serveren virkelig kan ikke gøre noget, mens 912 00:44:55,395 --> 00:44:57,460 det er computere, der Fibonacci-tal. 913 00:44:57,460 --> 00:44:59,360 Så nu har jeg lige fået mine to ting tilbage. 914 00:44:59,360 --> 00:45:03,210 Men jeg gætter bare at tænke på koden lidt mere, hvordan det er at arbejde 915 00:45:03,210 --> 00:45:05,030 og alting. 916 00:45:05,030 --> 00:45:11,750 >> Så denne funktion her er den kode, Jeg har fortalt denne server til at køre, når det 917 00:45:11,750 --> 00:45:14,100 modtager et nyt indgående anmodning. 918 00:45:14,100 --> 00:45:17,940 Så det er bare at køre gennem dette hele koden, og så er det kommer til at gå 919 00:45:17,940 --> 00:45:21,120 tilbage til begivenheden loop og derefter fortsætte kontrol af nye hændelser. 920 00:45:21,120 --> 00:45:23,670 Så dybest set, hvad vi har sker er den server er 921 00:45:23,670 --> 00:45:25,080 lytte efter nye ting. 922 00:45:25,080 --> 00:45:28,070 Den første person anmoder om det, 45 er. 923 00:45:28,070 --> 00:45:30,490 Vi kører denne kode til at beregne det. 924 00:45:30,490 --> 00:45:33,420 Denne kode tager omkring fem til seks sekunder til at køre. 925 00:45:33,420 --> 00:45:36,990 Så går vi tilbage til begivenheden loop og tjek for nye anmodninger. 926 00:45:36,990 --> 00:45:42,700 >> Så dette er et eksempel på hvordan hvis du have ting, der er såkaldt beregne 927 00:45:42,700 --> 00:45:48,140 bundet, eller bruge en masse beregningsmæssige, ikke magt, men som er 928 00:45:48,140 --> 00:45:50,260 regnekraft - 929 00:45:50,260 --> 00:45:54,080 Jeg gætte én ting at sige om dette er at denne funktion gør helt, 930 00:45:54,080 --> 00:45:56,310 for det meste temmelig nyttigt arbejde til højre. 931 00:45:56,310 --> 00:45:59,970 Hele tiden, at denne tilbagekald funktion kørte, var det temmelig 932 00:45:59,970 --> 00:46:03,670 meget bruger det meste af sin tid blot computing som n'te Fibonacci-tal. 933 00:46:03,670 --> 00:46:05,930 >> Men vi havde kun én tråd at håndtere. 934 00:46:05,930 --> 00:46:10,270 I Apache-modellen, når to mennesker fremsat anmodningen at få fib 45, vi 935 00:46:10,270 --> 00:46:11,610 ville have haft to forskellige tråde. 936 00:46:11,610 --> 00:46:15,060 Og så operativsystemets job ville have været, eller brugerniveau 937 00:46:15,060 --> 00:46:18,660 kode, der styrer trådene, ville have været at skære det op på 938 00:46:18,660 --> 00:46:23,060 CPU, eller selv hvis du havde flere CPU'er, distribuere dem jævnt over CPU'er 939 00:46:23,060 --> 00:46:26,130 så de var begge slut nogenlunde på samme tid. 940 00:46:26,130 --> 00:46:31,120 >> Så bare for at vise dig, hvordan vi kan sortere på - og dette er ikke en total perfekt 941 00:46:31,120 --> 00:46:34,280 løsning, men slags, hvordan vi kan lave en kommer tilbage her og gøre 942 00:46:34,280 --> 00:46:35,880 en lille smule bedre. 943 00:46:35,880 --> 00:46:41,540 Så hvad jeg har her, er et program kaldet Fib C. Og det dybest set bruger 944 00:46:41,540 --> 00:46:45,690 en anden af ​​Node moduler kaldet Barnets Process Module. 945 00:46:45,690 --> 00:46:49,210 Så jeg har medtaget, at øverst slags ligesom jeg ville gøre et pund inkluderer 946 00:46:49,210 --> 00:46:51,230 barn process.h eller noget. 947 00:46:51,230 --> 00:46:56,210 Nu har jeg adgang til denne CP variabel som har alle mine funktionalitet. 948 00:46:56,210 --> 00:47:01,810 >> Så nu, hvad jeg gør i denne reaktion handleren er jeg kører dette program 949 00:47:01,810 --> 00:47:04,100 dot skråstreg FIB 45.. 950 00:47:04,100 --> 00:47:06,820 Så hvad jeg har gjort - og jeg bare at træde ud af dette program for en 951 00:47:06,820 --> 00:47:07,620 lidt - 952 00:47:07,620 --> 00:47:11,060 er jeg har skrevet et C-program, der dybest beregner den 953 00:47:11,060 --> 00:47:12,630 n'te Fibonacci-tal. 954 00:47:12,630 --> 00:47:15,960 Så her er bare et program jeg har skrevet i C, der beregner dette. 955 00:47:15,960 --> 00:47:19,040 Jeg kan kompilere det, og jeg kan køre det på kommandolinjen. 956 00:47:19,040 --> 00:47:22,150 Og det kommer til at beregne 45th Fibonacci-tal. 957 00:47:22,150 --> 00:47:24,510 >> Så mærke det bare tager temmelig meget så længe. 958 00:47:24,510 --> 00:47:28,240 Jeg sandsynligvis kunne have brugt bindestreg 03 til optimere det eller noget lignende, 959 00:47:28,240 --> 00:47:31,050 men jeg vidste bare som almindelig compiler indstillinger. 960 00:47:31,050 --> 00:47:33,260 Og det udskriver det. 961 00:47:33,260 --> 00:47:36,830 >> Men nu, hvad skal jeg slags gør? 962 00:47:36,830 --> 00:47:39,800 Åh undskyld, forkert fil. 963 00:47:39,800 --> 00:47:42,800 Så jeg gør det samme ting med header som før. 964 00:47:42,800 --> 00:47:45,780 Så gør jeg det cp.exec. 965 00:47:45,780 --> 00:47:49,460 Så hvad det kommer til at gøre, er det kommer til at køre dette program. 966 00:47:49,460 --> 00:47:51,960 Men den måde det virker er, at det kommer ikke til at vente på 967 00:47:51,960 --> 00:47:53,400 programmet for at afslutte. 968 00:47:53,400 --> 00:47:56,000 Det bare dybest set siger udføre dette program. 969 00:47:56,000 --> 00:47:58,700 Så dybest set skriver dette ind i kommandoprompten slags. 970 00:47:58,700 --> 00:48:02,350 >> Og så, når du er færdig med det, køre denne funktion. 971 00:48:02,350 --> 00:48:04,800 Så nu er vi slags få denne Hele restaureret ting af 972 00:48:04,800 --> 00:48:06,750 som om vi ikke venter. 973 00:48:06,750 --> 00:48:08,530 Er den slags giver mening? 974 00:48:08,530 --> 00:48:08,990 Yep? 975 00:48:08,990 --> 00:48:11,060 >> PUBLIKUM: [uhørligt]? 976 00:48:11,060 --> 00:48:13,610 >> KEVIN SCHMID: Så det vil faktisk åbne op for en ny proces til at gøre det. 977 00:48:13,610 --> 00:48:19,310 Så det er faktisk på nogle måder, ondt, ikke super ondt, men det er 978 00:48:19,310 --> 00:48:22,990 vigtigt at sige, at dette er en slags gå tilbage til, på den ene side, Apache 979 00:48:22,990 --> 00:48:26,450 model, hvor vi gør tråde og processer for hver anmodning eller 980 00:48:26,450 --> 00:48:29,280 processer for hver anmodning. 981 00:48:29,280 --> 00:48:32,090 Så dette er en slags analog hvad Apache gør. 982 00:48:32,090 --> 00:48:35,110 I nogle tilfælde vil det blot bruge et nyt gevind, som er lidt mere lys 983 00:48:35,110 --> 00:48:39,040 vægt end en proces, men Apache kunne ender forking en ny proces 984 00:48:39,040 --> 00:48:43,370 som er form for, hvad vi gør her implicit ved at gøre dot skråstreg FIB 45.. 985 00:48:43,370 --> 00:48:48,690 >> Og så i dette tilfælde, vi slags pådrage de samme udgifter processer. 986 00:48:48,690 --> 00:48:50,710 Så dette er blot en ting du kan gøre. 987 00:48:50,710 --> 00:48:52,600 Men bare for at vise denne form for løb. 988 00:48:52,600 --> 00:48:57,120 Og denne snak er bare virkelig tager sigte på præsentere disse slags programmer som en 989 00:48:57,120 --> 00:49:00,710 måde at vise forskellige perspektiver på hvordan man designer servere som. 990 00:49:00,710 --> 00:49:08,300 Så dette kører, og så nu, hvis jeg gør det igen, jeg fik to proces-id'er. 991 00:49:08,300 --> 00:49:10,320 >> Lad os bare tale om ting at påpege. 992 00:49:10,320 --> 00:49:11,980 Så bemærke, at de er trinvist. 993 00:49:11,980 --> 00:49:12,700 Det er cool. 994 00:49:12,700 --> 00:49:15,140 Fordi det var 27.122 før. 995 00:49:15,140 --> 00:49:18,580 Men meddelelsen nu, de kom tilbage på nogenlunde samme tid. 996 00:49:18,580 --> 00:49:23,960 >> Og nu, et godt spørgsmål spørge om hvorfor var, at sagen er, hvis job 997 00:49:23,960 --> 00:49:27,590 var det nu for at slags gøre disse ting slags spille fair med hver 998 00:49:27,590 --> 00:49:31,350 andre, disse to forekomster af dot skråstreg fib 45 at jeg løb 999 00:49:31,350 --> 00:49:32,880 eller at Node løb? 1000 00:49:32,880 --> 00:49:36,940 Hvem slags gør det rimeligt, at de begge få slags afbalanceret køretid? 1001 00:49:36,940 --> 00:49:42,900 1002 00:49:42,900 --> 00:49:44,220 >> PUBLIKUM: [uhørligt]. 1003 00:49:44,220 --> 00:49:44,620 >> KEVIN SCHMID: Ja. 1004 00:49:44,620 --> 00:49:49,740 Så dybest set, når jeg gør dot skråstreg fib 45 eller sådan noget, nu er det 1005 00:49:49,740 --> 00:49:53,750 slags op til operativsystemet til at håndtere runtime af disse programmer. 1006 00:49:53,750 --> 00:49:56,920 Og nu kan planlægge dem på forskellige CPU'er, eller det 1007 00:49:56,920 --> 00:49:58,330 kan planlægge dem. 1008 00:49:58,330 --> 00:50:01,870 Det kan skære op den tid, man CPU får det, eller at de får 1009 00:50:01,870 --> 00:50:03,330 til at køre på en CPU. 1010 00:50:03,330 --> 00:50:05,620 Så det er ideen bag det. 1011 00:50:05,620 --> 00:50:07,220 Giver det mening for alle? 1012 00:50:07,220 --> 00:50:10,950 Så nu Node er egentlig ikke spiller en del i at splitte op på disse opgaver. 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 er næsten det for eksempler. 1016 00:50:17,840 --> 00:50:23,370 Jeg ville bare vise en ting mere fordi en masse af dette har hidtil været 1017 00:50:23,370 --> 00:50:27,350 ikke helt superpraktisk i nogle tilfælde. 1018 00:50:27,350 --> 00:50:30,970 Jeg kan forestille mig at komme hjem efter dette tale og noget og siger lignende, 1019 00:50:30,970 --> 00:50:35,710 godt jeg slags fik ud af at tale, Jeg kan lave en Fibonacci-server til 1020 00:50:35,710 --> 00:50:37,360 mit afgangsprojekt. 1021 00:50:37,360 --> 00:50:40,770 Så her er bare slags endnu et eksempel , som forhåbentlig vil være - 1022 00:50:40,770 --> 00:50:44,620 måske ikke, men måske - lidt mere slags relevante for afsluttende projekter og 1023 00:50:44,620 --> 00:50:46,440 tænke fremad for ting som dette. 1024 00:50:46,440 --> 00:50:48,870 >> Så dette er chat.js. 1025 00:50:48,870 --> 00:50:52,290 Så dette er lidt ligesom nogle eksempler server side kode, som du kan bruge til at 1026 00:50:52,290 --> 00:50:55,700 oprette et lille chat-server som du måske har set på 1027 00:50:55,700 --> 00:50:56,630 Facebook Chat eller hvad. 1028 00:50:56,630 --> 00:50:59,990 Så jeg siger ikke dette er ligesom Facebook Chat, men det er lidt 1029 00:50:59,990 --> 00:51:06,230 som en god - måske ikke godt, men måske godt - udgangspunkt for en snak 1030 00:51:06,230 --> 00:51:08,560 server til din hjemmeside for et afsluttende projekt. 1031 00:51:08,560 --> 00:51:11,040 Så lad os se på, hvad det gør. 1032 00:51:11,040 --> 00:51:15,500 >> Så vi får denne særlige ting foroven, dette VAR SIO 1033 00:51:15,500 --> 00:51:17,050 lig kræver Socket.IO. 1034 00:51:17,050 --> 00:51:20,280 Så dette er en anden ting, som det ikke faktisk kommer bundtet med 1035 00:51:20,280 --> 00:51:22,300 Node men du kan installere den. 1036 00:51:22,300 --> 00:51:23,480 Det er en Node modul. 1037 00:51:23,480 --> 00:51:25,670 Så det er ligesom nogle udvidelse til Node. 1038 00:51:25,670 --> 00:51:29,220 >> SocketIO er faktisk rigtig slags cool. 1039 00:51:29,220 --> 00:51:32,550 Det er en abstraktion, der dybest set, hvad det gør, er det er muligt at 1040 00:51:32,550 --> 00:51:35,770 har denne strøm af kommunikation mellem en web 1041 00:51:35,770 --> 00:51:39,430 browser og en webserver. 1042 00:51:39,430 --> 00:51:45,250 Så for det meste hidtil, har vi haft disse meget hurtig et sekund eller to 1043 00:51:45,250 --> 00:51:48,790 anden kommunikation mellem en web browser og webserveren. 1044 00:51:48,790 --> 00:51:53,310 Så det er dybest set gå til google.com, get de ting, sende det tilbage, og derefter 1045 00:51:53,310 --> 00:51:53,770 vi er færdige. 1046 00:51:53,770 --> 00:51:56,560 Vi aldrig taler igen før bruger typer i noget andet. 1047 00:51:56,560 --> 00:52:01,090 >> Men hvad Socket.IO og lignende form for ting - og SocketIO er faktisk en 1048 00:52:01,090 --> 00:52:03,940 af de ting, der er bygget på som WebSocket som er en slags tilgængelig 1049 00:52:03,940 --> 00:52:06,440 som en del af HTML5 - 1050 00:52:06,440 --> 00:52:09,620 der tillader dig at have denne fortsat dialog. 1051 00:52:09,620 --> 00:52:13,990 Og det er meget nyttigt i en chat-server slags ting, fordi det er 1052 00:52:13,990 --> 00:52:17,390 lidt ligesom en fortsat dialog i nogle måder, fordi hvis du chatter 1053 00:52:17,390 --> 00:52:21,540 med nogen, kan du nu bare sende en besked ned i røret, og derefter 1054 00:52:21,540 --> 00:52:23,940 server kan sende en besked ned rør til den anden person, du er 1055 00:52:23,940 --> 00:52:24,520 chatter med. 1056 00:52:24,520 --> 00:52:26,903 Og så kan du få denne udveksle sådan. 1057 00:52:26,903 --> 00:52:30,590 1058 00:52:30,590 --> 00:52:32,850 >> Så det er lidt af, hvad SocketIO er godt for. 1059 00:52:32,850 --> 00:52:38,400 Grunden til, at SocketIO bruger WebSockets som én ting er, at i 1060 00:52:38,400 --> 00:52:43,980 Udover blot almindelig gamle WebSockets, det gør også nogle tricks til stort set 1061 00:52:43,980 --> 00:52:45,610 gøre den browser kompatibel. 1062 00:52:45,610 --> 00:52:50,040 Så browsere som Internet Explorer desværre understøtter ikke WebSockets 1063 00:52:50,040 --> 00:52:50,810 lige ud af kassen. 1064 00:52:50,810 --> 00:52:55,290 Så det bruger en anden form for kølig pæn ting med Adobe Flash for at tillade 1065 00:52:55,290 --> 00:52:57,170 du har cross browser support. 1066 00:52:57,170 --> 00:52:58,800 Så det er virkelig nyttige. 1067 00:52:58,800 --> 00:53:02,440 >> Og faktisk, jeg ved jeg er lidt kører på tid her, men CS50 1068 00:53:02,440 --> 00:53:08,490 Diskuter, har du nogensinde set noget ligesom, jeg ikke kender, blank så og så er 1069 00:53:08,490 --> 00:53:11,030 besvarelse af dette indlæg eller noget gerne, at denne funktion? 1070 00:53:11,030 --> 00:53:12,250 Det er SocketIO. 1071 00:53:12,250 --> 00:53:15,580 Så når nogen begynder at skrive i diskutere boksen for at lave et svar eller 1072 00:53:15,580 --> 00:53:20,040 noget, din browser, hvad der er kaldet i SocketIO udsender en slags 1073 00:53:20,040 --> 00:53:22,660 begivenhed, der siger nogen er besvarelse af dette indlæg. 1074 00:53:22,660 --> 00:53:26,110 >> Derefter serveren siger, OK, hvad skal jeg gøre? 1075 00:53:26,110 --> 00:53:29,270 Nå nu jeg nødt til at fortælle de andre fyre der er på CS50 Diskuter leder 1076 00:53:29,270 --> 00:53:31,170 på dette indlæg, at nogen har besvarelse. 1077 00:53:31,170 --> 00:53:34,190 Så det er lidt af, hvad SocketIO er god at denne fortsatte slags 1078 00:53:34,190 --> 00:53:35,930 strøm af dialog. 1079 00:53:35,930 --> 00:53:37,250 OK. 1080 00:53:37,250 --> 00:53:40,060 >> Så hvad jeg har her - og vi er bare kommer til at ignorere forbindelser matrix 1081 00:53:40,060 --> 00:53:41,390 for en lille smule - 1082 00:53:41,390 --> 00:53:43,080 hvad jeg gør, er jeg ved en anden lytter. 1083 00:53:43,080 --> 00:53:46,880 Så det er bare den måde i Socket.IO er siger lad os lytte på denne port. 1084 00:53:46,880 --> 00:53:50,060 Og så vil jeg gøre dette på tilslutning. 1085 00:53:50,060 --> 00:53:53,360 Så det er bare dybest set Socket IO måde at sige, når vi modtager en 1086 00:53:53,360 --> 00:53:55,840 forbindelse, jeg vil have dig at køre denne kode. 1087 00:53:55,840 --> 00:53:59,870 >> Og bemærk, at i stedet for at have rec og res bestået derinde jeg har Socket. 1088 00:53:59,870 --> 00:54:03,260 Og denne Socket idé er dybest set dette ting, som du kan skrive til og læse 1089 00:54:03,260 --> 00:54:05,750 fra som har brugerens beskeder Muligvis. 1090 00:54:05,750 --> 00:54:10,700 Og de beskeder, du vil sende kan gå igennem, at Socket. 1091 00:54:10,700 --> 00:54:12,140 Giver det mening? 1092 00:54:12,140 --> 00:54:14,490 Så det er denne fortsatte ting. 1093 00:54:14,490 --> 00:54:17,820 >> Så hvad jeg gør, er jeg kalder Socket.emit. 1094 00:54:17,820 --> 00:54:20,330 Og udsender tager temmelig meget to argumenter. 1095 00:54:20,330 --> 00:54:24,100 Det første argument er en streng blot repræsenterer typen af 1096 00:54:24,100 --> 00:54:25,270 ting, du udsender. 1097 00:54:25,270 --> 00:54:28,120 Så i dette tilfælde, jeg har brug denne streng ny meddelelse. 1098 00:54:28,120 --> 00:54:32,670 Og det er bare dybest set siger, at typen af ​​denne ting, hvad jeg 1099 00:54:32,670 --> 00:54:34,750 afsendelse, er en ny besked. 1100 00:54:34,750 --> 00:54:38,460 Så du kan lytte efter bestemte typer som ny besked eller hvad 1101 00:54:38,460 --> 00:54:39,960 ved hjælp af prik på. 1102 00:54:39,960 --> 00:54:44,570 >> Så forbindelse og bruger har sendt der, hvis man ser på, hvor vi kalder prik på, 1103 00:54:44,570 --> 00:54:48,150 der er andre strenge, der repræsenterer typer af brugernes beskeder. 1104 00:54:48,150 --> 00:54:52,060 Så det er dybest set, du kan have denne udsender en af ​​disse meddelelsestyper, og 1105 00:54:52,060 --> 00:54:55,520 så gør noget som reaktion på en af ​​disse meddelelsestyper 1106 00:54:55,520 --> 00:54:57,640 >> Så jeg udsender denne nye meddelelse. 1107 00:54:57,640 --> 00:55:00,540 Vi kommer til at ignorere connections.push for en anden. 1108 00:55:00,540 --> 00:55:03,360 Men så siger jeg, Socket.on brugeren sendt. 1109 00:55:03,360 --> 00:55:07,540 Så nu er det er lidt ligesom, når bruger sender mig en besked, jeg vil 1110 00:55:07,540 --> 00:55:09,240 dig at køre denne kode. 1111 00:55:09,240 --> 00:55:12,080 Og bemærk, at det anonyme funktion tager i denne variabel 1112 00:55:12,080 --> 00:55:16,300 kaldet data, der dybest set går har brugeren budskab. 1113 00:55:16,300 --> 00:55:20,700 >> Så lad os nu slags snak om tilslutningerne array. 1114 00:55:20,700 --> 00:55:24,590 Så dette er designet til en chat-klient hvor stort set alle er slags i 1115 00:55:24,590 --> 00:55:25,950 samme chat-rum. 1116 00:55:25,950 --> 00:55:29,640 Så dybest set, hvad vi har brug for at holde omkring er nogle array, der dybest set 1117 00:55:29,640 --> 00:55:33,170 repræsenterer alle de personer chatter i nogle måder, hvis det giver mening. 1118 00:55:33,170 --> 00:55:33,340 Right? 1119 00:55:33,340 --> 00:55:37,190 Fordi vi har brug for at vide, hvem de fyre er, så vi kan sende dem beskeder 1120 00:55:37,190 --> 00:55:39,140 at andre folk sender til os. 1121 00:55:39,140 --> 00:55:44,440 >> Så hvad denne kode gør, er, når brugeren sender et budskab - det er den type 1122 00:55:44,440 --> 00:55:45,300 begivenheden - 1123 00:55:45,300 --> 00:55:47,120 vi kommer til at køre denne kode. 1124 00:55:47,120 --> 00:55:51,240 Og hvad vi gør, er vi kører gennem denne array, vi har kaldt forbindelser. 1125 00:55:51,240 --> 00:55:54,390 Og temmelig meget for hver forbindelse undtagen den ene, der er vores, det er 1126 00:55:54,390 --> 00:55:59,520 hvad denne kode siger, sender vi et nyt besked med det vedlagte meddelelse 1127 00:55:59,520 --> 00:56:01,210 information. 1128 00:56:01,210 --> 00:56:04,880 >> Så hvis du bemærker her, hvad jeg gjorde, da brugeren rent faktisk gør en ny 1129 00:56:04,880 --> 00:56:08,560 forbindelse er jeg har tilføjet med JavaScript.push metode, er dette 1130 00:56:08,560 --> 00:56:12,100 dybest set bare at sige ligesom tilføje at Socket som en værdi i 1131 00:56:12,100 --> 00:56:13,900 vores forbindelser array. 1132 00:56:13,900 --> 00:56:20,560 Så nu når denne kode kører, vil det sende tingene til dem, især 1133 00:56:20,560 --> 00:56:22,020 tilslutninger. 1134 00:56:22,020 --> 00:56:26,980 Så det kan være et godt udgangspunkt for at gøre en chat-server 1135 00:56:26,980 --> 00:56:28,250 eller noget lignende. 1136 00:56:28,250 --> 00:56:33,315 >> Og den slags cool ting er, at kode, som du ser her til ligesom på og 1137 00:56:33,315 --> 00:56:36,390 udsender og den slags, er det samme form for JavaScript-kode, som du ville 1138 00:56:36,390 --> 00:56:39,260 skrive i browseren til at interagere med serveren. 1139 00:56:39,260 --> 00:56:42,480 Så det er derfor SocketIO er slags pæne og nyttige i denne måde. 1140 00:56:42,480 --> 00:56:45,680 1141 00:56:45,680 --> 00:56:49,250 >> Åh, og kun én ting mere hurtigt. 1142 00:56:49,250 --> 00:56:55,970 Der var en CS50 afgangsprojekt sidste år der dybest set implementeret en chat 1143 00:56:55,970 --> 00:56:57,840 server i Node.js. 1144 00:56:57,840 --> 00:57:01,350 Jeg synes det er Harvardchats.org men jeg er ikke - 1145 00:57:01,350 --> 00:57:02,940 OK. 1146 00:57:02,940 --> 00:57:06,190 Jeg er ikke sikker på, hvad URL er, men Jeg kan sende det ud bagefter. 1147 00:57:06,190 --> 00:57:09,260 Men det er lidt cool hvad du kan gøre med Node.js. 1148 00:57:09,260 --> 00:57:14,680 >> Så håber jeg, i almindelighed, du fyre har en god fornemmelse af, hvad Node.js er nyttigt 1149 00:57:14,680 --> 00:57:17,870 til, og hvordan man kunne måske anvende til din endelige projekt. 1150 00:57:17,870 --> 00:57:21,050 Jeg vil sende nogle flere ressourcer sammen med dette. 1151 00:57:21,050 --> 00:57:23,170 Og tak fordi du kom. 1152 00:57:23,170 --> 00:57:23,610 Tak. 1153 00:57:23,610 --> 00:57:27,168 >> [Applaus]