1 00:00:00,000 --> 00:00:08,350 2 00:00:08,350 --> 00:00:09,710 >> KEVIN SCHMID: Hei alle sammen. 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 Mitt 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 liksom som virkelig spent om dette seminaret. 7 00:00:17,650 --> 00:00:20,430 Jeg tror Node.js er veldig kul. 8 00:00:20,430 --> 00:00:24,200 Jeg håper at dette seminaret kan brukes som en god, antar jeg, springbrett for 9 00:00:24,200 --> 00:00:26,380 noen av dine siste prosjekter hvis du er interessert i å bruke 10 00:00:26,380 --> 00:00:27,630 noe som node.js. 11 00:00:27,630 --> 00:00:29,770 12 00:00:29,770 --> 00:00:33,320 >> Vi skal liksom starte seminaret av ved bare snakker om en liten bit av 13 00:00:33,320 --> 00:00:36,970 slags bakgrunn skalerbarhet perspektiver av Node.js, og deretter 14 00:00:36,970 --> 00:00:39,240 vi vil flytte til noen kodeeksempler. 15 00:00:39,240 --> 00:00:42,340 Og jeg vil ha koden på en nettside, og du kan se på koden. 16 00:00:42,340 --> 00:00:45,475 Og etter seminaret, vil jeg sortere snakk om hvordan du kan sette opp Node.js 17 00:00:45,475 --> 00:00:48,220 på datamaskinen. 18 00:00:48,220 --> 00:00:48,710 >> OK. 19 00:00:48,710 --> 00:00:49,760 Så la oss komme i gang. 20 00:00:49,760 --> 00:00:53,700 Så jeg antar jeg vil bare snakke om webservere, egentlig, først. 21 00:00:53,700 --> 00:00:59,730 Og for å starte denne diskusjonen, jeg i utgangspunktet ha et diagram som utgjør fra 22 00:00:59,730 --> 00:01:04,269 lærebok som brukes for CS61, som utgangspunktet viser samspillet 23 00:01:04,269 --> 00:01:08,510 mellom en klient prosess, som din web leseren eller lignende målet klient eller 24 00:01:08,510 --> 00:01:11,340 noe sånt, og en web server. 25 00:01:11,340 --> 00:01:15,150 Så denne typen ligner på bilde som du så i foredrag om 26 00:01:15,150 --> 00:01:19,270 Onsdag der utgangspunktet vi har noen klient prosess som Google Chrome. 27 00:01:19,270 --> 00:01:22,980 >> Og deretter trinn en er klienten sender en forespørsel. 28 00:01:22,980 --> 00:01:27,510 Så det kan være noe sånt vel la oss besøke, vet jeg ikke, CS50.net. 29 00:01:27,510 --> 00:01:29,320 Så vi utstede at forespørselen. 30 00:01:29,320 --> 00:01:34,280 Og er det noen som husker navnet på protokollen som angir hvordan det 31 00:01:34,280 --> 00:01:35,610 anmodning bør være strukturert? 32 00:01:35,610 --> 00:01:36,382 Jepp. 33 00:01:36,382 --> 00:01:37,650 >> PUBLIKUM: [uhørbart]. 34 00:01:37,650 --> 00:01:38,150 >> KEVIN SCHMID: Nettopp. 35 00:01:38,150 --> 00:01:40,100 Så det er som HTTP, ikke sant? 36 00:01:40,100 --> 00:01:44,720 Så i utgangspunktet spesifikasjon for hvordan at forespørselen skal faktisk legges 37 00:01:44,720 --> 00:01:47,450 ut, fordi ved slutten av dagen, at anmodningen er egentlig bare liker en 38 00:01:47,450 --> 00:01:50,240 streng som i utgangspunktet sier jeg ønsker dette. 39 00:01:50,240 --> 00:01:53,580 Og spesifikasjonen for det er HTTP. 40 00:01:53,580 --> 00:01:55,270 Så det er som en protokoll. 41 00:01:55,270 --> 00:01:57,920 >> Så da serveren mottar at forespørselen. 42 00:01:57,920 --> 00:02:01,610 Så dere har en web-server installert 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 denne uken når du jobber på problemet satt sju, vil du faktisk være i arbeid 45 00:02:06,230 --> 00:02:08,160 med det web server. 46 00:02:08,160 --> 00:02:12,380 Slik at serveren mottar denne forespørselen, og så det må slags ripe sin 47 00:02:12,380 --> 00:02:15,090 hode og si like godt hva gjør jeg med dette? 48 00:02:15,090 --> 00:02:20,060 >> Så basert på hva den bestemmer seg for å gjøre, så det kan ha å kontakte noen form 49 00:02:20,060 --> 00:02:20,730 av ressursen. 50 00:02:20,730 --> 00:02:23,700 Og at ressursen kan være en mange forskjellige ting. 51 00:02:23,700 --> 00:02:26,810 For én, kan det være like som en statisk HTML-fil. 52 00:02:26,810 --> 00:02:29,820 Så det kan bare være som noen HTML som er som for 53 00:02:29,820 --> 00:02:31,100 din personlige nettside. 54 00:02:31,100 --> 00:02:35,360 Det kan være en statisk fil som et bilde eller som en film som du har. 55 00:02:35,360 --> 00:02:37,660 Det kan også ha å snakke til en slags database 56 00:02:37,660 --> 00:02:39,530 som en MySQL database. 57 00:02:39,530 --> 00:02:43,910 Så det trenger ikke alltid å kommunisere med en kilde, men 58 00:02:43,910 --> 00:02:45,700 noen tilfeller, det kunne. 59 00:02:45,700 --> 00:02:47,800 >> Så hva det kommer til å gjøre etter det er det kommer til å 60 00:02:47,800 --> 00:02:49,430 sende tilbake svar. 61 00:02:49,430 --> 00:02:53,130 Og responsen til dette er også spesifisert av HTTP. 62 00:02:53,130 --> 00:02:54,830 Så da kunden kan motta den. 63 00:02:54,830 --> 00:02:56,740 Det kan rive den fra hverandre og behandle den. 64 00:02:56,740 --> 00:03:00,900 Og så får du en nettside som Google eller CS50.net eller 65 00:03:00,900 --> 00:03:02,240 uansett hva du gikk til. 66 00:03:02,240 --> 00:03:03,100 OK? 67 00:03:03,100 --> 00:03:06,080 >> Så dette er den grunnleggende samspillet som vi kommer til å være med å gjøre. 68 00:03:06,080 --> 00:03:08,770 Og vi er ganske mye kommer til å være fokuserer på denne del av 69 00:03:08,770 --> 00:03:10,640 interaksjon, serveren. 70 00:03:10,640 --> 00:03:10,990 OK. 71 00:03:10,990 --> 00:03:12,210 Cool. 72 00:03:12,210 --> 00:03:15,500 Noen som har noen spørsmål så langt? 73 00:03:15,500 --> 00:03:17,720 OK. 74 00:03:17,720 --> 00:03:22,430 >> Så som vi sa, mottar webserveren dette HTTP-forespørsel og deretter sender denne 75 00:03:22,430 --> 00:03:24,760 HTTP respons. 76 00:03:24,760 --> 00:03:29,100 Og som vi snakket om før, CS50 apparatet webserver er Apache. 77 00:03:29,100 --> 00:03:32,490 Så når dere jobber på P satt syv, du kommer til å jobbe med den 78 00:03:32,490 --> 00:03:34,120 Apache webserver. 79 00:03:34,120 --> 00:03:37,890 Du trenger aldri å virkelig jobbe med Apache direkte for mye. 80 00:03:37,890 --> 00:03:41,920 Du liksom konfigurere Apache litt når du angir de virtuelle verter eller 81 00:03:41,920 --> 00:03:44,970 v verter, og vi får til at i en liten bit. 82 00:03:44,970 --> 00:03:50,620 >> Men i utgangspunktet, Apache web server satt opp til å jobbe med PHP slag 83 00:03:50,620 --> 00:03:51,730 av ut av boksen. 84 00:03:51,730 --> 00:03:56,170 Så hva som egentlig skjer er når du går til en av dine nettsteder som for eksempel 85 00:03:56,170 --> 00:04:00,360 lokale verten slash index.php eller noe, er nettleseren din sender som 86 00:04:00,360 --> 00:04:04,330 forespørsel, og deretter Apache sitter det og finner ut å gjøre med det. 87 00:04:04,330 --> 00:04:08,840 Og handlingen er å utføre at koden i index.php og 88 00:04:08,840 --> 00:04:11,330 så å sende dem tilbake. 89 00:04:11,330 --> 00:04:15,640 Så det er det. 90 00:04:15,640 --> 00:04:16,980 Så vi liksom snakket om dette. 91 00:04:16,980 --> 00:04:21,990 Så det kan bare tjene en statisk fil eller kjøre noen PHP-kode og deretter saken 92 00:04:21,990 --> 00:04:23,510 responsen. 93 00:04:23,510 --> 00:04:27,670 >> Så da et vanlig spørsmål som kan komme opp er godt, hvordan kan vi egentlig forholde 94 00:04:27,670 --> 00:04:31,750 med å ha flere brukere på samme tid? 95 00:04:31,750 --> 00:04:36,930 Så tenk deg hvis du skulle skrive en web server, hvis du hadde en webserver som 96 00:04:36,930 --> 00:04:39,900 du prøvde å skrive på noe som C eller noe sånt, 97 00:04:39,900 --> 00:04:45,150 utgangspunktet du kan tenke på hvordan det kunne være en slags kode som 98 00:04:45,150 --> 00:04:49,330 ville motta forespørselen, men da det har å gjøre alt dette arbeidet på den. 99 00:04:49,330 --> 00:04:53,060 Det kan ha å, for eksempel, kan du kontakte database eller noe sånt. 100 00:04:53,060 --> 00:04:53,300 Høyre? 101 00:04:53,300 --> 00:04:56,010 Og så ville det gjøre den slags behandling, og deretter 102 00:04:56,010 --> 00:04:57,060 sendes tilbake responsen. 103 00:04:57,060 --> 00:04:58,950 Så det er like høy oversikt nivå. 104 00:04:58,950 --> 00:05:04,210 >> Men det er ikke umiddelbart opplagt hvordan du kan gjøre det slik at to personer eller 105 00:05:04,210 --> 00:05:09,040 selv tusen mennesker kunne arbeide med din webserver samtidig. 106 00:05:09,040 --> 00:05:14,880 Så løsningen som Apache bruker kalles tråder eller prosesser. 107 00:05:14,880 --> 00:05:16,770 Så du har kanskje hørt om disse vilkårene før. 108 00:05:16,770 --> 00:05:22,190 Det er OK hvis du ikke har, men bare tror om tråder eller prosesser som måter for 109 00:05:22,190 --> 00:05:26,290 et operativsystem eller et brukerprogram eller noe sånt eller en web-server 110 00:05:26,290 --> 00:05:28,810 å slags utføre flere ting på en gang. 111 00:05:28,810 --> 00:05:31,760 Så du har kanskje hørt begrepet som tråder i utførelsen. 112 00:05:31,760 --> 00:05:34,140 Så det er litt som du er slags multitasking. 113 00:05:34,140 --> 00:05:37,710 >> Og hvis du har sett på boksen din laptop, eller noe sånt, 114 00:05:37,710 --> 00:05:43,040 flerkjernede, hva du kan gjøre er at du kan kjøre to forskjellige tråder på forskjellige 115 00:05:43,040 --> 00:05:46,700 deler av CPU slik at de kan kontakte faktisk skje på samme tid. 116 00:05:46,700 --> 00:05:48,100 Så dette er virkelig kraftig. 117 00:05:48,100 --> 00:05:52,270 Og dette er slags Apaches Løsningen på dette problemet. 118 00:05:52,270 --> 00:05:57,900 >> Så er det litt som eventuelle problemer med denne tilnærmingen skjønt? 119 00:05:57,900 --> 00:05:59,870 Så jeg antar jeg slags skrev dem der. 120 00:05:59,870 --> 00:06:03,440 Men begge slags bruker mye minne. 121 00:06:03,440 --> 00:06:07,490 Det er veldig dyrt å lage en tråd eller en prosess. 122 00:06:07,490 --> 00:06:11,750 >> Og en del av begrunnelsen er at bare som når du kjører et C-program 123 00:06:11,750 --> 00:06:15,090 som din viktigste og deretter at samtaler en annen funksjon, er det 124 00:06:15,090 --> 00:06:16,520 eller annen form for stabelen. 125 00:06:16,520 --> 00:06:19,910 Så tråder også kreve en helt separat stack som 126 00:06:19,910 --> 00:06:21,220 kan være ganske stor. 127 00:06:21,220 --> 00:06:25,170 Og hvis du kan tenke deg å ha tonnevis av brukere på nettstedet ditt, vil du ha 128 00:06:25,170 --> 00:06:26,280 mange forskjellige tråder. 129 00:06:26,280 --> 00:06:28,230 Det er mye av stabler til administrere og vedlikeholde. 130 00:06:28,230 --> 00:06:31,280 Så det er stor minneforbruk. 131 00:06:31,280 --> 00:06:35,650 >> Og så, også, la oss si at du bare har én CPU, eller la oss si at du har 132 00:06:35,650 --> 00:06:38,460 flere tråder enn du har disse multicores. 133 00:06:38,460 --> 00:06:38,730 Høyre? 134 00:06:38,730 --> 00:06:43,280 Så la oss si at du hadde 10 tråder og du bare hadde fem CPUer. 135 00:06:43,280 --> 00:06:46,260 Du slags nødt til å gjøre denne tingen der du veksle mellom gjeldende 136 00:06:46,260 --> 00:06:49,090 en som kjører fordi du kan ikke kjøre alle 10 på en gang. 137 00:06:49,090 --> 00:06:50,980 Og det kalles en kontekst svitsj. 138 00:06:50,980 --> 00:06:54,260 Og dette ordet faktisk har et par forskjellige sammenhenger, men la oss bare 139 00:06:54,260 --> 00:06:56,620 tenker på det som å bytte mellom to tråder. 140 00:06:56,620 --> 00:06:59,730 Det kan være ganske dyrt fordi innerst inne hva du trenger å gjøre er du 141 00:06:59,730 --> 00:07:03,340 nødt til å stoppe hva du gjør, lagre staten som kjører tråden, og 142 00:07:03,340 --> 00:07:05,440 deretter bytte til et annet sted. 143 00:07:05,440 --> 00:07:09,420 >> Så gjør alle slags se den motivasjon for hvorfor tråder og 144 00:07:09,420 --> 00:07:12,030 prosesser kan være litt klumpete? 145 00:07:12,030 --> 00:07:13,840 Og visste du har et spørsmål? 146 00:07:13,840 --> 00:07:14,376 OK. 147 00:07:14,376 --> 00:07:15,070 Cool. 148 00:07:15,070 --> 00:07:18,090 Noen som har noen spørsmål? 149 00:07:18,090 --> 00:07:19,620 OK. 150 00:07:19,620 --> 00:07:26,720 >> Så hvis vi tar et skritt tilbake for en andre, det er litt som en 151 00:07:26,720 --> 00:07:30,350 observasjon at vi kan gjøre om mye av web-applikasjoner. 152 00:07:30,350 --> 00:07:34,810 Og det er egentlig at mange av dem faktisk ikke gjør det mye nyttig 153 00:07:34,810 --> 00:07:37,140 arbeide inne i en tråd. 154 00:07:37,140 --> 00:07:41,170 Så har noen startet på P satt sju i det hele tatt? 155 00:07:41,170 --> 00:07:45,650 Så vil du kanskje beskrive noen av delene? 156 00:07:45,650 --> 00:07:47,850 Har du jobbet på innlogging eller noe sånt? 157 00:07:47,850 --> 00:07:49,330 >> PUBLIKUM: Nei. 158 00:07:49,330 --> 00:07:49,780 >> KEVIN SCHMID: OK. 159 00:07:49,780 --> 00:07:50,150 Bare hyggelig. 160 00:07:50,150 --> 00:07:50,900 Unnskyld. 161 00:07:50,900 --> 00:07:55,790 Men i utgangspunktet, i P sett, er du kommer til å være å gjøre en masse slags 162 00:07:55,790 --> 00:07:59,760 spørringer til en database for å få litt informasjon fra denne databasen. 163 00:07:59,760 --> 00:08:03,330 Og hva koden din kommer til å gjøre, hva som Apache prosess eller 164 00:08:03,330 --> 00:08:06,030 at Apache tråden kommer til å være å gjøre samtidig som det har til å kontakte 165 00:08:06,030 --> 00:08:08,990 databasen er det liksom skal være sitter der og det kommer til å være 166 00:08:08,990 --> 00:08:12,130 venter på databasen for å svare. 167 00:08:12,130 --> 00:08:16,290 >> Nå som kanskje ikke høres ut som så stor en håndtere fordi databasen er på din 168 00:08:16,290 --> 00:08:18,240 CS50 apparatet, ikke sant? 169 00:08:18,240 --> 00:08:22,930 Men det er en slags nettverk ventetid der fordi nå nettet 170 00:08:22,930 --> 00:08:26,830 serveren har å utstede sin egen forespørsel til databasen for å kommunisere med den 171 00:08:26,830 --> 00:08:29,520 database og deretter få det informasjon tilbake. 172 00:08:29,520 --> 00:08:33,190 Så nå er det like godt vente på meg, jeg er kommer til å gå få noe fra 173 00:08:33,190 --> 00:08:35,770 database og så er det en mye venting skjer. 174 00:08:35,770 --> 00:08:36,870 Betyr det fornuftig? 175 00:08:36,870 --> 00:08:38,580 >> Og for enkelte ting det er ikke så ille. 176 00:08:38,580 --> 00:08:41,950 Hvis det bare er å, for eksempel, access memory, som ikke liker 177 00:08:41,950 --> 00:08:44,100 fryktelig I / O latency. 178 00:08:44,100 --> 00:08:47,110 Og når jeg sier, I / O-latency, det jeg er henviser til er som en hvilken som helst type som 179 00:08:47,110 --> 00:08:48,290 Input Output. 180 00:08:48,290 --> 00:08:52,950 Men for å få tilgang til en fil på disken, som hvis jeg ønsket å tjene den statiske HTML 181 00:08:52,950 --> 00:08:57,850 fil som var på min nettside eller noe sånt, jeg slags nødt til å 182 00:08:57,850 --> 00:09:02,310 stoppe for en bit, lese denne filen i fra disken, og deretter i 183 00:09:02,310 --> 00:09:04,400 at prosessen Jeg venter. 184 00:09:04,400 --> 00:09:06,700 Jeg gjør nyttig arbeid. 185 00:09:06,700 --> 00:09:11,270 >> Dette er ikke sant av alt, men det er vanlig i programmer som P sett 186 00:09:11,270 --> 00:09:13,960 syv og en rekke programmer at du ikke er 187 00:09:13,960 --> 00:09:15,440 faktisk gjør mye tenkning. 188 00:09:15,440 --> 00:09:19,090 Og når jeg sier tenkning, mener jeg som beregningsarbeidet. 189 00:09:19,090 --> 00:09:23,270 Så beregningsarbeid kan være noe som, si, ville at du skulle 190 00:09:23,270 --> 00:09:26,590 skrive en web server som bare beregnet n'te Fibonacci-tall. 191 00:09:26,590 --> 00:09:29,300 Det høres ikke ut som en spesielt morsom web server. 192 00:09:29,300 --> 00:09:34,220 Som jeg ville ikke forvente at området skal være den neste Facebook, men det er en viss 193 00:09:34,220 --> 00:09:35,610 slags beregningsarbeidet. 194 00:09:35,610 --> 00:09:39,570 >> Og du kan tenke deg å erstatte det med en annen form for interessant 195 00:09:39,570 --> 00:09:43,070 beregningsorientert arbeid. 196 00:09:43,070 --> 00:09:46,050 La oss si at du skulle skrive noe som beregnet de grader av 197 00:09:46,050 --> 00:09:49,170 separasjon mellom to mennesker eller noe sånt. 198 00:09:49,170 --> 00:09:51,860 Så det innebærer noen form av beregningen, ikke sant? 199 00:09:51,860 --> 00:09:56,630 Og selv da, for å gjøre at du fortsatt har å gjøre mye venting for kanskje 200 00:09:56,630 --> 00:09:59,550 du må spørre en database for å se opp hvem som er venner med hvem eller 201 00:09:59,550 --> 00:10:00,600 noe sånt. 202 00:10:00,600 --> 00:10:03,510 Så det er den slags forestilling av beregningsarbeidet. 203 00:10:03,510 --> 00:10:05,260 Betyr det fornuftig? 204 00:10:05,260 --> 00:10:08,258 Er det noen som har noen spørsmål? 205 00:10:08,258 --> 00:10:11,960 >> Oh, og jeg tror jeg satt chat-servere der fordi chat servere er slags 206 00:10:11,960 --> 00:10:13,240 et annet godt eksempel på dette. 207 00:10:13,240 --> 00:10:15,250 En chat-serveren har ikke å gjøre mye tenking. 208 00:10:15,250 --> 00:10:18,350 Det har bare å vente for folk å sende meldinger og så når 209 00:10:18,350 --> 00:10:19,800 de gjør, sende 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 å oppsummere igjen, Apache og lignende webservere sånn gaffel en 213 00:10:28,180 --> 00:10:31,470 Mange tråder og prosesser som kan være litt bortkastet. 214 00:10:31,470 --> 00:10:37,530 Så jeg antar at spørsmålet som kan komme fra det er trenger vi å ha 215 00:10:37,530 --> 00:10:39,610 flere tråder og prosesser? 216 00:10:39,610 --> 00:10:41,890 Hva om vi bare hadde én? 217 00:10:41,890 --> 00:10:45,710 >> Så la oss slags male et bilde av hva dette vil se ut. 218 00:10:45,710 --> 00:10:47,810 Så la oss bruke bare én tråd. 219 00:10:47,810 --> 00:10:48,660 OK? 220 00:10:48,660 --> 00:10:52,790 Så tenk bare dette med en tråd. 221 00:10:52,790 --> 00:10:56,600 >> La oss anta at vi egentlig ikke gjør at mye nyttig - og når jeg sier 222 00:10:56,600 --> 00:10:59,450 nyttig, mener jeg beregningsarbeid - 223 00:10:59,450 --> 00:11:01,130 i de flere tråder før. 224 00:11:01,130 --> 00:11:04,180 Så la oss slags konsolidere alt inn i en tråd. 225 00:11:04,180 --> 00:11:07,780 Så hva om vi hadde en tråd som slag av bare går rundt i loop og 226 00:11:07,780 --> 00:11:10,880 stadig sjekker gjorde noe ny skje. 227 00:11:10,880 --> 00:11:15,130 Så for eksempel, noe nytt har skjedd kan bety jeg fikk noe tilbake fra 228 00:11:15,130 --> 00:11:19,310 databasen, eller noen sendte meg en ny HTTP-forespørsel. 229 00:11:19,310 --> 00:11:22,290 Så de er typer arrangementer det skje, ikke sant? 230 00:11:22,290 --> 00:11:26,130 >> Og så hva jeg kan gjøre når de nye ting hender er i denne samme tråd 231 00:11:26,130 --> 00:11:30,120 henrettelses, dette enkelt tråd av gjennomføring, kan jeg ringe noen kode som 232 00:11:30,120 --> 00:11:32,410 ville håndtere en bestemt ting. 233 00:11:32,410 --> 00:11:36,640 Så for eksempel, hvis jeg fikk noe tilbake fra databasen, kan jeg kjøre min 234 00:11:36,640 --> 00:11:40,960 liten beregnings del av det som faktisk bare forbereder ting til 235 00:11:40,960 --> 00:11:42,620 sende tilbake til brukeren. 236 00:11:42,620 --> 00:11:46,710 Så gjør den slags fornuftig? 237 00:11:46,710 --> 00:11:49,940 >> Men hva er egentlig den implikasjonene av dette? 238 00:11:49,940 --> 00:11:50,660 Høyre? 239 00:11:50,660 --> 00:11:53,730 Fordi vi har skrevet mye kode som - 240 00:11:53,730 --> 00:11:58,330 og jeg bare kommer til å hoppe fremover i lysbildene hvis det er OK. 241 00:11:58,330 --> 00:12:00,930 Så hvis du ikke har noe imot, jeg er bare kommer til å ta et skritt tilbake. 242 00:12:00,930 --> 00:12:03,410 Så denne typen ting er kalles en hendelse loop. 243 00:12:03,410 --> 00:12:04,070 OK? 244 00:12:04,070 --> 00:12:07,240 Og det er på en måte den grunnleggende Ideen bak node.js. 245 00:12:07,240 --> 00:12:11,240 >> Så hva Node.js er virkelig gjør som en web server er det en enkel tråd 246 00:12:11,240 --> 00:12:14,850 som er i utgangspunktet går rundt i en sløyfe som en stund en slags henhold 247 00:12:14,850 --> 00:12:18,510 panseret på Node.js det er stadig sjekker, vi får nye ting? 248 00:12:18,510 --> 00:12:22,720 Og da vil den kjøre handlers at du setter opp. 249 00:12:22,720 --> 00:12:26,720 Men et godt spørsmål å stille er, hvordan kan vi gjøre dette skje 250 00:12:26,720 --> 00:12:28,090 med eksisterende ting? 251 00:12:28,090 --> 00:12:32,440 >> Så jeg satte en linje med C-kode her som i utgangspunktet ser ut som det er åpning en 252 00:12:32,440 --> 00:12:33,060 fil, ikke sant? 253 00:12:33,060 --> 00:12:36,090 Jeg Hun bare kom ut med et album. 254 00:12:36,090 --> 00:12:39,600 Så jeg måtte åpne henne en ny fil. 255 00:12:39,600 --> 00:12:43,810 Så måten vår C-kode for drift - 256 00:12:43,810 --> 00:12:47,890 og jeg antar at grunnen til at jeg valgte filene var fordi dette er slik grad 257 00:12:47,890 --> 00:12:52,000 av I / O-arbeidet som vi har gjort i C i en følelse av at det er input output. 258 00:12:52,000 --> 00:12:55,070 Så vi kaller dette kode som gjør dette f åpen. 259 00:12:55,070 --> 00:12:59,370 Og deretter på den neste linje i vår program, kan vi nå jobbe med f. 260 00:12:59,370 --> 00:13:02,710 >> Så dette ville være et eksempel på noe det er som synkron eller 261 00:13:02,710 --> 00:13:06,850 blokkerer fordi på den første linjen Det vi venter til vi 262 00:13:06,850 --> 00:13:08,110 få filen åpen. 263 00:13:08,110 --> 00:13:12,260 Så på den andre linjen, vi vet at vi kan arbeide med f, men dette betyr at 264 00:13:12,260 --> 00:13:16,240 at andre linjen kan egentlig ikke kjøre til den første linjen er ferdig. 265 00:13:16,240 --> 00:13:17,760 Betyr det fornuftig? 266 00:13:17,760 --> 00:13:20,890 >> Så dette ville være ille å sette i en hendelseshåndterer. 267 00:13:20,890 --> 00:13:23,920 Og grunnen til det er at denne typen venter, ikke sant? 268 00:13:23,920 --> 00:13:26,500 Så dette ville gå tilbake oss tilbake til det samme. 269 00:13:26,500 --> 00:13:29,470 Og nå ville vi ikke engang ha den nytte av flere tråder eller 270 00:13:29,470 --> 00:13:32,390 prosesser fordi vi fikk en tråd i node.js. 271 00:13:32,390 --> 00:13:35,496 Betyr det fornuftig for alle? 272 00:13:35,496 --> 00:13:35,990 >> PUBLIKUM: Vent. 273 00:13:35,990 --> 00:13:36,980 Så hva er nytt? 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 kommer til å få til erstatningen. 276 00:13:39,560 --> 00:13:40,430 OK. 277 00:13:40,430 --> 00:13:42,960 Så hva om vi hadde noe som så ut som dette? 278 00:13:42,960 --> 00:13:45,730 Så hva om nå jeg redigerte f åpne litt? 279 00:13:45,730 --> 00:13:48,370 Så jeg har bestått i samme to argumenter som før. 280 00:13:48,370 --> 00:13:52,610 Jeg fortsatt elsker den nye sangen at hun kom ut med. 281 00:13:52,610 --> 00:13:57,260 Men jeg har bestått en tredje ting som er denne variabelen kalles kode. 282 00:13:57,260 --> 00:14:02,280 >> Men hva er koden faktisk i denne sammenheng? 283 00:14:02,280 --> 00:14:05,360 Er det som en vanlig C-variablene? 284 00:14:05,360 --> 00:14:06,740 Det er en funksjon, ikke sant? 285 00:14:06,740 --> 00:14:09,450 Og det kan være litt rart fordi Jeg er faktisk som nå passerer en 286 00:14:09,450 --> 00:14:12,320 fungere i en annen funksjon. 287 00:14:12,320 --> 00:14:14,400 >> Så et par ting å merke seg om dette. 288 00:14:14,400 --> 00:14:17,145 One, er jeg faktisk ikke kalle koden funksjon. 289 00:14:17,145 --> 00:14:20,650 Så du ikke ser koden med venstre paren, rett paren. 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, hva dette ville faktisk gjøre er å gi meg en peker til at faktiske 292 00:14:26,990 --> 00:14:29,740 kode, og deretter dette kunne kjøre den. 293 00:14:29,740 --> 00:14:33,350 Men tenk om det som du er passerer kode kjøres når 294 00:14:33,350 --> 00:14:35,150 at filen åpnes. 295 00:14:35,150 --> 00:14:41,430 >> Men hva dette betyr er at nå Resten av mitt program som kunne gjøre 296 00:14:41,430 --> 00:14:47,050 andre ting, kan fortsette å gjøre andre ting mens vi, egentlig ikke vente, men 297 00:14:47,050 --> 00:14:50,890 bare ha på baksiden av hodet som når denne filen åpen, løp som 298 00:14:50,890 --> 00:14:52,130 Koden på toppen. 299 00:14:52,130 --> 00:14:53,390 Betyr det fornuftig? 300 00:14:53,390 --> 00:14:58,060 >> Og nå ideen bak Node.js er at koden i do stuff med f 301 00:14:58,060 --> 00:15:04,590 delen bør være ganske kort og enkel og grei og egentlig ikke være 302 00:15:04,590 --> 00:15:06,160 svært beregningskrevende. 303 00:15:06,160 --> 00:15:09,390 Det kan ha å åpne en annen fil, men som også bør være ganske rask 304 00:15:09,390 --> 00:15:14,710 fordi det skal bare si gjøre en annen f åpne og deretter ringe denne annen kode. 305 00:15:14,710 --> 00:15:19,100 >> Så bare for å være helt klar, den f åpne som gjør den nye Katy Perry sang 306 00:15:19,100 --> 00:15:23,060 gjort mp3, som kommer til å ganske mye tilbake umiddelbart. 307 00:15:23,060 --> 00:15:27,820 Og da kan vi bare fortsette å gjøre andre ting fordi alt som nå f 308 00:15:27,820 --> 00:15:33,410 åpen samtale gjør er å fortelle i utgangspunktet den underliggende f åpen kode åpne denne filen 309 00:15:33,410 --> 00:15:36,020 og når du er ferdig å åpne denne fil eller når du får den tilbake, 310 00:15:36,020 --> 00:15:37,480 deretter kjøre denne koden. 311 00:15:37,480 --> 00:15:39,540 Men det gjør faktisk ikke kjøre denne koden. 312 00:15:39,540 --> 00:15:41,815 Og du hadde et spørsmål? 313 00:15:41,815 --> 00:15:46,180 >> PUBLIKUM: Du syntes å antyde noen ganger at å legge beregnings 314 00:15:46,180 --> 00:15:50,545 intensiv kode slags bryte [Uhørbart] drevet system. 315 00:15:50,545 --> 00:15:51,795 [Uhørbart]? 316 00:15:51,795 --> 00:15:54,450 317 00:15:54,450 --> 00:15:55,290 >> KEVIN SCHMID: Det er et stort spørsmål. 318 00:15:55,290 --> 00:15:59,280 Så jeg har faktisk et eksempel på hvordan du kan integrere beregnings 319 00:15:59,280 --> 00:16:01,090 intensiv kode i en liten bit. 320 00:16:01,090 --> 00:16:03,620 Så når vi kommer til de kodeeksempler, Jeg skal sørge for å trekke den. 321 00:16:03,620 --> 00:16:04,700 Er det OK? 322 00:16:04,700 --> 00:16:05,950 Takk. 323 00:16:05,950 --> 00:16:07,690 324 00:16:07,690 --> 00:16:08,750 >> Hva var navnet ditt? 325 00:16:08,750 --> 00:16:10,620 >> PUBLIKUM: Aaron. 326 00:16:10,620 --> 00:16:14,830 >> KEVIN SCHMID: Aaron bringer opp et meget godt poeng, som er at hvis jeg hadde 327 00:16:14,830 --> 00:16:18,560 noen beregningsmessig intensive kode i det gjør ting med f del, resten av 328 00:16:18,560 --> 00:16:22,880 mitt program kan ikke løpe og kan ikke høre for nye forespørsler eller noe før alt 329 00:16:22,880 --> 00:16:24,270 at ting er ferdig. 330 00:16:24,270 --> 00:16:27,390 Så hvis jeg skriver Node kode generelt hvis vi ikke gjør noe at jeg kommer 331 00:16:27,390 --> 00:16:33,060 å foreslå senere når vi ser på kode eksempler, må jeg være sikker på at 332 00:16:33,060 --> 00:16:36,060 koden min ikke binder opp denne hendelsen loop. 333 00:16:36,060 --> 00:16:38,120 Betyr det fornuftig? 334 00:16:38,120 --> 00:16:38,350 OK. 335 00:16:38,350 --> 00:16:40,040 Cool. 336 00:16:40,040 --> 00:16:47,090 >> Så Node.js tilbyr dette rammeverket som du kan bygge disse hendelse drevet 337 00:16:47,090 --> 00:16:48,210 servere med. 338 00:16:48,210 --> 00:16:53,460 Så det har disse slags asynkron ikke-blokkerende I / O-biblioteker, mens 339 00:16:53,460 --> 00:16:56,800 standard C-biblioteker som vi har vært arbeider med, som om du bare 340 00:16:56,800 --> 00:16:59,500 bruke dem på samme måte som vi har vært å bruke dem med f åpner og 341 00:16:59,500 --> 00:17:03,000 ting, er de som blokkerer fordi du faktisk nødt til å vente på 342 00:17:03,000 --> 00:17:04,470 den filen du vil åpne. 343 00:17:04,470 --> 00:17:09,290 >> Men Node.js gir deg dette og det utgangspunktet båndene til Googles V8 344 00:17:09,290 --> 00:17:14,030 Javascript-motor som er årsaken at Chrome er så rask på behandling 345 00:17:14,030 --> 00:17:17,040 Java fordi det har denne V8-motor. 346 00:17:17,040 --> 00:17:22,460 Så jeg vet det høres ut som en av dem WWDC utviklerkonferanser ting 347 00:17:22,460 --> 00:17:25,390 hvor de bare kaste en haug av brev tall ting for prosessorer 348 00:17:25,390 --> 00:17:26,910 og si at dette er så kult. 349 00:17:26,910 --> 00:17:34,200 Men det er kult at de gjorde dette fordi Java - 350 00:17:34,200 --> 00:17:37,010 eller kanskje hvis du ikke er kjent med Java ennå fordi vi ikke har hatt 351 00:17:37,010 --> 00:17:38,180 forelesningene på det - 352 00:17:38,180 --> 00:17:40,770 men Javascript er et tolket språk. 353 00:17:40,770 --> 00:17:41,970 >> Og dette er et viktig poeng også. 354 00:17:41,970 --> 00:17:45,790 Så det er viktig for vår web servere for å være rask, ikke sant? 355 00:17:45,790 --> 00:17:49,970 Og hvis vi bare kjører Java kode som ble tolket med bare 356 00:17:49,970 --> 00:17:52,130 noen gamle tolk det kan være treg. 357 00:17:52,130 --> 00:17:55,980 Så Node fordeler av å ha dette super rask V8 tolk. 358 00:17:55,980 --> 00:17:59,580 Og jeg vet ikke om de heter det fordi V8 slag i pannen 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 noen eksempler på denne nettadressen. 361 00:18:07,070 --> 00:18:10,490 Etter seminaret, jeg liksom skal snakke om hvordan du kan få Node sett 362 00:18:10,490 --> 00:18:13,570 opp, men for nå, jeg bare slags ønsker til å gå gjennom noen kodeeksempler. 363 00:18:13,570 --> 00:18:17,250 Så hvis du ønsker å følge med, all den kildekoden er tilgjengelig der. 364 00:18:17,250 --> 00:18:18,720 OK? 365 00:18:18,720 --> 00:18:22,280 >> Så jeg vil forlate denne nettadressen opp for en liten. 366 00:18:22,280 --> 00:18:24,440 Og så jeg skal bare slå inn i terminalen. 367 00:18:24,440 --> 00:18:29,670 368 00:18:29,670 --> 00:18:34,400 Er alle bra med denne nettadressen? 369 00:18:34,400 --> 00:18:37,990 Så jeg kommer til å bytte over til terminalen min her. 370 00:18:37,990 --> 00:18:42,030 >> Så her er koden som Jeg har for i dag. 371 00:18:42,030 --> 00:18:43,960 Hvorfor gjør ikke vi starter med simpler.js fil? 372 00:18:43,960 --> 00:18:49,110 373 00:18:49,110 --> 00:18:52,100 En annen ting er at alt dette koden kommer til å bli skrevet på 374 00:18:52,100 --> 00:18:56,660 Javascript som du kan eller kan ikke være kjent med. 375 00:18:56,660 --> 00:19:00,170 Jeg antar et par ting er at mye av Javascript-kode er den type 376 00:19:00,170 --> 00:19:04,000 syntaks og struktur er svært lik C, slik at du kan slags plukke den opp som 377 00:19:04,000 --> 00:19:05,020 hvert. 378 00:19:05,020 --> 00:19:08,750 Jeg har prøvd å skrive mye av startkoden for dette på en måte som er 379 00:19:08,750 --> 00:19:11,230 lik C, slik at den er litt mer lesbar. 380 00:19:11,230 --> 00:19:15,980 Men som vi avanserer, vil jeg være som viser noen av de ytterligere 381 00:19:15,980 --> 00:19:18,980 funksjoner i Javascript som er litt kult. 382 00:19:18,980 --> 00:19:21,510 >> Men la oss se på dette programeksemplet. 383 00:19:21,510 --> 00:19:24,820 Jeg tror alt er kuttet av der. 384 00:19:24,820 --> 00:19:28,500 Jeg skal bare fikse det virkelige raskt hvis det er OK eller ikke. 385 00:19:28,500 --> 00:19:31,400 Jeg vet ikke hva dette kommer til å gjøre. 386 00:19:31,400 --> 00:19:34,660 Er det litt bedre? 387 00:19:34,660 --> 00:19:36,510 Kan du se Var og ting? 388 00:19:36,510 --> 00:19:39,320 OK. 389 00:19:39,320 --> 00:19:44,120 >> Så den første linjen er som Java versjon av 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 å markere hva dette ville se ut i C. Så dette er akkurat som 392 00:19:49,870 --> 00:19:52,620 meg å si indeksen tilsvarer tre eller noe sånt. 393 00:19:52,620 --> 00:19:55,740 Så jeg ikke spesifisere type. 394 00:19:55,740 --> 00:20:00,780 Javascript gjør har typer, men det er veldig dynamisk skrevet i naturen, så 395 00:20:00,780 --> 00:20:02,580 ikke gi noen slags form på det. 396 00:20:02,580 --> 00:20:03,670 Så har det bare var. 397 00:20:03,670 --> 00:20:05,320 Det er som variabel. 398 00:20:05,320 --> 00:20:05,920 OK? 399 00:20:05,920 --> 00:20:08,340 >> Og jeg ringer denne variabelen HTTP. 400 00:20:08,340 --> 00:20:12,480 Og på min høyre side, jeg har uttrykk for at jeg ønsker å sette i HTTP. 401 00:20:12,480 --> 00:20:14,960 Og dette sier krever HTTP. 402 00:20:14,960 --> 00:20:18,500 Så dette er ganske lik å inkludere. 403 00:20:18,500 --> 00:20:22,940 Det er litt mer som kraftigere enn inkludere i den forstand at inkludere 404 00:20:22,940 --> 00:20:26,100 ville bare kopiere og lime inn header fil for funksjons prototyper eller 405 00:20:26,100 --> 00:20:27,930 hva med de typedefinisjoner. 406 00:20:27,930 --> 00:20:30,590 Men krever faktisk går for å få oss koden. 407 00:20:30,590 --> 00:20:33,280 >> Så du kan tenke på det som importere noen kode. 408 00:20:33,280 --> 00:20:37,960 Så et eller annet sted i Node.js modulen system eller hva, 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 bruk i dette programmet. 411 00:20:43,130 --> 00:20:44,260 OK? 412 00:20:44,260 --> 00:20:46,930 >> Så da jeg har denne funksjonen som jeg har skrevet. 413 00:20:46,930 --> 00:20:50,330 Og legg merke til at jeg ikke har til å spesifisere returtypen eller typen av 414 00:20:50,330 --> 00:20:51,140 argumenter igjen. 415 00:20:51,140 --> 00:20:54,440 Så slags løs skrevet i den slags følelse. 416 00:20:54,440 --> 00:20:57,290 To argumenter som det tar i, forespørselen og respons. 417 00:20:57,290 --> 00:21:02,080 Så det er konseptuelt typen som kjent fra det bildet som vi hadde 418 00:21:02,080 --> 00:21:05,280 på skjermen før fordi vi får denne forespørselen at vi 419 00:21:05,280 --> 00:21:06,410 ha fra brukeren. 420 00:21:06,410 --> 00:21:09,170 Og så har vi et svar som vi kan skrive ting til. 421 00:21:09,170 --> 00:21:15,060 >> Så den første linjen av dette gjør res.writeHead 200 og deretter dette 422 00:21:15,060 --> 00:21:17,070 innholdstype tekst sletten. 423 00:21:17,070 --> 00:21:19,300 Så la oss sette dette fra hverandre litt. 424 00:21:19,300 --> 00:21:22,340 Så la oss bare fokusere på res.write for en liten. 425 00:21:22,340 --> 00:21:28,420 Så skrive er utgangspunktet, og skrive hodet, er bare måter å liksom skrive ut 426 00:21:28,420 --> 00:21:29,960 ting til responsen. 427 00:21:29,960 --> 00:21:30,770 OK? 428 00:21:30,770 --> 00:21:36,230 Så skriv hodet, hvis noen husker fra HTTP-forelesning, gjør dere 429 00:21:36,230 --> 00:21:39,940 husker overskrifter på toppen av HTTP tingen? 430 00:21:39,940 --> 00:21:43,580 Så hvorfor ikke jeg bare demo overskrifter virkelig rask. 431 00:21:43,580 --> 00:21:44,640 Ville det være nyttig? 432 00:21:44,640 --> 00:21:45,500 Eller skal vi bare liksom - 433 00:21:45,500 --> 00:21:46,070 OK. 434 00:21:46,070 --> 00:21:46,740 Jada. 435 00:21:46,740 --> 00:21:52,340 >> Så når nettleseren går til google.com eller noe sånt, 436 00:21:52,340 --> 00:21:54,250 det er faktisk litt mer - 437 00:21:54,250 --> 00:21:55,380 dette er som en hemmelighet - 438 00:21:55,380 --> 00:21:58,340 det er som en litt mer informasjon som kommer gjennom røret enn bare 439 00:21:58,340 --> 00:22:00,180 den lille søk og alt. 440 00:22:00,180 --> 00:22:03,550 Så for å vise deg dette, kommer jeg til å bruke et program som heter Curl. 441 00:22:03,550 --> 00:22:04,260 OK? 442 00:22:04,260 --> 00:22:08,020 Så dette er noe som du kan kjøre på Mac OSX kommandolinjen eller i 443 00:22:08,020 --> 00:22:09,830 apparatet eller hva. 444 00:22:09,830 --> 00:22:17,050 Og så hvis jeg Krøll HTTP google.com, Jeg kommer til å se HTML. 445 00:22:17,050 --> 00:22:21,230 Og dette er, i rettferdighet, bare HTML den slags forteller deg til 446 00:22:21,230 --> 00:22:24,695 omdirigere til www hvis nettleseren 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 bare HTML, men jeg skal å legge til Curl denne bindestrek flagger jeg. 449 00:22:33,390 --> 00:22:33,600 OK? 450 00:22:33,600 --> 00:22:35,600 Og dette kommer til å vise meg overskriftene. 451 00:22:35,600 --> 00:22:40,640 Så dette er også informasjon som kommer gjennom når jeg får dette svaret. 452 00:22:40,640 --> 00:22:41,260 OK? 453 00:22:41,260 --> 00:22:45,320 >> Så på toppen, ser du dette HTTP 301 flytte permanent. 454 00:22:45,320 --> 00:22:49,470 Og dette er ganske viktig fordi Dette refererer til statuskoden. 455 00:22:49,470 --> 00:22:53,750 Så det 301 her er statuskoden, som er utgangspunktet bare et heltall 456 00:22:53,750 --> 00:22:57,750 som forteller nettleseren eller den som er leser dette, hvis du late som 457 00:22:57,750 --> 00:23:01,460 du er en nettleser og du ser dette, utgangspunktet nå hvis du ser på 458 00:23:01,460 --> 00:23:04,960 det og du ser en 301, vet du jeg har å gjøre noe spesielt basert på 459 00:23:04,960 --> 00:23:08,810 301, eller noe spesielt som skjedde basert på 301. 460 00:23:08,810 --> 00:23:12,640 Så det sier flyttet permanent. 461 00:23:12,640 --> 00:23:17,700 >> Og så, i utgangspunktet, har vi en haug med sentrale verdi-par. 462 00:23:17,700 --> 00:23:22,100 Så vi får plasseringen er www.google.com. 463 00:23:22,100 --> 00:23:25,190 Og så slags alt dette andre ting, men innerst inne, hva plasseringen er 464 00:23:25,190 --> 00:23:29,662 ordtak er den nye plasseringen er på www.google.com. 465 00:23:29,662 --> 00:23:33,800 Så nå hvis du går til google.com, vil du liksom se nettleseren slags blink 466 00:23:33,800 --> 00:23:38,770 for et sekund og deretter omdirigere deg rett tilbake til www.google.com. 467 00:23:38,770 --> 00:23:41,840 Så svarene kan inneholde disse overskriftene. 468 00:23:41,840 --> 00:23:43,330 >> Og et par ting å påpeke. 469 00:23:43,330 --> 00:23:46,890 Så la oss si at vi var faktisk vellykket i å besøke en nettside. 470 00:23:46,890 --> 00:23:49,040 Så la meg gå til - 471 00:23:49,040 --> 00:23:51,080 hva er en god nettside? 472 00:23:51,080 --> 00:23:53,285 Jeg er dårlig på å tenke på god nettsteder 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 La oss gjøre Wikipedia. 476 00:23:56,040 --> 00:23:58,680 Så her ble jeg flyttet. 477 00:23:58,680 --> 00:23:59,240 Å vente. 478 00:23:59,240 --> 00:24:00,160 Var jeg? 479 00:24:00,160 --> 00:24:00,890 Ja, jeg var det. 480 00:24:00,890 --> 00:24:01,100 OK. 481 00:24:01,100 --> 00:24:03,005 Så fikk jeg til å gjøre www. 482 00:24:03,005 --> 00:24:06,006 Så jeg kommer til å gjøre www. 483 00:24:06,006 --> 00:24:09,680 Og som du kan se, er her hele HTML at nettleseren vil behandle 484 00:24:09,680 --> 00:24:10,910 for Wikipedia. 485 00:24:10,910 --> 00:24:14,055 >> Men hvis jeg fortsetter å rulle opp her, hva jeg vil se på toppen - 486 00:24:14,055 --> 00:24:17,800 wow, det er mye av HTML på Wikipedia - 487 00:24:17,800 --> 00:24:22,550 men det jeg kan se på toppen her er dette 200 statuskode i motsetning 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 legg merke til at den har en fin vennlig OK ved siden av den. 490 00:24:27,100 --> 00:24:29,470 Så dette er som den gode statuskode. 491 00:24:29,470 --> 00:24:31,160 >> Betyr det 200 nummeret ser kjent ut? 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 i utgangspunktet si fortelle leseren eller den som prøver å få til 495 00:24:43,290 --> 00:24:45,440 Dette at de var vellykket. 496 00:24:45,440 --> 00:24:49,040 Eller at typen som vi var vellykket også. 497 00:24:49,040 --> 00:24:54,320 >> Og det er denne typen spesiell syntaks i Javascript for å erklære en 498 00:24:54,320 --> 00:24:59,870 kartet av disse tastene som innholdstype og disse verdiene som tekst sletten. 499 00:24:59,870 --> 00:25:03,780 Så hvis du ser på den responsen som vi kom tilbake fra Wikipedia før, - 500 00:25:03,780 --> 00:25:06,200 Jeg kommer til å prøve å rulle opp litt raskere - 501 00:25:06,200 --> 00:25:09,900 du har disse nøklene som server og disse verdiene Apache. 502 00:25:09,900 --> 00:25:12,120 Så du har fått nøkler og verdier. 503 00:25:12,120 --> 00:25:15,930 Og du kan angi dette i Node hva som skal sendes tilbake. 504 00:25:15,930 --> 00:25:19,380 >> Så dette er faktisk slags, i noen måter, og på noen måter er det ikke 505 00:25:19,380 --> 00:25:23,170 egentlig, men det er et litt lavere nivå enn PHP-koden som du kan være 506 00:25:23,170 --> 00:25:26,980 skrive for P satt syv fordi PHP og Apache liksom ta vare på noen 507 00:25:26,980 --> 00:25:28,150 av disse tingene for deg. 508 00:25:28,150 --> 00:25:32,520 I PHP, kan du overstyre standard atferd ved å skrive dine egne overskrifter. 509 00:25:32,520 --> 00:25:35,520 Men i forbindelse med dette, får vi å skrive ut våre egne overskrifter. 510 00:25:35,520 --> 00:25:38,210 511 00:25:38,210 --> 00:25:41,105 >> Så betyr at linjen fornuftig å alle, skrivehodelinjen? 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å hva jeg gjør er jeg avslutte svar ved å si hei 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 funksjon kalt forespørsel behandleren. 517 00:25:49,920 --> 00:25:53,510 Så nå er jeg faktisk nødt til å slags gjøre noe med denne funksjonen, ikke sant? 518 00:25:53,510 --> 00:25:59,170 >> Så her er hva jeg gjør er det er dette linje som gjør Var server, er lik 519 00:25:59,170 --> 00:26:03,530 HTTP.create server, og da jeg passere i forespørselshåndtereren. 520 00:26:03,530 --> 00:26:06,080 Så dette er slags Node måte å skape en server. 521 00:26:06,080 --> 00:26:08,790 Og legg merke til at jeg har bestått i forespørselshåndtereren. 522 00:26:08,790 --> 00:26:12,290 Så dette er å fortelle createServer funksjon som jeg vil at du skal gjøre meg en 523 00:26:12,290 --> 00:26:16,270 server, og når serveren mottar et svar, jeg trenger deg til å kalle dette 524 00:26:16,270 --> 00:26:18,680 be behandleren funksjon. 525 00:26:18,680 --> 00:26:18,990 OK? 526 00:26:18,990 --> 00:26:22,290 >> Slik at linjen ganske mye ferdig med en gang. 527 00:26:22,290 --> 00:26:28,780 Så VaR server linjen er gjort riktig Når du gjør det ganske mye. 528 00:26:28,780 --> 00:26:31,770 Jeg mener, har det å sette opp noen interne staten for å vite at du ville ha til 529 00:26:31,770 --> 00:26:35,400 kaller det forespørselshåndtereren funksjon, men det er ikke til å sitte der og 530 00:26:35,400 --> 00:26:37,730 si har brukeren sendt meg en forespørsel ennå? 531 00:26:37,730 --> 00:26:39,270 Har brukeren sendte meg en forespørsel ennå? 532 00:26:39,270 --> 00:26:40,780 Så det ikke blokkerer. 533 00:26:40,780 --> 00:26:41,650 OK? 534 00:26:41,650 --> 00:26:46,120 >> Så hva dette vil gjøre er det i utgangspunktet Nå lagrer en peker til denne koden, 535 00:26:46,120 --> 00:26:49,670 Dette forespørselshåndtereren funksjon, og deretter vil kjøre den koden når noen 536 00:26:49,670 --> 00:26:52,170 gjør en forespørsel. 537 00:26:52,170 --> 00:26:54,120 Og så gjør vi server.listen. 538 00:26:54,120 --> 00:26:56,950 539 00:26:56,950 --> 00:26:59,960 >> Den 1337 er det ganske vilkårlig. 540 00:26:59,960 --> 00:27:02,285 Jeg hadde ingen spesiell grunn for å plukke det nummeret. 541 00:27:02,285 --> 00:27:03,860 Det var helt tilfeldig. 542 00:27:03,860 --> 00:27:07,010 Men som bare angir port. 543 00:27:07,010 --> 00:27:10,640 Så de fleste webservere vil du se at de bruker port 80 fordi det er slags 544 00:27:10,640 --> 00:27:11,810 av som konvensjonen. 545 00:27:11,810 --> 00:27:16,170 Så hvis jeg går til noe sånt, Jeg vet ikke, Wikipedia.org, 546 00:27:16,170 --> 00:27:17,700 og jeg satt 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 Jeg beklager. 549 00:27:19,370 --> 00:27:21,820 Men hvis jeg gjør Wikipedia - 550 00:27:21,820 --> 00:27:24,810 Jeg skal skrive det her bare slik at det er klart på kameraet. 551 00:27:24,810 --> 00:27:29,150 Men hvis jeg tar dette inn i en nettleser med et kolon 80, som angir 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 som hvordan USA har flere porter 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 som å gå til denne spesielle plasser på denne serveren. 556 00:27:40,730 --> 00:27:40,990 OK. 557 00:27:40,990 --> 00:27:45,730 >> Så valgte jeg bare 1337. 558 00:27:45,730 --> 00:27:47,910 Det er en hel rekke med tall at du kan plukke. 559 00:27:47,910 --> 00:27:50,390 Det var ikke helt spesiell. 560 00:27:50,390 --> 00:27:54,560 >> Men hva jeg skal gjøre nå er jeg kommer til å kjøre Node. 561 00:27:54,560 --> 00:27:59,730 La meg faktisk inn som et par linjer ned, slik at du kan se det. 562 00:27:59,730 --> 00:28:03,130 Jeg kommer til å gjøre Node, og jeg er kommer til å kjøre simpler.js. 563 00:28:03,130 --> 00:28:06,880 Og vi skal snakke om hvordan du får Node satt opp i en liten bit. 564 00:28:06,880 --> 00:28:09,350 Men nå er det bare å kjøre på serveren. 565 00:28:09,350 --> 00:28:14,360 >> Så en ting vi kan prøve noe som kanskje ikke være så spennende er at vi faktisk kan 566 00:28:14,360 --> 00:28:16,300 prøver å bruke den i Curl. 567 00:28:16,300 --> 00:28:20,680 Så jeg kan gjøre Curl, og min Maskinen er lokale verten. 568 00:28:20,680 --> 00:28:24,600 Du vil også se dette skriftlig som dette noen ganger. 569 00:28:24,600 --> 00:28:29,810 Lokal vert og 127.0.0.1 er snill som din hjemme-PC. 570 00:28:29,810 --> 00:28:33,180 Så det er som å snakke til din egen datamaskin. 571 00:28:33,180 --> 00:28:33,760 OK. 572 00:28:33,760 --> 00:28:36,030 >> Og så kan jeg si 1337. 573 00:28:36,030 --> 00:28:39,630 Så hvis jeg kjører denne linjen med kode, det sier hallo verden. 574 00:28:39,630 --> 00:28:44,050 Og hvis jeg ønsket å se at ting som hadde innholdstype teksten vanlig eller 575 00:28:44,050 --> 00:28:46,560 uansett, jeg kunne selv sette dette her. 576 00:28:46,560 --> 00:28:48,810 Og legg merke til at det står 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 det slags alt dette andre ting som Node vil legge i 579 00:28:53,140 --> 00:28:54,440 der for meg. 580 00:28:54,440 --> 00:28:55,700 Det er ikke super viktig. 581 00:28:55,700 --> 00:28:58,230 >> Jeg mener, det er en slags teknisk aspekter ved som er snill 582 00:28:58,230 --> 00:29:02,280 kult å snakke om, men bare for å vise du, jeg har også makt til å 583 00:29:02,280 --> 00:29:03,070 endre disse rundt. 584 00:29:03,070 --> 00:29:06,280 Så jeg kan bare legge til en haug av sånt. 585 00:29:06,280 --> 00:29:11,780 Og så nå, hvis jeg ser i mitt utgang, vil det være slik at. 586 00:29:11,780 --> 00:29:19,740 Så disse overskriftene mener visse ting til nettlesere og sånt. 587 00:29:19,740 --> 00:29:23,040 >> Og overskrifter kan i utgangspunktet fortelle en nettleser hvordan å svare på noe. 588 00:29:23,040 --> 00:29:26,280 Hvis du noen gang har hørt om cookies før, eller hvis du noen gang har vært irritert 589 00:29:26,280 --> 00:29:29,330 av en web-side å sette cookies, eller slått på cookie blokk eller 590 00:29:29,330 --> 00:29:30,320 noe sånt. 591 00:29:30,320 --> 00:29:33,040 Du kan faktisk sette cookies i disse overskriftene. 592 00:29:33,040 --> 00:29:36,990 Så de forteller en leser hvordan du virkemåte i noen tilfeller. 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 det noen som har noen spørsmål på at kildekoden filen? 596 00:29:42,780 --> 00:29:45,420 597 00:29:45,420 --> 00:29:45,610 OK. 598 00:29:45,610 --> 00:29:46,490 Cool. 599 00:29:46,490 --> 00:29:50,780 >> Så la oss fjerne r fra at og se på simple.js. 600 00:29:50,780 --> 00:29:53,010 Så dette er ganske mye det samme programmet. 601 00:29:53,010 --> 00:29:56,030 Jeg bare skrev det litt annerledes fordi jeg ønsket å sortere av høydepunkt 602 00:29:56,030 --> 00:29:57,850 noen funksjoner i Javascript. 603 00:29:57,850 --> 00:30:03,880 >> Så merker at forespørselshåndtereren Funksjonen har helt forsvunnet. 604 00:30:03,880 --> 00:30:05,800 Oh ja, hadde du et spørsmål? 605 00:30:05,800 --> 00:30:08,200 >> Målgruppe: Ja, argumentene som er gått til at 606 00:30:08,200 --> 00:30:10,120 funksjon, hva er de? 607 00:30:10,120 --> 00:30:12,050 >> KEVIN SCHMID: Så de er Java gjenstander. 608 00:30:12,050 --> 00:30:15,230 I dokumentasjonen Node.js, det utgangspunktet sier hvilke metoder er 609 00:30:15,230 --> 00:30:15,910 tilgjengelig for dem. 610 00:30:15,910 --> 00:30:19,602 Vi bare tilfeldigvis har tilgang til denne metoden kalles skrive hodet og slutten 611 00:30:19,602 --> 00:30:20,730 og sånt. 612 00:30:20,730 --> 00:30:22,590 Men det er en hel haug flere metoder. 613 00:30:22,590 --> 00:30:27,670 >> Og for eksempel, som en av dem spesielt på rec, kan du gjøre 614 00:30:27,670 --> 00:30:34,540 noe som rec.method som vil fortelle deg om det er en HTTP få eller 615 00:30:34,540 --> 00:30:36,780 HTTP POST forespørsler og ting som det. 616 00:30:36,780 --> 00:30:39,100 Så det er alle slags forskjellige egenskaper, men de er begge 617 00:30:39,100 --> 00:30:42,560 Java gjenstander, og de bare har funksjoner knyttet til dem at du 618 00:30:42,560 --> 00:30:43,850 kan skrive ting til. 619 00:30:43,850 --> 00:30:45,520 OK? 620 00:30:45,520 --> 00:30:49,030 >> Så merker at forespørselshåndtereren er helt borte. 621 00:30:49,030 --> 00:30:52,650 Men den koden som jeg hadde i forespørsel behandleren er der fortsatt. 622 00:30:52,650 --> 00:30:56,520 Jeg har fortsatt denne res.writeHead og jeg har fortsatt denne res.end. 623 00:30:56,520 --> 00:31:00,270 Og hva dette er et eksempel på i Javascript er denne ideen om en 624 00:31:00,270 --> 00:31:01,460 anonym funksjon. 625 00:31:01,460 --> 00:31:04,180 og anonymt er som et passende navn for det fordi det bokstavelig talt ikke 626 00:31:04,180 --> 00:31:05,180 ha et navn. 627 00:31:05,180 --> 00:31:07,900 Det er ingen forespørsel funksjon handler der. 628 00:31:07,900 --> 00:31:10,110 >> Har ikke noe navn, men det fortsatt er å ta et argument. 629 00:31:10,110 --> 00:31:12,250 Så fortsatt har jeg rec og res. 630 00:31:12,250 --> 00:31:16,180 Og jeg har fortsatt koden. 631 00:31:16,180 --> 00:31:18,930 Dette er helt greit Javascript-kode. 632 00:31:18,930 --> 00:31:22,540 Så kan jeg erklære en funksjon uten eksplisitt å gi den et navn. 633 00:31:22,540 --> 00:31:24,250 Det er litt forvirrende i begynnelsen. 634 00:31:24,250 --> 00:31:26,230 Det er noen som nyttige ting at du kan gjøre med 635 00:31:26,230 --> 00:31:28,450 disse anonyme funksjoner. 636 00:31:28,450 --> 00:31:32,100 Er det noen som har noen spørsmål om dette, eller er det OK bare for å, for nå, 637 00:31:32,100 --> 00:31:34,130 liksom bare akseptere at det vil gjøre det samme? 638 00:31:34,130 --> 00:31:36,700 639 00:31:36,700 --> 00:31:37,125 Jepp? 640 00:31:37,125 --> 00:31:38,680 >> PUBLIKUM: Er funksjonene 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 vet at disse begrepene passerer i en anonym funksjon som 643 00:31:45,490 --> 00:31:49,600 Dette gjelder for Javascript som du kan skrive i det ferdige prosjektet for 644 00:31:49,600 --> 00:31:51,260 nettleseren også. 645 00:31:51,260 --> 00:31:56,700 Så for eksempel, i Javascript leseren din, er det også noe arrangement 646 00:31:56,700 --> 00:32:00,680 drevet i den forstand at hva du vil har er når brukeren klikker på denne 647 00:32:00,680 --> 00:32:02,640 knappen, vil jeg du skal kjøre denne koden. 648 00:32:02,640 --> 00:32:07,070 >> Så det er samme type ideer av klientsiden når et museklikk eller de 649 00:32:07,070 --> 00:32:09,870 musen over noen bilde på din webside, kjøre denne koden. 650 00:32:09,870 --> 00:32:11,350 Det kan gjelde for servere. 651 00:32:11,350 --> 00:32:16,380 Så det er typen som den spennende Grunnen til at Javascript er et virkelig 652 00:32:16,380 --> 00:32:19,810 egnede eller noen folk tror det er en egnet språk for denne typen 653 00:32:19,810 --> 00:32:22,530 event driver serveren fordi du har disse anonyme funksjoner. 654 00:32:22,530 --> 00:32:26,150 Du har hele ideen om denne asynkron kode. 655 00:32:26,150 --> 00:32:27,060 OK. 656 00:32:27,060 --> 00:32:30,360 Noen som har noen spørsmå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å la oss se på en mer eller et par til. 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 noen kjent med C-funksjonen søvn? 662 00:32:47,160 --> 00:32:50,936 Fra kanskje en av de tidligere foredrag eller noe sånt? 663 00:32:50,936 --> 00:32:54,650 >> Så i utgangspunktet kan du passere i Jeg tror en antall sekunder eller hvis du bruker U 664 00:32:54,650 --> 00:32:57,080 sove et antall millisekunder eller nanosekunder. 665 00:32:57,080 --> 00:33:00,450 Og i utgangspunktet programmet vil bare stoppe kjører for det beløpet av tid. 666 00:33:00,450 --> 00:33:01,280 Høyre? 667 00:33:01,280 --> 00:33:06,970 Og så vil det våkne opp til slutt og så det vil bare fortsette å kjøre 668 00:33:06,970 --> 00:33:08,340 programmet. 669 00:33:08,340 --> 00:33:12,740 >> Så denne serveren slags gir inntrykk av å sove. 670 00:33:12,740 --> 00:33:17,580 Så merker at vi har den samme res.writeHead 200 med overskriften som 671 00:33:17,580 --> 00:33:22,130 før, men da vi ringer dette Funksjonen kalles timeout sett. 672 00:33:22,130 --> 00:33:26,170 Sett timeout er også tilgjengelig i nettleseren Google Chrome 673 00:33:26,170 --> 00:33:28,000 eller Safari eller hva. 674 00:33:28,000 --> 00:33:31,720 Og i utgangspunktet hva det gjør her er det er å ta i en funksjon. 675 00:33:31,720 --> 00:33:33,360 Innkalling, igjen, det er en anonym funksjon. 676 00:33:33,360 --> 00:33:36,310 Så det er litt kult fordi vi er ved hjelp av en anonym funksjon innenfor en 677 00:33:36,310 --> 00:33:38,950 anonym funksjon som kan være litt rart. 678 00:33:38,950 --> 00:33:42,270 >> Men det tar den funksjonen, som er utgangspunktet si - og måten dette 679 00:33:42,270 --> 00:33:47,430 gjerninger er i 5000 millisekunder, jeg vil du å utføre den funksjonen som 680 00:33:47,430 --> 00:33:50,830 bare ender responsen og skriver hei. 681 00:33:50,830 --> 00:33:56,730 Så dette gir inntrykk av at sove, men måten dette faktisk 682 00:33:56,730 --> 00:33:59,780 fungerer er vil vi gå gjennom denne linjen veldig raskt. 683 00:33:59,780 --> 00:34:01,190 Vi bare skriver noe. 684 00:34:01,190 --> 00:34:03,780 Og da vil vi også kjøre gjennom denne linjen veldig raskt. 685 00:34:03,780 --> 00:34:08,620 Så vi ikke blir faktisk kommer å vente i fem sekunder. 686 00:34:08,620 --> 00:34:11,370 Vi kommer bare til å kjøre denne koden umiddelbart. 687 00:34:11,370 --> 00:34:14,219 >> Og så er det, igjen, denne lille event loop som nå har denne tingen 688 00:34:14,219 --> 00:34:17,570 registre som i utgangspunktet er like stadig går rundt i en sirkel 689 00:34:17,570 --> 00:34:21,620 og ser på klokken i en enkelt tråden og ordtak, har fem sekunder 690 00:34:21,620 --> 00:34:22,360 gått ennå? 691 00:34:22,360 --> 00:34:26,409 Og så når den ser at andre hånd har beveget seg som fem sekunder eller 692 00:34:26,409 --> 00:34:29,190 uansett, så det våkner opp og sier, oh, hva må jeg gjøre? 693 00:34:29,190 --> 00:34:30,350 Å jeg må kjøre denne koden. 694 00:34:30,350 --> 00:34:33,110 Og så kommer det til å kjøre res.end hei. 695 00:34:33,110 --> 00:34:35,360 >> Så igjen, vi aldri venter her. 696 00:34:35,360 --> 00:34:38,590 Så det er ikke slik at denne koden på innsiden av denne funksjonen kommer til å ta fem 697 00:34:38,590 --> 00:34:39,900 sekunder å kjøre. 698 00:34:39,900 --> 00:34:43,090 Denne koden vil kjøre ganske mye momentant, i det minste i forhold til 699 00:34:43,090 --> 00:34:46,139 de fem sekunder at vi snakket om tidligere før. 700 00:34:46,139 --> 00:34:52,100 >> Så bare for å vise dette i handling, Jeg kan gjøre Node.sleep.js. 701 00:34:52,100 --> 00:34:55,159 Og det gjorde jeg rotet opp noe? 702 00:34:55,159 --> 00:34:56,310 Muligens. 703 00:34:56,310 --> 00:34:57,410 Unnskyld. 704 00:34:57,410 --> 00:34:59,530 La oss se hva vi kan gjøre for å fikse 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å definitivt bruke node.js. 709 00:35:17,464 --> 00:35:19,440 Jeg bare tuller. 710 00:35:19,440 --> 00:35:19,570 OK. 711 00:35:19,570 --> 00:35:20,820 Bare ett sekund. 712 00:35:20,820 --> 00:35:27,380 713 00:35:27,380 --> 00:35:27,900 OK. 714 00:35:27,900 --> 00:35:29,130 Jeg vet hva det er. 715 00:35:29,130 --> 00:35:34,440 >> Så problemet er at i min andre kategorien her, ble jeg kjører Node allerede på 716 00:35:34,440 --> 00:35:36,590 at samme adresse, 1337. 717 00:35:36,590 --> 00:35:43,370 Så feil som dette kastet, hvis vi ser på det reelle tett, er adressen i 718 00:35:43,370 --> 00:35:45,180 bruke, EADDRINUSE. 719 00:35:45,180 --> 00:35:47,970 Så jeg brukte allerede 1337 her. 720 00:35:47,970 --> 00:35:52,210 Så hvis jeg slår dette av, og da jeg nå prøve å kjøre dette, forhåpentligvis, alt 721 00:35:52,210 --> 00:35:53,210 vil bli bra. 722 00:35:53,210 --> 00:35:53,440 OK. 723 00:35:53,440 --> 00:35:57,020 Så du kan bare ha én ting liksom av å lytte på en port på en gang. 724 00:35:57,020 --> 00:35:59,660 En annen løsning ville ha vært for meg å bare redigere det programmet og gjøre 725 00:35:59,660 --> 00:36:02,370 det være som 1338 eller noe sånn. 726 00:36:02,370 --> 00:36:04,100 >> Men nå sover kjører. 727 00:36:04,100 --> 00:36:06,400 Så la oss faktisk prøve det ut i leseren denne gangen fordi det er en 728 00:36:06,400 --> 00:36:09,080 litt lite spennende å se den i en terminal. 729 00:36:09,080 --> 00:36:13,560 Så jeg bare kommer til å gå til det 127-adressen igjen 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 vet ikke om du kan - men min leserens tar en veldig, veldig lang 732 00:36:18,050 --> 00:36:20,600 tid å laste eller som fem sekunder. 733 00:36:20,600 --> 00:36:23,460 >> Og så etter det, det endelig endte responsen. 734 00:36:23,460 --> 00:36:29,070 Og du kan ikke se det, fordi ting er flyttet over en liten, men hvis jeg gjør 735 00:36:29,070 --> 00:36:32,500 dette en litt mindre, du kan se det sier hei. 736 00:36:32,500 --> 00:36:35,130 Så jeg fikk hey, men etter fem sekunder. 737 00:36:35,130 --> 00:36:38,510 Og det kan være litt renere å se det her på terminalen, så jeg er 738 00:36:38,510 --> 00:36:40,980 kommer til å gjøre en - 739 00:36:40,980 --> 00:36:43,540 la oss gjøre her - 740 00:36:43,540 --> 00:36:48,370 la oss gjøre Curl som adresse igjen med 1337. 741 00:36:48,370 --> 00:36:50,820 Og jeg bare slags nødt til å sitte her i fem sekunder. 742 00:36:50,820 --> 00:36:53,760 Men legg merke til at serveren kan akseptere nye svar. 743 00:36:53,760 --> 00:36:54,940 Så det skriver hei. 744 00:36:54,940 --> 00:36:58,720 >> Og til demo dette, innerst inne hva Jeg kan gjøre i denne andre kategorien - 745 00:36:58,720 --> 00:37:02,640 så la oss si at jeg gjør dette i en annen fane, Jeg kommer til å gjøre Curl og det samme 746 00:37:02,640 --> 00:37:03,780 ting igjen. 747 00:37:03,780 --> 00:37:06,600 Og jeg kommer til å prøve å sparke disse gutta av på samme tid. 748 00:37:06,600 --> 00:37:08,260 Så jeg kommer til å gjøre dette, og jeg er kommer til å rase over her, og jeg er 749 00:37:08,260 --> 00:37:09,650 kommer til å gjøre det igjen. 750 00:37:09,650 --> 00:37:14,030 >> Og la oss gjøre det slik at du kan se til begge. 751 00:37:14,030 --> 00:37:20,250 At man trykt hei og at man trykt hei hele veien på - 752 00:37:20,250 --> 00:37:22,550 la oss gjøre det eksperimentet igjen. 753 00:37:22,550 --> 00:37:25,100 Egentlig, la oss bruke dette lure, hvis det er OK. 754 00:37:25,100 --> 00:37:30,520 >> Så jeg kommer til å bruke et skall ting som tillater meg å kjøre i utgangspunktet to eksemplarer 755 00:37:30,520 --> 00:37:32,630 av dette programmet i parallell. 756 00:37:32,630 --> 00:37:36,070 Så det vil kjøre det første programmet og det andre programmet i parallell. 757 00:37:36,070 --> 00:37:39,060 Så nå hvis jeg trykker på Enter, det kommer å gjøre at forespørselen ganske mye 758 00:37:39,060 --> 00:37:40,570 umiddelbart på samme tid. 759 00:37:40,570 --> 00:37:42,620 Så la oss gi dette en sjanse. 760 00:37:42,620 --> 00:37:44,950 >> Så nå legger merke til det står to prosesser. 761 00:37:44,950 --> 00:37:50,630 Og hvis du er nysgjerrig, at 27 000 nummeret er i utgangspunktet prosessen ID. 762 00:37:50,630 --> 00:37:52,940 Og så legge merke til, de trykte hey samtidig. 763 00:37:52,940 --> 00:37:56,820 Det var ikke som vi måtte vente fem sekunder for ett og deretter etter at, 764 00:37:56,820 --> 00:37:59,640 fem sekunder senere få andre. 765 00:37:59,640 --> 00:38:03,300 Så det er slags, på noen måter, er det egentlig ikke bevis, men det er 766 00:38:03,300 --> 00:38:07,390 intuitiv bevis for at det er ikke bare som venter fem sekunder og blokkerer 767 00:38:07,390 --> 00:38:08,960 hele tråden. 768 00:38:08,960 --> 00:38:10,720 OK kult. 769 00:38:10,720 --> 00:38:17,850 >> Så Aaron stilte et spørsmål tidligere at var, vel hva hvis vi gjør noe - 770 00:38:17,850 --> 00:38:18,735 Jepp? 771 00:38:18,735 --> 00:38:19,051 >> PUBLIKUM: Vent. 772 00:38:19,051 --> 00:38:21,585 Hvordan er det forskjellig fra printf buffer, skjønt? 773 00:38:21,585 --> 00:38:23,010 Betyr ikke det automatisk gjøre det? 774 00:38:23,010 --> 00:38:25,390 Hvorfor har vi å bekymre deg om det? 775 00:38:25,390 --> 00:38:26,555 >> KEVIN SCHMID: Oh, kunne du si det en gang til? 776 00:38:26,555 --> 00:38:29,510 >> PUBLIKUM: Liker ikke printf buffer gjør akkurat det samme? 777 00:38:29,510 --> 00:38:31,280 >> KEVIN SCHMID: The printf buffer? 778 00:38:31,280 --> 00:38:32,753 >> PUBLIKUM: Yeah. 779 00:38:32,753 --> 00:38:33,244 OK. 780 00:38:33,244 --> 00:38:40,609 Var ikke i en av de testene de var snakker om hvordan hvis du høyre printf 781 00:38:40,609 --> 00:38:42,899 noe, og så har det pause ett andre, og da har du det løkke ti 782 00:38:42,899 --> 00:38:46,530 ganger, vil det vente ti sekunder og deretter printf alt sammen? 783 00:38:46,530 --> 00:38:47,460 >> KEVIN SCHMID: Oh, OK. 784 00:38:47,460 --> 00:38:49,170 >> PUBLIKUM: Er det å gjøre det samme ting så i dette tilfellet? 785 00:38:49,170 --> 00:38:52,630 >> KEVIN SCHMID: Så spørsmålet var utgangspunktet i en av de tidligere spørrekonkurranser 786 00:38:52,630 --> 00:38:57,200 eller noe, det var et spørsmål som utgangspunktet hvis du sier print f 10 787 00:38:57,200 --> 00:39:01,490 ting om gangen og deretter sov som i prosessen med å skrive dem ut, 788 00:39:01,490 --> 00:39:04,850 ved enden av en eller annen grunn, ville det bare dumpe dem alle ut på skjermen. 789 00:39:04,850 --> 00:39:06,740 Så det er på en måte to forskjellige konsepter her. 790 00:39:06,740 --> 00:39:10,400 >> Så jeg antar en ting er at, i dette tilfelle, vi arbeider med to forskjellige 791 00:39:10,400 --> 00:39:13,510 slags folk som spør serveren for ting på samme tid. 792 00:39:13,510 --> 00:39:17,455 Og på grunn av at den printf slags venter sånn og dumper det ut 793 00:39:17,455 --> 00:39:21,760 samtidig er mer relatert til hvordan printf slags - 794 00:39:21,760 --> 00:39:25,100 så veien printf er faktisk implementert er det i utgangspunktet må 795 00:39:25,100 --> 00:39:28,850 snakke med operativsystemet for å skrive at ting til konsollen. 796 00:39:28,850 --> 00:39:33,460 Så det vil ikke gjøre alt dette ting umiddelbart når du sier printf 797 00:39:33,460 --> 00:39:36,260 noen streng fordi det kunne bli dyrt hvis det må 798 00:39:36,260 --> 00:39:37,340 gjøre det hver gang. 799 00:39:37,340 --> 00:39:41,530 >> Så hvis du gjør printf hei, programmet kan faktisk ikke ut som 800 00:39:41,530 --> 00:39:43,040 umiddelbart til konsollen. 801 00:39:43,040 --> 00:39:46,080 Den kan si, OK, jeg skrev det. 802 00:39:46,080 --> 00:39:49,570 Og så slags vente for deg å gi det litt mer før de faktisk 803 00:39:49,570 --> 00:39:51,380 skrive det ut til konsollen. 804 00:39:51,380 --> 00:39:54,040 >> Så grunnen til at det var tilfelle - 805 00:39:54,040 --> 00:39:56,450 og det er på en måte som ikke er relatert til søvn - 806 00:39:56,450 --> 00:40:00,060 er at søvn var liksom bare injiseres i det å demonstrere 807 00:40:00,060 --> 00:40:02,480 faktum at den ikke skrive det synkront. 808 00:40:02,480 --> 00:40:06,210 Men grunnen til det er nettopp ytelse, slik at du ikke trenger å 809 00:40:06,210 --> 00:40:08,920 gjør at mange kontakter til operativsystemet. 810 00:40:08,920 --> 00:40:12,300 >> Men her, hva vi egentlig prøver å gjøre med denne søvn greia er bare showet 811 00:40:12,300 --> 00:40:17,730 at når vi har to personer på besøk dette nettstedet, er det ikke kommer til å sette 812 00:40:17,730 --> 00:40:22,310 dem i en linje der det kommer til å si Jeg må hjelpe deg, og da når jeg er 813 00:40:22,310 --> 00:40:25,350 helt ferdig å hjelpe deg etter disse fem sekunder, så jeg kommer til å 814 00:40:25,350 --> 00:40:26,750 gå til neste person. 815 00:40:26,750 --> 00:40:29,515 Så den første personen anmodning ikke binde opp den hendelsen sløyfe 816 00:40:29,515 --> 00:40:31,610 hvis det er fornuftig. 817 00:40:31,610 --> 00:40:34,980 >> Men her er faktisk et eksempel av noe som vil binde 818 00:40:34,980 --> 00:40:36,090 opp hendelsessløyfen. 819 00:40:36,090 --> 00:40:39,130 Så her er en fryktelig funksjon til beregne n'te Fibonacci. 820 00:40:39,130 --> 00:40:43,510 Det er bokstavelig talt det verre måten du kan beregne n'te Fibonacci-tall. 821 00:40:43,510 --> 00:40:48,480 Og dette er faktisk bare å erkjenne hvor dette kom fra, 822 00:40:48,480 --> 00:40:49,330 det er faktisk - 823 00:40:49,330 --> 00:40:53,230 Jeg mener, kan du prøve å gå finne det - men det er som en veldig lang blogg 824 00:40:53,230 --> 00:40:54,130 innlegg som noen skrev. 825 00:40:54,130 --> 00:40:55,660 Det er som en av de Reddit ting. 826 00:40:55,660 --> 00:40:59,650 Men noen kritisert Node.js, og de brukte dette som et eksempel. 827 00:40:59,650 --> 00:41:03,700 Så jeg slags ønsket å bare vise dere to ulike perspektiver bare for å få 828 00:41:03,700 --> 00:41:07,320 en generell forståelse av begrepene bak disse to tingene. 829 00:41:07,320 --> 00:41:13,050 >> Men dette er valgt som bare en fryktelig, forferdelig ineffektiv computationally 830 00:41:13,050 --> 00:41:15,940 krevende måte å beregne n'te Fibonacci-tall. 831 00:41:15,940 --> 00:41:21,180 Så akkurat som en side note, hvorfor er det fryktelig som på en måte? 832 00:41:21,180 --> 00:41:23,210 Jepp? 833 00:41:23,210 --> 00:41:25,130 >> PUBLIKUM: Si du starter ut med 1000. 834 00:41:25,130 --> 00:41:27,050 1000 deler seg i 999 og 998. 835 00:41:27,050 --> 00:41:28,970 Hver av dette splittes i to ting. 836 00:41:28,970 --> 00:41:30,890 Hver av dette splittes i to ting. 837 00:41:30,890 --> 00:41:31,355 >> KEVIN SCHMID: Høyre. 838 00:41:31,355 --> 00:41:32,400 >> PUBLIKUM: Hele veien ned. 839 00:41:32,400 --> 00:41:32,840 >> KEVIN SCHMID: Nettopp. 840 00:41:32,840 --> 00:41:37,330 Så bare for å gjenta for kameraet, hvis jeg kaller løgn på som 1000 eller noe 841 00:41:37,330 --> 00:41:41,810 sånn er det tydeligvis ikke mindre enn eller lik ett så jeg kommer til å 842 00:41:41,810 --> 00:41:46,040 gå til denne andre saken, og da jeg kommer å kalle fib 999 pluss fib 998. 843 00:41:46,040 --> 00:41:50,290 Og da stort sett alle som arbeid som fib 999 gjør er 844 00:41:50,290 --> 00:41:52,950 type på dette nivået. 845 00:41:52,950 --> 00:41:55,620 Hvis du går ned, er det enda mer overflødige enn det, men hvis du bare 846 00:41:55,620 --> 00:42:01,390 tror databehandling FIB 998 får oss ganske nær fib 999. 847 00:42:01,390 --> 00:42:05,860 Så vi burde egentlig være litt mer smart om hvordan vi på en måte gjenbruke 848 00:42:05,860 --> 00:42:07,580 disse, men vi ikke er gjenbruk disse tingene i det hele tatt. 849 00:42:07,580 --> 00:42:11,860 Så du kan forestille deg dette gigantiske, gigantisk tre som er bare fryktelig. 850 00:42:11,860 --> 00:42:12,940 >> Men uansett, OK. 851 00:42:12,940 --> 00:42:14,040 Så det var løgn. 852 00:42:14,040 --> 00:42:15,530 Det tar bare litt tid å kjøre. 853 00:42:15,530 --> 00:42:16,510 Jepp? 854 00:42:16,510 --> 00:42:17,760 >> PUBLIKUM: [uhørbart]. 855 00:42:17,760 --> 00:42:20,430 856 00:42:20,430 --> 00:42:22,481 >> KEVIN SCHMID: Oh, kunne du gjenta spørsmålet? 857 00:42:22,481 --> 00:42:23,731 >> PUBLIKUM: [uhørbart]. 858 00:42:23,731 --> 00:42:30,840 859 00:42:30,840 --> 00:42:33,990 >> KEVIN SCHMID: Åh, så dette er bare kode som kommer til å være liksom på 860 00:42:33,990 --> 00:42:34,850 server side. 861 00:42:34,850 --> 00:42:38,100 Så dette ikke kommer til å bli funnet i nettleseren eller noe. 862 00:42:38,100 --> 00:42:42,160 Det er i utgangspunktet det vi har er at når brukeren her ganske mye merker 863 00:42:42,160 --> 00:42:45,300 deres anmodning igjen, når vi liksom gjøre en forespørsel, kommer vi til å ringe 864 00:42:45,300 --> 00:42:47,040 denne funksjonen på serversiden. 865 00:42:47,040 --> 00:42:50,480 Og så skal vi få resultatet tilbake fra å kalle denne funksjonen. 866 00:42:50,480 --> 00:42:52,460 Og så får vi bare skrive ut det til brukeren. 867 00:42:52,460 --> 00:42:54,580 Så brukeren ikke egentlig forholde med denne funksjonen for mye. 868 00:42:54,580 --> 00:42:57,270 >> Var det spørsmålet? 869 00:42:57,270 --> 00:42:58,470 Betyr det fornuftig? 870 00:42:58,470 --> 00:42:58,810 OK. 871 00:42:58,810 --> 00:43:00,930 Cool. 872 00:43:00,930 --> 00:43:04,240 >> Så igjen, gjør vi dette hele res.writeHead ting hvor vi skrive ut 873 00:43:04,240 --> 00:43:05,150 overskriften. 874 00:43:05,150 --> 00:43:09,730 Og da jeg avslutte respons ved å gjøre det magiske tallet er løgn 45. 875 00:43:09,730 --> 00:43:12,100 Så la oss bare kjøre denne serveren. 876 00:43:12,100 --> 00:43:15,190 Så jeg kommer til å gjøre en node fib.js. 877 00:43:15,190 --> 00:43:17,340 Så nå er min løgn serveren kjører. 878 00:43:17,340 --> 00:43:21,790 >> Og så her, jeg kommer å gjøre en av disse. 879 00:43:21,790 --> 00:43:22,200 OK? 880 00:43:22,200 --> 00:43:24,960 Så jeg bare kommer til å si, Curl. 881 00:43:24,960 --> 00:43:32,226 Så det kommer til å ta litt tid, men forhåpentligvis snart vil fullføre og 882 00:43:32,226 --> 00:43:35,660 det vil skrive ut at 45th Fibonacci-tall. 883 00:43:35,660 --> 00:43:36,910 >> PUBLIKUM: [uhørbart]. 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 ganske snart. 886 00:43:42,050 --> 00:43:43,780 Så det skal ta fem til seks sekunder. 887 00:43:43,780 --> 00:43:48,570 Jeg vet ikke det er bare V8 blir super hurtig, men i noen tilfelle, er dette en 888 00:43:48,570 --> 00:43:52,700 svært kort eksempel og vilje uelegant av en ikke-triviell 889 00:43:52,700 --> 00:43:54,200 beregningen. 890 00:43:54,200 --> 00:43:56,700 Så etter en stund, blir det dette. 891 00:43:56,700 --> 00:44:02,130 >> Men nå, hva hvis jeg gjør det samme slags eksperiment som før hvor jeg gjør 892 00:44:02,130 --> 00:44:04,010 to forespørsler på samme tid? 893 00:44:04,010 --> 00:44:06,990 Så her skal jeg en Curl på som adresse, og jeg skal 894 00:44:06,990 --> 00:44:08,260 å gjøre en annen Curl. 895 00:44:08,260 --> 00:44:12,070 Og husk, når vi gjorde dette for sove server, da vi i utgangspunktet hadde det 896 00:44:12,070 --> 00:44:15,320 etter fem sekunder, de ganske mye begge kom tilbake rett 897 00:44:15,320 --> 00:44:16,380 omtrent på samme tid. 898 00:44:16,380 --> 00:44:18,650 Så det var ikke særlig bundet opp. 899 00:44:18,650 --> 00:44:20,290 >> Men la oss prøve det nå. 900 00:44:20,290 --> 00:44:22,370 OK, så vi fikk våre to prosesser. 901 00:44:22,370 --> 00:44:24,210 Husk de er prosess IDer. 902 00:44:24,210 --> 00:44:25,900 Dette kommer til å være litt klosset mens vi stall. 903 00:44:25,900 --> 00:44:31,340 904 00:44:31,340 --> 00:44:35,360 Så la oss bare bli her og vente. 905 00:44:35,360 --> 00:44:37,090 >> Så en av dem skulle komme tilbake etter som - 906 00:44:37,090 --> 00:44:39,190 OK, så kom tilbake. 907 00:44:39,190 --> 00:44:43,570 Men så gjorde ikke hvorfor den andre man kommer tilbake ennå? 908 00:44:43,570 --> 00:44:44,389 Jepp? 909 00:44:44,389 --> 00:44:49,280 >> PUBLIKUM: Serveren kan ikke gjøre noe mens det å beregne det store antall. 910 00:44:49,280 --> 00:44:51,620 >> KEVIN SCHMID: Høyre. 911 00:44:51,620 --> 00:44:55,395 Så svaret var bare at serveren egentlig ikke kan gjøre noe mens 912 00:44:55,395 --> 00:44:57,460 det er å beregne som Fibonacci-tall. 913 00:44:57,460 --> 00:44:59,360 Så nå har jeg nettopp fått mine to ting tilbake. 914 00:44:59,360 --> 00:45:03,210 Men jeg antar bare å tenke på koden litt mer, hvordan det fungerer 915 00:45:03,210 --> 00:45:05,030 og alt. 916 00:45:05,030 --> 00:45:11,750 >> Så denne funksjonen her er koden som Jeg har fortalt denne serveren til å kjøre når det 917 00:45:11,750 --> 00:45:14,100 mottar en ny innkommende forespørsel. 918 00:45:14,100 --> 00:45:17,940 Så det er bare kommer til å kjøre gjennom dette hele koden, og deretter kommer det til å gå 919 00:45:17,940 --> 00:45:21,120 tilbake til hendelsessløyfen, og fortsett deretter sjekker for nye hendelser. 920 00:45:21,120 --> 00:45:23,670 Så i utgangspunktet det vi har skjer er serveren er 921 00:45:23,670 --> 00:45:25,080 lytte til nye ting. 922 00:45:25,080 --> 00:45:28,070 Den første personen ber om hva 45 er. 923 00:45:28,070 --> 00:45:30,490 Vi kjører denne koden for å beregne det. 924 00:45:30,490 --> 00:45:33,420 Denne koden tar omtrent fem til seks sekunder å kjøre. 925 00:45:33,420 --> 00:45:36,990 Så går vi tilbake til hendelsen sløyfe og se etter nye forespørsler. 926 00:45:36,990 --> 00:45:42,700 >> Så dette er et eksempel på hvordan, hvis du har ting som er såkalt beregne 927 00:45:42,700 --> 00:45:48,140 bundet, eller bruker mye av beregningsorientert, ikke makt, men som er 928 00:45:48,140 --> 00:45:50,260 beregningsmessig intensive - 929 00:45:50,260 --> 00:45:54,080 Jeg antar en ting å si om dette er at denne funksjonen gjør helt, 930 00:45:54,080 --> 00:45:56,310 for det meste, ganske nyttig arbeid høyre. 931 00:45:56,310 --> 00:45:59,970 Hele tiden at at tilbakeringing funksjon var i gang, var det ganske 932 00:45:59,970 --> 00:46:03,670 mye å tilbringe mesteparten av sin tid bare databehandling som n'te Fibonacci-tall. 933 00:46:03,670 --> 00:46:05,930 >> Men vi hadde bare én tråd å forholde seg til. 934 00:46:05,930 --> 00:46:10,270 I Apache-modellen, når to mennesker gjorde forespørselen å få fib 45, vi 935 00:46:10,270 --> 00:46:11,610 ville ha hatt to forskjellige tråder. 936 00:46:11,610 --> 00:46:15,060 Og deretter operativsystemet jobb ville ha vært, eller brukernivå 937 00:46:15,060 --> 00:46:18,660 kode som styrer trådene, ville har vært å skjære den opp på 938 00:46:18,660 --> 00:46:23,060 CPU, eller selv om du hadde flere prosessorer, fordele dem jevnt over CPUer 939 00:46:23,060 --> 00:46:26,130 slik at de begge var ferdig omtrent på samme tid. 940 00:46:26,130 --> 00:46:31,120 >> Så bare for å vise deg hvordan vi kan sortere av - og dette er ikke en total perfekt 941 00:46:31,120 --> 00:46:34,280 løsning, men liksom hvordan vi kan gjøre en komme tilbake hit og gjøre 942 00:46:34,280 --> 00:46:35,880 litt bedre. 943 00:46:35,880 --> 00:46:41,540 Så det jeg har her er et program som heter FIB C. Og dette bruker i utgangspunktet 944 00:46:41,540 --> 00:46:45,690 en annen av Node moduler kalt Barneprosessmodul. 945 00:46:45,690 --> 00:46:49,210 Så jeg har tatt det på toppen slag av at jeg ville gjøre en halvkilo inkluderer 946 00:46:49,210 --> 00:46:51,230 barnet process.h eller noe. 947 00:46:51,230 --> 00:46:56,210 Nå har jeg tilgang til denne CP variabel som har all min funksjonalitet. 948 00:46:56,210 --> 00:47:01,810 >> Så nå hva jeg gjør i dette svaret behandleren er jeg kjører dette programmet 949 00:47:01,810 --> 00:47:04,100 dot slash løgn 45. 950 00:47:04,100 --> 00:47:06,820 Så det jeg har gjort - og jeg skal bare å gå ut av dette programmet for en 951 00:47:06,820 --> 00:47:07,620 litt - 952 00:47:07,620 --> 00:47:11,060 er at jeg har skrevet et C-program som utgangspunktet beregner 953 00:47:11,060 --> 00:47:12,630 n'te Fibonacci-tall. 954 00:47:12,630 --> 00:47:15,960 Så her er bare et program jeg har skrevet i C som beregner dette. 955 00:47:15,960 --> 00:47:19,040 Jeg kan kompilere den, og jeg kan kjøre det på kommandolinjen. 956 00:47:19,040 --> 00:47:22,150 Og det kommer til å beregne 45th Fibonacci-tall. 957 00:47:22,150 --> 00:47:24,510 >> Så merker det tar bare ganske mye så lenge. 958 00:47:24,510 --> 00:47:28,240 Jeg kunne sannsynligvis ha brukt dash 03 til optimalisere det eller noe sånt, 959 00:47:28,240 --> 00:47:31,050 men jeg bare gjorde som vanlig kompilatoren innstillinger. 960 00:47:31,050 --> 00:47:33,260 Og det skriver den ut. 961 00:47:33,260 --> 00:47:36,830 >> Men nå, hva er det jeg slags gjør? 962 00:47:36,830 --> 00:47:39,800 Oh sorry, feil fil. 963 00:47:39,800 --> 00:47:42,800 Så jeg gjør de samme tingene med overskriften som før. 964 00:47:42,800 --> 00:47:45,780 Da jeg gjør dette cp.exec. 965 00:47:45,780 --> 00:47:49,460 Så hva dette kommer til å gjøre, er det kommer til å kjøre dette programmet. 966 00:47:49,460 --> 00:47:51,960 Men måten dette fungerer på er at det er ikke til å vente på 967 00:47:51,960 --> 00:47:53,400 at programmet skal bli ferdig. 968 00:47:53,400 --> 00:47:56,000 Den sier bare utgangspunktet gjennomføre dette programmet. 969 00:47:56,000 --> 00:47:58,700 Så i utgangspunktet skrive dette inn i ledeteksten slags. 970 00:47:58,700 --> 00:48:02,350 >> Og så, når du er ferdig med det, kjøre denne funksjonen. 971 00:48:02,350 --> 00:48:04,800 Så nå er vi på en måte få dette Hele restaurert saga 972 00:48:04,800 --> 00:48:06,750 som om vi ikke venter. 973 00:48:06,750 --> 00:48:08,530 Betyr den slags fornuftig? 974 00:48:08,530 --> 00:48:08,990 Jepp? 975 00:48:08,990 --> 00:48:11,060 >> PUBLIKUM: [uhørbart]? 976 00:48:11,060 --> 00:48:13,610 >> KEVIN SCHMID: Så dette vil faktisk åpne opp en ny prosess for å gjøre det. 977 00:48:13,610 --> 00:48:19,310 Så dette er faktisk, på noen måter, onde, ikke super onde, men det er 978 00:48:19,310 --> 00:48:22,990 viktig å si at dette er slags kommer tilbake til, på den ene siden, Apache 979 00:48:22,990 --> 00:48:26,450 modell der vi gjør tråder og prosesser for hver forespørsel eller 980 00:48:26,450 --> 00:48:29,280 prosesser for hver forespørsel. 981 00:48:29,280 --> 00:48:32,090 Så dette er slags analogt til hva Apache gjør. 982 00:48:32,090 --> 00:48:35,110 I noen tilfeller vil det bare bruke en ny tråden, som er litt mer lys 983 00:48:35,110 --> 00:48:39,040 vekt enn en prosess, men Apache kunne ende opp forking en ny prosess 984 00:48:39,040 --> 00:48:43,370 som er litt av det vi gjør her implisitt ved å gjøre dot slash løgn 45. 985 00:48:43,370 --> 00:48:48,690 >> Og da i så fall, vi slags pådra de samme utgiftene til prosesser. 986 00:48:48,690 --> 00:48:50,710 Så dette er bare en ting du kan gjøre. 987 00:48:50,710 --> 00:48:52,600 Men bare for å vise denne typen løping. 988 00:48:52,600 --> 00:48:57,120 Og dette snakket er bare veldig rettet mot presentere disse slags programmer som en 989 00:48:57,120 --> 00:49:00,710 måte å vise ulike perspektiver på hvordan å designe servere sånn. 990 00:49:00,710 --> 00:49:08,300 Så dette er i gang, og deretter nå hvis jeg gjør dette igjen, fikk jeg to prosess IDer. 991 00:49:08,300 --> 00:49:10,320 >> La oss bare snakke om ting å påpeke. 992 00:49:10,320 --> 00:49:11,980 Så merker at de er trinnvis. 993 00:49:11,980 --> 00:49:12,700 Det er kult. 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 legg merke til nå, kom de tilbake på omtrent samme tid. 996 00:49:18,580 --> 00:49:23,960 >> Og nå, et godt spørsmål å spørre om hvorfor var at saken er, hvis jobb 997 00:49:23,960 --> 00:49:27,590 var det nå for å liksom gjøre disse tingene slags spille fair med hver 998 00:49:27,590 --> 00:49:31,350 andre, disse to tilfeller av dot slash FIB 45 at jeg løp 999 00:49:31,350 --> 00:49:32,880 eller at Node løp? 1000 00:49:32,880 --> 00:49:36,940 Hvem slags gjør det rettferdig at de begge bli slags balansert kjøretid? 1001 00:49:36,940 --> 00:49:42,900 1002 00:49:42,900 --> 00:49:44,220 >> PUBLIKUM: [uhørbart]. 1003 00:49:44,220 --> 00:49:44,620 >> KEVIN SCHMID: Yeah. 1004 00:49:44,620 --> 00:49:49,740 Så i utgangspunktet, når jeg gjør dot slash liten løgn 45 eller noe sånt, nå er det 1005 00:49:49,740 --> 00:49:53,750 slags opp til operativsystemet for å håndtere runtime av disse programmene. 1006 00:49:53,750 --> 00:49:56,920 Og nå kan det planlegge dem på forskjellige prosessorer eller det 1007 00:49:56,920 --> 00:49:58,330 kan planlegge dem. 1008 00:49:58,330 --> 00:50:01,870 Det kan skjære opp den tid som en CPU blir den eller at de får 1009 00:50:01,870 --> 00:50:03,330 for å kjøre på en CPU. 1010 00:50:03,330 --> 00:50:05,620 Så det er tanken bak det. 1011 00:50:05,620 --> 00:50:07,220 Betyr det fornuftig for alle? 1012 00:50:07,220 --> 00:50:10,950 Så nå Node er egentlig ikke spiller en del i å dele opp disse oppgavene. 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 nesten det for eksempler. 1016 00:50:17,840 --> 00:50:23,370 Jeg ville bare vise en ting fordi mye av dette så langt har vært 1017 00:50:23,370 --> 00:50:27,350 Ikke helt super praktisk i noen tilfeller. 1018 00:50:27,350 --> 00:50:30,970 Jeg kan tenke meg å komme hjem etter dette snakke og noe og si like, 1019 00:50:30,970 --> 00:50:35,710 vel jeg slags fikk ut av den talen som Jeg kan lage en Fibonacci-server for 1020 00:50:35,710 --> 00:50:37,360 mitt siste prosjekt. 1021 00:50:37,360 --> 00:50:40,770 Så her er bare liksom enda et eksempel som forhåpentligvis vil være - 1022 00:50:40,770 --> 00:50:44,620 kanskje ikke, men kanskje - litt mer slags relevante for slutt prosjekter og 1023 00:50:44,620 --> 00:50:46,440 tenke fremover for sånt. 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 typen som noen eksempler server side kode som du kan bruke til å 1026 00:50:52,290 --> 00:50:55,700 sette opp en liten prat server som du kanskje har sett på 1027 00:50:55,700 --> 00:50:56,630 Facebook Chat eller hva. 1028 00:50:56,630 --> 00:50:59,990 Så jeg sier ikke at dette er som Facebook Chat, men dette er slags 1029 00:50:59,990 --> 00:51:06,230 som en god - kanskje ikke bra, men kanskje god - utgangspunkt for en prat 1030 00:51:06,230 --> 00:51:08,560 server for nettstedet ditt for et avsluttende prosjekt. 1031 00:51:08,560 --> 00:51:11,040 Så la oss se på hva det gjør. 1032 00:51:11,040 --> 00:51:15,500 >> Så vi får denne spesielle tingen på toppen, Var denne SIO 1033 00:51:15,500 --> 00:51:17,050 tilsvarer krever Socket.IO. 1034 00:51:17,050 --> 00:51:20,280 Så dette er en annen ting som det ikke faktisk kommer bundlet 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 akkurat som noen utvidelse til Node. 1038 00:51:25,670 --> 00:51:29,220 >> SocketIO er faktisk veldig slags kult. 1039 00:51:29,220 --> 00:51:32,550 Det er en abstraksjon som i utgangspunktet hva den gjør er er det tillater deg å 1040 00:51:32,550 --> 00:51:35,770 har denne strøm av kommunikasjon mellom en web 1041 00:51:35,770 --> 00:51:39,430 nettleser og en web server. 1042 00:51:39,430 --> 00:51:45,250 Så for det meste så langt, har vi hatt disse svært rask ett sekund eller to 1043 00:51:45,250 --> 00:51:48,790 andre kommunikasjon mellom en web leseren og webserveren. 1044 00:51:48,790 --> 00:51:53,310 Så det er i utgangspunktet gå til google.com, get ting, sende den tilbake, og deretter 1045 00:51:53,310 --> 00:51:53,770 vi er ferdige. 1046 00:51:53,770 --> 00:51:56,560 Vi kommer aldri til å snakke igjen før brukertyper i noe annet. 1047 00:51:56,560 --> 00:52:01,090 >> Men hva Socket.IO og lignende type ting - og SocketIO er faktisk en 1048 00:52:01,090 --> 00:52:03,940 av de tingene som er bygget på som WebSocket som er liksom tilgjengelig 1049 00:52:03,940 --> 00:52:06,440 som en del av HTML5 - 1050 00:52:06,440 --> 00:52:09,620 som tillater deg å ha denne fortsetter dialogen. 1051 00:52:09,620 --> 00:52:13,990 Og dette er svært nyttig i en chat-server type ting fordi det er 1052 00:52:13,990 --> 00:52:17,390 type som en kontinuerlig dialog i noen måter fordi hvis du chatter 1053 00:52:17,390 --> 00:52:21,540 med noen, kan du nå bare sende en Melding ned røret, og deretter 1054 00:52:21,540 --> 00:52:23,940 serveren kan sende en melding til nabo rør til den andre personen 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 ha denne utveksle sånn. 1057 00:52:26,903 --> 00:52:30,590 1058 00:52:30,590 --> 00:52:32,850 >> Så det er litt av hva SocketIO er god for. 1059 00:52:32,850 --> 00:52:38,400 Grunnen til at SocketIO bruker WebSockets som en ting er at i 1060 00:52:38,400 --> 00:52:43,980 tillegg til bare ren gamle WebSockets, det gjør også noen triks for å i utgangspunktet 1061 00:52:43,980 --> 00:52:45,610 gjøre det nettleseren kompatibel. 1062 00:52:45,610 --> 00:52:50,040 Så nettlesere som Internet Explorer dessverre ikke støtter WebSockets 1063 00:52:50,040 --> 00:52:50,810 rett ut av boksen. 1064 00:52:50,810 --> 00:52:55,290 Så det bruker en annen type kule ryddig ting med Adobe Flash for å tillate 1065 00:52:55,290 --> 00:52:57,170 deg å ha kors nettleser støtte. 1066 00:52:57,170 --> 00:52:58,800 Så det er veldig nyttig. 1067 00:52:58,800 --> 00:53:02,440 >> Og faktisk, jeg vet jeg er litt kjører på tid her, men CS50 1068 00:53:02,440 --> 00:53:08,490 Diskuter, har du noen gang sett noe lignende, vet jeg ikke, blank så og så er 1069 00:53:08,490 --> 00:53:11,030 svarer på dette innlegget, eller noe sånn, at funksjonen? 1070 00:53:11,030 --> 00:53:12,250 Det er SocketIO. 1071 00:53:12,250 --> 00:53:15,580 Så når noen begynner å skrive i diskutere boksen for å gjøre et svar eller 1072 00:53:15,580 --> 00:53:20,040 noe, men leseren din hva som er heter i SocketIO avgir en slags 1073 00:53:20,040 --> 00:53:22,660 hendelse som sier noen er svarer på dette innlegget. 1074 00:53:22,660 --> 00:53:26,110 >> Da sier serveren, OK, hva må jeg gjøre? 1075 00:53:26,110 --> 00:53:29,270 Vel nå har jeg til å fortelle de andre gutta som er på CS50 Diskuter ute 1076 00:53:29,270 --> 00:53:31,170 på dette innlegget at noen har du svarer. 1077 00:53:31,170 --> 00:53:34,190 Så det er litt av hva SocketIO er god for, dette fortsetter slik 1078 00:53:34,190 --> 00:53:35,930 strøm av dialog. 1079 00:53:35,930 --> 00:53:37,250 OK. 1080 00:53:37,250 --> 00:53:40,060 >> Så det jeg har her - og vi er bare kommer til å ignorere rekke tilkoblinger 1081 00:53:40,060 --> 00:53:41,390 for en liten bit - 1082 00:53:41,390 --> 00:53:43,080 hva jeg gjør er jeg en annen lytter. 1083 00:53:43,080 --> 00:53:46,880 Så det er bare slik i Socket.IO er sier la oss lytte på denne porten. 1084 00:53:46,880 --> 00:53:50,060 Og så gjør jeg dette ved tilkobling. 1085 00:53:50,060 --> 00:53:53,360 Så det er bare utgangspunktet Socket IO måte å si, når vi mottar et 1086 00:53:53,360 --> 00:53:55,840 tilkobling, jeg vil ha deg å kjøre denne koden. 1087 00:53:55,840 --> 00:53:59,870 >> Og legg merke til at i stedet for å ha rec og res vedtatt i det jeg har Socket. 1088 00:53:59,870 --> 00:54:03,260 Og dette Socket ideen er i utgangspunktet dette ting som du kan skrive til og lese 1089 00:54:03,260 --> 00:54:05,750 fra som har brukerens meldinger muligens. 1090 00:54:05,750 --> 00:54:10,700 Og meldingene som du vil sende kan gå gjennom den Socket. 1091 00:54:10,700 --> 00:54:12,140 Betyr det fornuftig? 1092 00:54:12,140 --> 00:54:14,490 Så det er dette fortsatt tingen. 1093 00:54:14,490 --> 00:54:17,820 >> Så det jeg gjør er at jeg kaller Socket.emit. 1094 00:54:17,820 --> 00:54:20,330 Og avgir tar ganske mye to argumenter. 1095 00:54:20,330 --> 00:54:24,100 Det første argumentet er en streng bare representerer den typen 1096 00:54:24,100 --> 00:54:25,270 ting du avgir. 1097 00:54:25,270 --> 00:54:28,120 Så for denne saken, jeg har bruk denne strengen ny melding. 1098 00:54:28,120 --> 00:54:32,670 Og det er bare i utgangspunktet si at type denne tingen, hva jeg er 1099 00:54:32,670 --> 00:54:34,750 sending, er en ny melding. 1100 00:54:34,750 --> 00:54:38,460 Så du kan lytte til bestemte typer som ny melding eller noe 1101 00:54:38,460 --> 00:54:39,960 ved å bruke prikk på. 1102 00:54:39,960 --> 00:54:44,570 >> Så tilkobling og brukervennlig sendt dit, hvis du ser på hvor vi kaller prikk på, 1103 00:54:44,570 --> 00:54:48,150 de er andre strenger som representerer typer brukermeldinger. 1104 00:54:48,150 --> 00:54:52,060 Så det er i utgangspunktet du kan ha denne emit ett av disse meldingstyper, og 1105 00:54:52,060 --> 00:54:55,520 deretter gjøre noe som respons på ett av disse meldingstypene 1106 00:54:55,520 --> 00:54:57,640 >> Så jeg sender ut denne nye meldingen. 1107 00:54:57,640 --> 00:55:00,540 Vi kommer til å ignorere connections.push for en andre. 1108 00:55:00,540 --> 00:55:03,360 Men da sier jeg, Socket.on bruker sendt. 1109 00:55:03,360 --> 00:55:07,540 Så nå er det er typen som når bruker sender meg en melding, jeg vil 1110 00:55:07,540 --> 00:55:09,240 du å kjøre denne koden. 1111 00:55:09,240 --> 00:55:12,080 Og legg merke til at det anonym funksjon tar i denne variabelen 1112 00:55:12,080 --> 00:55:16,300 heter data som er utgangspunktet går å ha brukerens budskap. 1113 00:55:16,300 --> 00:55:20,700 >> Så la oss nå slags snakk om matrisen tilkoblinger. 1114 00:55:20,700 --> 00:55:24,590 Så dette er utformet for en chat-klient hvor utgangspunktet alle er litt i 1115 00:55:24,590 --> 00:55:25,950 samme chatterommet. 1116 00:55:25,950 --> 00:55:29,640 Så i utgangspunktet, hva vi trenger for å holde rundt er noen array som i utgangspunktet 1117 00:55:29,640 --> 00:55:33,170 representerer alle de folk som prater i noen måter, hvis det er fornuftig. 1118 00:55:33,170 --> 00:55:33,340 Høyre? 1119 00:55:33,340 --> 00:55:37,190 Fordi vi trenger å vite hvem disse gutta er slik at vi kan sende dem meldinger 1120 00:55:37,190 --> 00:55:39,140 at andre folk sender til oss. 1121 00:55:39,140 --> 00:55:44,440 >> Så hva denne koden gjør er når brukeren sender en melding - som er den typen 1122 00:55:44,440 --> 00:55:45,300 arrangementet - 1123 00:55:45,300 --> 00:55:47,120 vi kommer til å kjøre denne koden. 1124 00:55:47,120 --> 00:55:51,240 Og det vi gjør er vi kjøre gjennom dette array som vi har kalt tilkoblinger. 1125 00:55:51,240 --> 00:55:54,390 Og ganske mye for hver tilkobling bortsett fra den som er vår, det er 1126 00:55:54,390 --> 00:55:59,520 hva denne koden sier, vi sender en ny melding med at vedlagte meldingen 1127 00:55:59,520 --> 00:56:01,210 informasjon. 1128 00:56:01,210 --> 00:56:04,880 >> Så hvis du legger merke til her, hva jeg gjorde da brukeren faktisk gjør en ny 1129 00:56:04,880 --> 00:56:08,560 forbindelse er at jeg har lagt med JavaScript.push metoden, er denne 1130 00:56:08,560 --> 00:56:12,100 utgangspunktet bare si som legger at Socket som en verdi i 1131 00:56:12,100 --> 00:56:13,900 våre forbindelser array. 1132 00:56:13,900 --> 00:56:20,560 Så nå når denne koden kjøres, vil det sende ting til de aktuelle 1133 00:56:20,560 --> 00:56:22,020 tilkoblinger. 1134 00:56:22,020 --> 00:56:26,980 Så dette kan være et godt utgangspunkt for å lage en chat-server 1135 00:56:26,980 --> 00:56:28,250 eller noe lignende. 1136 00:56:28,250 --> 00:56:33,315 >> Og hva slags kule er at den kode som du ser her for like på og 1137 00:56:33,315 --> 00:56:36,390 avgir og sånn er den samme slags Javascript-kode som du ville 1138 00:56:36,390 --> 00:56:39,260 skrive i nettleseren for å samhandle med serveren. 1139 00:56:39,260 --> 00:56:42,480 Så det er derfor SocketIO er slags ryddig og nyttig på den måten. 1140 00:56:42,480 --> 00:56:45,680 1141 00:56:45,680 --> 00:56:49,250 >> Oh og bare en ting virkelig rask. 1142 00:56:49,250 --> 00:56:55,970 Det var en CS50 avsluttende prosjekt i fjor som i utgangspunktet implementert en prat 1143 00:56:55,970 --> 00:56:57,840 server i node.js. 1144 00:56:57,840 --> 00:57:01,350 Jeg tror 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å hva nettadressen er, men Jeg kan sende det ut etterpå. 1147 00:57:06,190 --> 00:57:09,260 Men det er litt kult hva du kan gjøre med node.js. 1148 00:57:09,260 --> 00:57:14,680 >> Så jeg håper, generelt, dere har en god følelse av hva Node.js er nyttig 1149 00:57:14,680 --> 00:57:17,870 for og hvordan du kan kanskje søke til det endelige prosjektet. 1150 00:57:17,870 --> 00:57:21,050 Jeg skal sende ut noen mer ressurser sammen med dette. 1151 00:57:21,050 --> 00:57:23,170 Og takk for at du kom. 1152 00:57:23,170 --> 00:57:23,610 Takk. 1153 00:57:23,610 --> 00:57:27,168 >> [APPLAUSE]