1 00:00:00,000 --> 00:00:08,350 2 00:00:08,350 --> 00:00:09,710 >> KEVIN SCHMID: Hallo iedereen. 3 00:00:09,710 --> 00:00:12,640 Welkom op de CS50 seminar op Node.js. 4 00:00:12,640 --> 00:00:13,955 Mijn naam is Kevin. 5 00:00:13,955 --> 00:00:15,580 Ik ben een CS50 TF. 6 00:00:15,580 --> 00:00:17,650 En ik ben een beetje zoals echt enthousiast over dit seminar. 7 00:00:17,650 --> 00:00:20,430 Ik denk Node.js is erg cool. 8 00:00:20,430 --> 00:00:24,200 Ik hoop dat dit seminar kunnen worden gebruikt als een goede, denk ik, springplank voor 9 00:00:24,200 --> 00:00:26,380 sommige van uw uiteindelijke projecten als u geïnteresseerd in het gebruik zijn 10 00:00:26,380 --> 00:00:27,630 iets als Node.js. 11 00:00:27,630 --> 00:00:29,770 12 00:00:29,770 --> 00:00:33,320 >> We zullen een soort van start het seminar uit door alleen over een beetje van de 13 00:00:33,320 --> 00:00:36,970 soort achtergrond schaalbaarheid perspectieven van Node.js, en vervolgens 14 00:00:36,970 --> 00:00:39,240 we gaan naar een aantal voorbeelden van code. 15 00:00:39,240 --> 00:00:42,340 En ik zal de code op een website te hebben, en je kunt kijken naar de code. 16 00:00:42,340 --> 00:00:45,475 En na het seminar, zal ik sorteren gesprekstijd over hoe je kunt instellen Node.js 17 00:00:45,475 --> 00:00:48,220 op uw computer. 18 00:00:48,220 --> 00:00:48,710 >> OK. 19 00:00:48,710 --> 00:00:49,760 Dus laten we beginnen. 20 00:00:49,760 --> 00:00:53,700 Dus ik denk dat ik wil alleen maar praten over webservers, echt, als eerste. 21 00:00:53,700 --> 00:00:59,730 En om deze discussie te starten, ik in principe een diagram dat van 22 00:00:59,730 --> 00:01:04,269 het leerboek gebruikt voor CS61, die toont eigenlijk de interactie 23 00:01:04,269 --> 00:01:08,510 tussen een cliënt proces, zoals uw web browser of als uw doel klant of 24 00:01:08,510 --> 00:01:11,340 iets dergelijks, en een webserver. 25 00:01:11,340 --> 00:01:15,150 Dus dit lijkt een soort vergelijkbaar met de foto die je zag in lezing over 26 00:01:15,150 --> 00:01:19,270 Woensdag waar in principe hebben we een aantal clientproces zoals Google Chrome. 27 00:01:19,270 --> 00:01:22,980 >> En dan stap een is de client stuurt een verzoek. 28 00:01:22,980 --> 00:01:27,510 Dus dat kan iets als goed laten we bezoeken, weet ik niet, CS50.net. 29 00:01:27,510 --> 00:01:29,320 Dus we geven dat verzoek. 30 00:01:29,320 --> 00:01:34,280 En heeft iemand herinner me de naam van het protocol dat bepaalt hoe dat 31 00:01:34,280 --> 00:01:35,610 verzoek moet worden gestructureerd? 32 00:01:35,610 --> 00:01:36,382 Yep. 33 00:01:36,382 --> 00:01:37,650 >> PUBLIEK: [onverstaanbaar]. 34 00:01:37,650 --> 00:01:38,150 >> KEVIN SCHMID: Precies. 35 00:01:38,150 --> 00:01:40,100 Dus het is zoals HTTP, toch? 36 00:01:40,100 --> 00:01:44,720 Dus eigenlijk geeft aan hoe dat verzoek moeten daadwerkelijk worden gelegd 37 00:01:44,720 --> 00:01:47,450 uit, want aan het eind van de dag, dat verzoek is eigenlijk net als een 38 00:01:47,450 --> 00:01:50,240 string die eigenlijk zegt ik wil dit. 39 00:01:50,240 --> 00:01:53,580 En de specificatie daarvoor is HTTP. 40 00:01:53,580 --> 00:01:55,270 Dus dat is als een protocol. 41 00:01:55,270 --> 00:01:57,920 >> Dus dan is de server ontvangt dat verzoek. 42 00:01:57,920 --> 00:02:01,610 Dus jullie hebben een webserver geïnstalleerd in de CS50 apparaat. 43 00:02:01,610 --> 00:02:02,460 Het is Apache. 44 00:02:02,460 --> 00:02:06,230 En deze week als je werkt op de probleemgebieden stelde zeven, zult u daadwerkelijk werken 45 00:02:06,230 --> 00:02:08,160 met dat web-server. 46 00:02:08,160 --> 00:02:12,380 Dus de server ontvangt dat verzoek, en dan moet het soort krabben haar 47 00:02:12,380 --> 00:02:15,090 hoofd en zeggen als goed wat doe ik met deze? 48 00:02:15,090 --> 00:02:20,060 >> Dus op basis van wat zij beslist te doen, dan het kan hebben om contact op te nemen een soort 49 00:02:20,060 --> 00:02:20,730 van bron. 50 00:02:20,730 --> 00:02:23,700 En die bron zou kunnen zijn van een veel verschillende dingen. 51 00:02:23,700 --> 00:02:26,810 Voor een, kan het zijn gewoon als een statische HTML-bestand. 52 00:02:26,810 --> 00:02:29,820 Dus het kon gewoon zoals sommige HTML die is net als voor 53 00:02:29,820 --> 00:02:31,100 uw persoonlijke website. 54 00:02:31,100 --> 00:02:35,360 Het zou een statisch bestand als een afbeelding te zijn of als een film die je hebt. 55 00:02:35,360 --> 00:02:37,660 Het zou zelfs moeten praten om een ​​soort database 56 00:02:37,660 --> 00:02:39,530 als een MySQL database. 57 00:02:39,530 --> 00:02:43,910 Dus het hoeft niet altijd om te communiceren met een bron, maar in 58 00:02:43,910 --> 00:02:45,700 sommige gevallen kon. 59 00:02:45,700 --> 00:02:47,800 >> Dus dan wat het gaat doen na dat is dat het gaat om 60 00:02:47,800 --> 00:02:49,430 terug te sturen de respons. 61 00:02:49,430 --> 00:02:53,130 En de respons op dit ook opgegeven door HTTP. 62 00:02:53,130 --> 00:02:54,830 Dus dan is de klant kan ontvangen. 63 00:02:54,830 --> 00:02:56,740 Het kan het uit elkaar scheuren en verwerken. 64 00:02:56,740 --> 00:03:00,900 En dan krijg je een webpagina zoals Google of CS50.net of 65 00:03:00,900 --> 00:03:02,240 wat je ging. 66 00:03:02,240 --> 00:03:03,100 OK? 67 00:03:03,100 --> 00:03:06,080 >> Dus dit is de basis interactie die we gaan te maken hebben. 68 00:03:06,080 --> 00:03:08,770 En we vrij veel gaat worden richten op dit deel van de 69 00:03:08,770 --> 00:03:10,640 interactie de server. 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 Iemand enig vragen tot nu toe? 73 00:03:15,500 --> 00:03:17,720 OK. 74 00:03:17,720 --> 00:03:22,430 >> Dus zoals we al zeiden, de webserver ontvangt deze HTTP-verzoek en geeft dan dit 75 00:03:22,430 --> 00:03:24,760 HTTP response. 76 00:03:24,760 --> 00:03:29,100 En zoals we eerder over gesproken, de CS50 apparaat webserver is Apache. 77 00:03:29,100 --> 00:03:32,490 Dus als jullie werken aan P stelde zeven, je gaat werken met de 78 00:03:32,490 --> 00:03:34,120 Apache web server. 79 00:03:34,120 --> 00:03:37,890 Je zult nooit echt werken met Apache direct teveel. 80 00:03:37,890 --> 00:03:41,920 U soort configureren Apache een beetje wanneer u de virtuele hosts of opgeven 81 00:03:41,920 --> 00:03:44,970 de v gastheren, en we krijgen om dat in een klein beetje. 82 00:03:44,970 --> 00:03:50,620 >> Maar in principe, de Apache web server opgezet om te werken met PHP soort 83 00:03:50,620 --> 00:03:51,730 van uit de doos. 84 00:03:51,730 --> 00:03:56,170 Dus wat er werkelijk gebeurt is wanneer je gaat naar een van uw websites als, zeg, 85 00:03:56,170 --> 00:04:00,360 lokale host slash index.PHP of zoiets, is uw browser stuurt die 86 00:04:00,360 --> 00:04:04,330 aanvraag, en vervolgens Apache zit daar en cijfers uit te maken. 87 00:04:04,330 --> 00:04:08,840 En de actie is om uit te voeren die code in index.PHP en 88 00:04:08,840 --> 00:04:11,330 stuur het dan uit terug. 89 00:04:11,330 --> 00:04:15,640 Dus er is dat. 90 00:04:15,640 --> 00:04:16,980 Dus we soort over gehad. 91 00:04:16,980 --> 00:04:21,990 Dus kon het gewoon een statisch bestand dienen of uitgifte lopen een aantal PHP-code en vervolgens 92 00:04:21,990 --> 00:04:23,510 de reactie. 93 00:04:23,510 --> 00:04:27,670 >> Dus dan is een veel voorkomende vraag die kan komen up is goed, hoe kunnen we echt gaan 94 00:04:27,670 --> 00:04:31,750 met het hebben van meerdere gebruikers tegelijkertijd? 95 00:04:31,750 --> 00:04:36,930 Dus stel als je het schrijven van een web server, als u een webserver had dat 96 00:04:36,930 --> 00:04:39,900 je probeert te schrijven in iets zoals C of iets dergelijks, 97 00:04:39,900 --> 00:04:45,150 in principe kun je nadenken over hoe er een soort code zou kunnen zijn dat 98 00:04:45,150 --> 00:04:49,330 zou het verzoek hebben ontvangen, maar dan het moet al dit werk aan het doen. 99 00:04:49,330 --> 00:04:53,060 Het kan zijn dat, bijvoorbeeld, contact gegevensbestand of iets dergelijks. 100 00:04:53,060 --> 00:04:53,300 Rechts? 101 00:04:53,300 --> 00:04:56,010 En dan zou het dat soort doen verwerking en 102 00:04:56,010 --> 00:04:57,060 teruggestuurd de reactie. 103 00:04:57,060 --> 00:04:58,950 Dus dat is net als de hoge algemeen overzicht. 104 00:04:58,950 --> 00:05:04,210 >> Maar het is niet meteen duidelijk hoe je kan dat doen, zodat twee personen of 105 00:05:04,210 --> 00:05:09,040 zelfs 1000 mensen kunnen werken met uw webserver tegelijkertijd. 106 00:05:09,040 --> 00:05:14,880 Dus de oplossing die gebruik maakt van Apache heet draden of processen. 107 00:05:14,880 --> 00:05:16,770 Dus je hebt misschien gehoord van deze termen voor. 108 00:05:16,770 --> 00:05:22,190 Het is OK als je niet hebt, maar denk gewoon over threads of processen als manieren voor 109 00:05:22,190 --> 00:05:26,290 een besturingssysteem of een gebruiker programma of iets dergelijks of een webserver 110 00:05:26,290 --> 00:05:28,810 om een ​​soort van uit te voeren meerdere dingen tegelijk. 111 00:05:28,810 --> 00:05:31,760 Dus kan je de term gehoord zoals draden van executie. 112 00:05:31,760 --> 00:05:34,140 Dus het is een beetje alsof je soort van multitasking. 113 00:05:34,140 --> 00:05:37,710 >> En als je hebt gezien op de doos van uw laptop, of iets dergelijks, 114 00:05:37,710 --> 00:05:43,040 multicore, wat je kunt doen is je kunt lopen twee verschillende threads op verschillende 115 00:05:43,040 --> 00:05:46,700 delen van de CPU zodat zij feitelijk gebeurt tegelijkertijd. 116 00:05:46,700 --> 00:05:48,100 Dus dit is echt krachtig. 117 00:05:48,100 --> 00:05:52,270 En dit is een soort van Apache's oplossing voor dit probleem. 118 00:05:52,270 --> 00:05:57,900 >> Zo zijn er zoiets als eventuele problemen met deze aanpak al? 119 00:05:57,900 --> 00:05:59,870 Dus ik denk dat ik soort van daar schreef ze. 120 00:05:59,870 --> 00:06:03,440 Maar beiden soort gebruiken veel geheugen. 121 00:06:03,440 --> 00:06:07,490 Het is erg duur om te maken een draad of een proces. 122 00:06:07,490 --> 00:06:11,750 >> En een deel van de redenering is dat gewoon zoals wanneer je draait een C-programma 123 00:06:11,750 --> 00:06:15,090 als uw belangrijkste en toen dat gesprekken andere functie, dat is 124 00:06:15,090 --> 00:06:16,520 een soort stapel. 125 00:06:16,520 --> 00:06:19,910 Dus vragen die vereisen ook een geheel aparte stack die 126 00:06:19,910 --> 00:06:21,220 kan heel groot. 127 00:06:21,220 --> 00:06:25,170 En als je kunt voorstellen dat tonnen gebruikers op uw website, zou je 128 00:06:25,170 --> 00:06:26,280 veel verschillende threads. 129 00:06:26,280 --> 00:06:28,230 Dat is een hoop stapels aan beheren en te onderhouden. 130 00:06:28,230 --> 00:06:31,280 Dus het is een groot geheugen verbruik. 131 00:06:31,280 --> 00:06:35,650 >> En dan ook, laten we zeggen dat je alleen maar een CPU, of laten we zeggen je hebt 132 00:06:35,650 --> 00:06:38,460 meer threads dan je hebt die multicores. 133 00:06:38,460 --> 00:06:38,730 Rechts? 134 00:06:38,730 --> 00:06:43,280 Dus laten we zeggen dat je 10 draden had en je had maar vijf CPU's. 135 00:06:43,280 --> 00:06:46,260 Je hebt soort van deze zaak te doen waar u schakelen tussen de huidige 136 00:06:46,260 --> 00:06:49,090 een die actief omdat u niet alle 10 tegelijk draaien. 137 00:06:49,090 --> 00:06:50,980 En dat heet een context switch. 138 00:06:50,980 --> 00:06:54,260 En die term eigenlijk een paar verschillende contexten, maar laten we gewoon 139 00:06:54,260 --> 00:06:56,620 denk aan het als het schakelen tussen twee threads. 140 00:06:56,620 --> 00:06:59,730 Dat kan behoorlijk duur zijn, omdat eigenlijk wat je moet doen is je 141 00:06:59,730 --> 00:07:03,340 moeten stoppen met wat je doet, slaat de staat dat het runnen van draad, en 142 00:07:03,340 --> 00:07:05,440 dan overschakelen naar ergens anders. 143 00:07:05,440 --> 00:07:09,420 >> Dus doet iedereen soort zien de motivatie waarom draden en 144 00:07:09,420 --> 00:07:12,030 processen is misschien een beetje grof zijn? 145 00:07:12,030 --> 00:07:13,840 En heb je een vraag? 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 Iemand nog vragen? 149 00:07:18,090 --> 00:07:19,620 OK. 150 00:07:19,620 --> 00:07:26,720 >> Dus als we een stap terug voor een tweede, er is net zoiets als een 151 00:07:26,720 --> 00:07:30,350 observatie dat we kunnen maken over veel webapplicaties. 152 00:07:30,350 --> 00:07:34,810 En dat is echt zo veel van hen eigenlijk doen dat niet veel nuttige 153 00:07:34,810 --> 00:07:37,140 werken binnenkant van een draad. 154 00:07:37,140 --> 00:07:41,170 Dus heeft iemand gestart op P stelde zeven op alle? 155 00:07:41,170 --> 00:07:45,650 Dus wilt u misschien te beschrijven sommige delen? 156 00:07:45,650 --> 00:07:47,850 Heb je gewerkt bij het inloggen of iets dergelijks? 157 00:07:47,850 --> 00:07:49,330 >> PUBLIEK: Nee 158 00:07:49,330 --> 00:07:49,780 >> KEVIN SCHMID: OK. 159 00:07:49,780 --> 00:07:50,150 Maakt niet uit. 160 00:07:50,150 --> 00:07:50,900 Sorry. 161 00:07:50,900 --> 00:07:55,790 Maar in principe, in de P-set, je bent gaat worden maken van een heleboel soort 162 00:07:55,790 --> 00:07:59,760 query naar een database om wat te krijgen informatie uit die database. 163 00:07:59,760 --> 00:08:03,330 En wat uw code is gaan doen, wat dat Apache proces of 164 00:08:03,330 --> 00:08:06,030 dat Apache draad gaat doen terwijl het moet contact 165 00:08:06,030 --> 00:08:08,990 databank is dat het een soort van gaat worden zitten er en het gaat worden 166 00:08:08,990 --> 00:08:12,130 wachten op de database om te antwoorden. 167 00:08:12,130 --> 00:08:16,290 >> Nu dat klinkt misschien niet zo groot een gaan omdat de database op uw 168 00:08:16,290 --> 00:08:18,240 CS50 apparaat, toch? 169 00:08:18,240 --> 00:08:22,930 Maar er is een soort van netwerk latentie daar omdat nu het web 170 00:08:22,930 --> 00:08:26,830 server moet zijn eigen verzoek af te geven aan de database te communiceren met de 171 00:08:26,830 --> 00:08:29,520 databank en krijgen dan dat informatie terug. 172 00:08:29,520 --> 00:08:33,190 Dus nu is het net goed op me wachten, ik ben ga iets te krijgen van de 173 00:08:33,190 --> 00:08:35,770 databank en dan is er een veel wachten gaande. 174 00:08:35,770 --> 00:08:36,870 Is dat logisch? 175 00:08:36,870 --> 00:08:38,580 >> En voor sommige dingen is het niet zo slecht. 176 00:08:38,580 --> 00:08:41,950 Als het net, bijvoorbeeld, toegang tot het geheugen, dat is niet zo 177 00:08:41,950 --> 00:08:44,100 afschuwelijk I / O latentie. 178 00:08:44,100 --> 00:08:47,110 En als ik zeg, I / O latentie, wat ik verwijzend naar is als elke soort als 179 00:08:47,110 --> 00:08:48,290 input output. 180 00:08:48,290 --> 00:08:52,950 Maar om een ​​bestand op de schijf, zoals als ik wilde de statische HTML dienen 181 00:08:52,950 --> 00:08:57,850 bestand dat op mijn webpagina of iets dergelijks, ik heb soort van te 182 00:08:57,850 --> 00:09:02,310 stoppen voor een beetje, lees dat bestand in van de schijf, en vervolgens in 183 00:09:02,310 --> 00:09:04,400 dat proces Ik wacht. 184 00:09:04,400 --> 00:09:06,700 Ik doe nuttig werk. 185 00:09:06,700 --> 00:09:11,270 >> Dit is niet waar van alles, maar het komt vaak voor bij toepassingen zoals P set 186 00:09:11,270 --> 00:09:13,960 zeven en veel applicaties dat je niet 187 00:09:13,960 --> 00:09:15,440 eigenlijk doet veel denken. 188 00:09:15,440 --> 00:09:19,090 En als ik zeg denken, ik bedoel zoals rekenwerk. 189 00:09:19,090 --> 00:09:23,270 Dus rekenwerk kan iets zijn zoals, zeg, je wilde 190 00:09:23,270 --> 00:09:26,590 schrijf een webserver die enkel berekend de zoveelste Fibonacci getal. 191 00:09:26,590 --> 00:09:29,300 Dat klinkt niet als een bijzonder leuke web-server. 192 00:09:29,300 --> 00:09:34,220 Alsof ik zou niet verwachten dat die site te zijn de volgende Facebook, maar dat is wat 193 00:09:34,220 --> 00:09:35,610 soort rekenwerk. 194 00:09:35,610 --> 00:09:39,570 >> En je kunt je voorstellen dat het vervangen met een andere vorm van interessante 195 00:09:39,570 --> 00:09:43,070 rekenwerk. 196 00:09:43,070 --> 00:09:46,050 Laten we zeggen dat je iets aan het schrijven dat berekende de mate van 197 00:09:46,050 --> 00:09:49,170 scheiding tussen twee mensen of iets dergelijks. 198 00:09:49,170 --> 00:09:51,860 Dus dat gaat gepaard met een soort van de berekening, toch? 199 00:09:51,860 --> 00:09:56,630 En zelfs dan, om te doen dat je nog steeds een hoop wachttijd doen voor misschien 200 00:09:56,630 --> 00:09:59,550 u te vragen een database om te kijken up die is bevriend met wie of 201 00:09:59,550 --> 00:10:00,600 zoiets. 202 00:10:00,600 --> 00:10:03,510 Dus er is dat soort van begrip van rekenwerk. 203 00:10:03,510 --> 00:10:05,260 Is dat logisch? 204 00:10:05,260 --> 00:10:08,258 Heeft iemand nog vragen? 205 00:10:08,258 --> 00:10:11,960 >> Oh en ik denk dat ik chat-servers er omdat de chat servers zijn soort 206 00:10:11,960 --> 00:10:13,240 Een ander goed voorbeeld van. 207 00:10:13,240 --> 00:10:15,250 Een chat-server hoeft niet te veel na te denken. 208 00:10:15,250 --> 00:10:18,350 Het heeft alleen maar te wachten voor mensen om berichten en vervolgens wanneer sturen 209 00:10:18,350 --> 00:10:19,800 ze doen, stuur ze. 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 >> Dus gewoon om weer samen te vatten, Apache en soortgelijke web servers zoals die vork een 213 00:10:28,180 --> 00:10:31,470 veel draden en processen die kan soort van verspilling. 214 00:10:31,470 --> 00:10:37,530 Dus ik denk dat de vraag die kan komen vanaf dat moeten we hebben 215 00:10:37,530 --> 00:10:39,610 meerdere threads en processen? 216 00:10:39,610 --> 00:10:41,890 Wat als we hadden slechts een? 217 00:10:41,890 --> 00:10:45,710 >> Dus laten we een soort van een beeld schetsen van wat deze eruit zou zien. 218 00:10:45,710 --> 00:10:47,810 Dus laten we gebruiken slechts een draad. 219 00:10:47,810 --> 00:10:48,660 OK? 220 00:10:48,660 --> 00:10:52,790 Dus alleen deze voorstellen met een draad. 221 00:10:52,790 --> 00:10:56,600 >> Laten we aannemen dat we waren niet echt te doen dat veel nuttige - en als ik zeg 222 00:10:56,600 --> 00:10:59,450 nuttig, ik bedoel rekenwerk - 223 00:10:59,450 --> 00:11:01,130 in die meerdere threads voor. 224 00:11:01,130 --> 00:11:04,180 Dus laten we soort consolideren alles in een thread. 225 00:11:04,180 --> 00:11:07,780 Dus wat als we hadden een thread dat soort gaat van net om in de lus en 226 00:11:07,780 --> 00:11:10,880 voortdurend controles deed iets nieuwe gebeuren. 227 00:11:10,880 --> 00:11:15,130 Dus bijvoorbeeld, iets nieuws gebeurd zou kunnen betekenen dat ik iets terug van 228 00:11:15,130 --> 00:11:19,310 de database, of iemand gestuurd mij een nieuwe HTTP-verzoek. 229 00:11:19,310 --> 00:11:22,290 Dus dat zijn soort evenementen dat gebeuren, toch? 230 00:11:22,290 --> 00:11:26,130 >> En dan wat ik kan doen als die nieuwe dingen gebeuren is in deze zelfde thread 231 00:11:26,130 --> 00:11:30,120 van uitvoering, deze enkele draad van uitvoering, kan ik wat code noemen dat 232 00:11:30,120 --> 00:11:32,410 zou behandelen die bijzonder ding. 233 00:11:32,410 --> 00:11:36,640 Dus bijvoorbeeld, als ik iets terug uit de database, kon ik run mijn 234 00:11:36,640 --> 00:11:40,960 kleine computationele deel ervan dat eigenlijk alleen maar bereidt het ding om 235 00:11:40,960 --> 00:11:42,620 terug te sturen naar de gebruiker. 236 00:11:42,620 --> 00:11:46,710 Dus doet dat soort zinvol? 237 00:11:46,710 --> 00:11:49,940 >> Maar wat zijn eigenlijk de implicaties hiervan? 238 00:11:49,940 --> 00:11:50,660 Rechts? 239 00:11:50,660 --> 00:11:53,730 Omdat we hebben geschreven veel van de code die - 240 00:11:53,730 --> 00:11:58,330 en ik ga gewoon vooruit te springen in de dia's als dat is OK. 241 00:11:58,330 --> 00:12:00,930 Dus als je het niet erg, ik ben gewoon ga een stap terug te nemen. 242 00:12:00,930 --> 00:12:03,410 Dus dit soort dingen is riep een gebeurtenis lus. 243 00:12:03,410 --> 00:12:04,070 OK? 244 00:12:04,070 --> 00:12:07,240 En het is een soort van de basis- idee achter Node.js. 245 00:12:07,240 --> 00:12:11,240 >> Dus wat Node.js is eigenlijk doet als een web server is dat er een enkele draad 246 00:12:11,240 --> 00:12:14,850 dat is in principe rond te gaan in een lus als een terwijl een soort onder 247 00:12:14,850 --> 00:12:18,510 de kap van Node.js dat is constant controleren, hebben we nieuwe dingen ontvangen? 248 00:12:18,510 --> 00:12:22,720 En dan zal het handlers draaien die u hebt ingesteld. 249 00:12:22,720 --> 00:12:26,720 Maar een goede vraag is, hoe kunnen we dit te laten gebeuren 250 00:12:26,720 --> 00:12:28,090 met bestaande dingen? 251 00:12:28,090 --> 00:12:32,440 >> Dus heb ik een lijn van C code hier dat lijkt eigenlijk alsof het openen van een 252 00:12:32,440 --> 00:12:33,060 bestand, toch? 253 00:12:33,060 --> 00:12:36,090 Ik Ze kwam net uit met een album. 254 00:12:36,090 --> 00:12:39,600 Dus ik moest haar een nieuw bestand te openen. 255 00:12:39,600 --> 00:12:43,810 Dus de manier waarop onze C-code voor de bediening - 256 00:12:43,810 --> 00:12:47,890 en ik denk dat de reden dat ik bestanden koos was want dit is een soort van de mate 257 00:12:47,890 --> 00:12:52,000 van de I / O-werk dat we hebben gedaan in C in een gevoel dat er input output. 258 00:12:52,000 --> 00:12:55,070 Dus deze code noemen we dat doet dit f geopend. 259 00:12:55,070 --> 00:12:59,370 En dan op de volgende regel van onze programma, kunnen we nu werken met f. 260 00:12:59,370 --> 00:13:02,710 >> Dus dit een voorbeeld van iets zou zijn dat is net als synchrone of 261 00:13:02,710 --> 00:13:06,850 blokkeren omdat op die eerste lijn daar we wachten tot we 262 00:13:06,850 --> 00:13:08,110 krijgen het bestand geopend. 263 00:13:08,110 --> 00:13:12,260 Dus op de tweede regel, we weten dat we kan werken met f, maar dit betekent dat 264 00:13:12,260 --> 00:13:16,240 dat de tweede lijn kan niet echt lopen tot de eerste lijn wordt gedaan. 265 00:13:16,240 --> 00:13:17,760 Is dat logisch? 266 00:13:17,760 --> 00:13:20,890 >> Dus dit slecht zou zijn om te zetten in een event handler. 267 00:13:20,890 --> 00:13:23,920 En de reden daarvoor is dat dit soort wacht, toch? 268 00:13:23,920 --> 00:13:26,500 Dus dit zou ons weer terug op hetzelfde neer. 269 00:13:26,500 --> 00:13:29,470 En nu zouden we niet eens de voordeel van meerdere threads of 270 00:13:29,470 --> 00:13:32,390 processen omdat we een thread in Node.js. 271 00:13:32,390 --> 00:13:35,496 Is dat zinvol voor iedereen? 272 00:13:35,496 --> 00:13:35,990 >> PUBLIEK: Wacht. 273 00:13:35,990 --> 00:13:36,980 Dus wat is de vervanger? 274 00:13:36,980 --> 00:13:37,840 >> KEVIN SCHMID: Oh, dus ja. 275 00:13:37,840 --> 00:13:39,560 Dus ik ga krijgen de vervanging. 276 00:13:39,560 --> 00:13:40,430 OK. 277 00:13:40,430 --> 00:13:42,960 Dus wat als we iets hadden dat zag er zo uit? 278 00:13:42,960 --> 00:13:45,730 Dus wat als ik nu bewerkt f opent een beetje? 279 00:13:45,730 --> 00:13:48,370 Dus ik ben het passeren in dezelfde twee argumenten als voorheen. 280 00:13:48,370 --> 00:13:52,610 Ik hou nog steeds van de nieuwe song dat ze kwam met. 281 00:13:52,610 --> 00:13:57,260 Maar ik ben het passeren van een derde ding dat wordt deze variabele genoemd code. 282 00:13:57,260 --> 00:14:02,280 >> Maar wat is eigenlijk code in dit verband? 283 00:14:02,280 --> 00:14:05,360 Is het als een gewone C variabele? 284 00:14:05,360 --> 00:14:06,740 Het is een functie, toch? 285 00:14:06,740 --> 00:14:09,450 En dat kan een beetje raar, omdat zijn Ik ben eigenlijk net als nu het passeren van een 286 00:14:09,450 --> 00:14:12,320 functioneren in andere functie. 287 00:14:12,320 --> 00:14:14,400 >> Dus een paar dingen op te merken over dit. 288 00:14:14,400 --> 00:14:17,145 Een, ik ben eigenlijk niet bellen de code functie. 289 00:14:17,145 --> 00:14:20,650 Zodat je niet ziet code met de Paren links, rechts Paren. 290 00:14:20,650 --> 00:14:23,010 Ik ben op doorreis in de code. 291 00:14:23,010 --> 00:14:26,990 En in C, wat dit zou eigenlijk doen is geef me een pointer naar dat de werkelijke 292 00:14:26,990 --> 00:14:29,740 code, en dan kan het uit te voeren. 293 00:14:29,740 --> 00:14:33,350 Maar denk maar aan het als je bent het passeren van de code kan worden uitgevoerd wanneer 294 00:14:33,350 --> 00:14:35,150 dat bestand opent. 295 00:14:35,150 --> 00:14:41,430 >> Maar wat dit betekent is dat nu de rest van mijn programma dat kon doen 296 00:14:41,430 --> 00:14:47,050 andere dingen, kan blijven andere doen spul terwijl wij, niet echt te wachten, maar 297 00:14:47,050 --> 00:14:50,890 gewoon aan de achterkant van ons hoofd dat toen van dat bestand openen, run die 298 00:14:50,890 --> 00:14:52,130 code bovenaan. 299 00:14:52,130 --> 00:14:53,390 Is dat logisch? 300 00:14:53,390 --> 00:14:58,060 >> En nu het idee achter Node.js is dat de code in de doe dingen met f 301 00:14:58,060 --> 00:15:04,590 deel moet vrij kort en eenvoudig zijn en eenvoudig en niet echt 302 00:15:04,590 --> 00:15:06,160 zeer rekenintensieve. 303 00:15:06,160 --> 00:15:09,390 Het kan noodzakelijk zijn om bestand te openen, maar dat moet ook vrij snel zijn 304 00:15:09,390 --> 00:15:14,710 want het moet gewoon zeggen doen andere f openen en vervolgens noemen dit een andere code. 305 00:15:14,710 --> 00:15:19,100 >> Dus gewoon om helemaal duidelijk, de f worden openen dat doet de nieuwe Katy Perry lied 306 00:15:19,100 --> 00:15:23,060 gedaan mp3, dat gaat vrij veel onmiddellijk terug. 307 00:15:23,060 --> 00:15:27,820 En dan kunnen we gewoon blijven doen andere dingen, omdat dat nu allemaal f 308 00:15:27,820 --> 00:15:33,410 open oproep doet is vertellen in principe de onderliggende f open code dit bestand te openen 309 00:15:33,410 --> 00:15:36,020 en als je klaar bent het openen van dit file of wanneer u het terug te krijgen, 310 00:15:36,020 --> 00:15:37,480 voer die code. 311 00:15:37,480 --> 00:15:39,540 Maar het hoeft niet daadwerkelijk gereden die code. 312 00:15:39,540 --> 00:15:41,815 En u had een vraag? 313 00:15:41,815 --> 00:15:46,180 >> PUBLIEK: Je leek een paar impliceren keren dat het toevoegen computationeel 314 00:15:46,180 --> 00:15:50,545 intensieve code soort breken de [Onverstaanbaar] aangedreven systeem. 315 00:15:50,545 --> 00:15:51,795 [Onverstaanbaar]? 316 00:15:51,795 --> 00:15:54,450 317 00:15:54,450 --> 00:15:55,290 >> KEVIN SCHMID: Dat is een grote vraag. 318 00:15:55,290 --> 00:15:59,280 Dus ik heb eigenlijk een voorbeeld van hoe je zou computationeel integreren 319 00:15:59,280 --> 00:16:01,090 intensieve code in een klein beetje. 320 00:16:01,090 --> 00:16:03,620 Dus als we in de code voorbeelden, Ik zal er zeker op die ene trekken. 321 00:16:03,620 --> 00:16:04,700 Is dat goed? 322 00:16:04,700 --> 00:16:05,950 Dank u. 323 00:16:05,950 --> 00:16:07,690 324 00:16:07,690 --> 00:16:08,750 >> Wat was je naam? 325 00:16:08,750 --> 00:16:10,620 >> PUBLIEK: Aaron. 326 00:16:10,620 --> 00:16:14,830 >> KEVIN SCHMID: Aaron brengt een zeer goed punt, namelijk dat als ik had 327 00:16:14,830 --> 00:16:18,560 sommige rekenintensieve code in de dingen doen met f deel, de rest van 328 00:16:18,560 --> 00:16:22,880 mijn programma kan niet worden uitgevoerd en kan niet luisteren voor nieuwe aanvragen of iets totdat alle 329 00:16:22,880 --> 00:16:24,270 dat spul is voltooid. 330 00:16:24,270 --> 00:16:27,390 Dus als ik aan het schrijven ben Node code in het algemeen tenzij we iets doen als ik ga 331 00:16:27,390 --> 00:16:33,060 om later te suggereren als we kijken naar de codevoorbeelden, ik moet er zeker van zijn dat 332 00:16:33,060 --> 00:16:36,060 mijn code niet vastbinden dit evenement lus. 333 00:16:36,060 --> 00:16:38,120 Is dat logisch? 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 >> Dus Node.js biedt dit kader dat U kunt deze gebeurtenis bouwen gedreven 337 00:16:47,090 --> 00:16:48,210 servers. 338 00:16:48,210 --> 00:16:53,460 Dus het heeft dit soort van asynchrone niet-blokkerende I / O-bibliotheken, terwijl 339 00:16:53,460 --> 00:16:56,800 de standaard C-bibliotheken die we geweest zijn werken met, zoals als je gewoon 340 00:16:56,800 --> 00:16:59,500 gebruik ze op dezelfde manier dat we hebben ze te gebruiken met f opent en 341 00:16:59,500 --> 00:17:03,000 spullen, die blokkeren, omdat je eigenlijk moet wachten voor 342 00:17:03,000 --> 00:17:04,470 dat bestand te openen. 343 00:17:04,470 --> 00:17:09,290 >> Maar Node.js geeft je dat en het banden in principe in Google's V8 344 00:17:09,290 --> 00:17:14,030 JavaScript-engine dat is de reden dat Chrome is zo snel bij verwerking 345 00:17:14,030 --> 00:17:17,040 JavaScript omdat heeft deze V8 motor. 346 00:17:17,040 --> 00:17:22,460 Dus ik weet dat klinkt als een van die WWDC ontwikkelaar conferenties ding 347 00:17:22,460 --> 00:17:25,390 waar ze gewoon gooien een stel de brief aantal dingen voor processors 348 00:17:25,390 --> 00:17:26,910 en zeggen: dit is zo cool. 349 00:17:26,910 --> 00:17:34,200 Maar het is cool dat ze deden dit omdat JavaScript - 350 00:17:34,200 --> 00:17:37,010 of misschien als je niet bekend bent met JavaScript maar omdat we nog niet gehad 351 00:17:37,010 --> 00:17:38,180 de lezingen op het - 352 00:17:38,180 --> 00:17:40,770 maar JavaScript is een geïnterpreteerde taal. 353 00:17:40,770 --> 00:17:41,970 >> En dit is een belangrijk punt ook. 354 00:17:41,970 --> 00:17:45,790 Dus het is belangrijk voor onze web servers te snel zijn, toch? 355 00:17:45,790 --> 00:17:49,970 En als we alleen rennen JavaScript code die werd geïnterpreteerd met slechts 356 00:17:49,970 --> 00:17:52,130 alle oude tolk het zou kunnen zijn traag. 357 00:17:52,130 --> 00:17:55,980 Dus Node voordelen van het hebben van deze supersnelle V8 tolk. 358 00:17:55,980 --> 00:17:59,580 En ik weet niet of ze noemde het omdat de V8 klap in het voorhoofd 359 00:17:59,580 --> 00:18:01,110 ding, maar OK. 360 00:18:01,110 --> 00:18:07,070 >> Dus ik heb enkele voorbeelden voorbereid op deze URL. 361 00:18:07,070 --> 00:18:10,490 Na het seminarie, ik soort van naar praten over hoe je Node set kan krijgen 362 00:18:10,490 --> 00:18:13,570 up, maar voor nu, ik heb net een soort van willen te lopen door een aantal voorbeelden van code. 363 00:18:13,570 --> 00:18:17,250 Dus als je wilt om mee te volgen, alle broncode is daar beschikbaar. 364 00:18:17,250 --> 00:18:18,720 OK? 365 00:18:18,720 --> 00:18:22,280 >> Dus ik zal deze URL te verlaten voor een beetje. 366 00:18:22,280 --> 00:18:24,440 En dan ga ik gewoon naar overschakelen naar de terminal. 367 00:18:24,440 --> 00:18:29,670 368 00:18:29,670 --> 00:18:34,400 Is iedereen goed met deze URL? 369 00:18:34,400 --> 00:18:37,990 Dus ik ga om over te schakelen naar mijn terminal hier. 370 00:18:37,990 --> 00:18:42,030 >> Dus hier is de code die Ik heb voor vandaag. 371 00:18:42,030 --> 00:18:43,960 Waarom hebben we niet beginnen met simpler.js bestand? 372 00:18:43,960 --> 00:18:49,110 373 00:18:49,110 --> 00:18:52,100 Het andere ding is dat dit alles code zal zijn om geschreven 374 00:18:52,100 --> 00:18:56,660 Webbrowser die u wel of misschien niet vertrouwd zijn met. 375 00:18:56,660 --> 00:19:00,170 Ik denk dat een paar dingen is dat veel JavaScript-code is het soort 376 00:19:00,170 --> 00:19:04,000 syntax en structuur vergelijkbaar met C, dus je kan soort van pak het op als 377 00:19:04,000 --> 00:19:05,020 je verder gaat. 378 00:19:05,020 --> 00:19:08,750 Ik heb geprobeerd om een ​​groot deel van de te schrijven startcode hiervoor op een manier die 379 00:19:08,750 --> 00:19:11,230 Soortgelijke C zodat het een beetje meer leesbaar. 380 00:19:11,230 --> 00:19:15,980 Maar als we vooruitgang, zal ik tonen sommige van deze aanvullende 381 00:19:15,980 --> 00:19:18,980 kenmerken van JavaScript dat zijn wel cool. 382 00:19:18,980 --> 00:19:21,510 >> Maar laten we eens kijken naar dit voorbeeld programma. 383 00:19:21,510 --> 00:19:24,820 Ik denk dat alles is er afgesneden. 384 00:19:24,820 --> 00:19:28,500 Ik ga gewoon naar die echte fix snel als dat is OK of niet. 385 00:19:28,500 --> 00:19:31,400 Ik weet niet wat dit gaat doen. 386 00:19:31,400 --> 00:19:34,660 Is dat een beetje beter? 387 00:19:34,660 --> 00:19:36,510 Ziet u de var en zo? 388 00:19:36,510 --> 00:19:39,320 OK. 389 00:19:39,320 --> 00:19:44,120 >> Dus de eerste regel is als de JavaScript versie van een variabele 390 00:19:44,120 --> 00:19:44,800 verklaring. 391 00:19:44,800 --> 00:19:49,870 Dus gewoon om te benadrukken wat dit zou uitzien in C. Dus dit is net als 392 00:19:49,870 --> 00:19:52,620 me zeggen index gelijk aan drie of iets dergelijks. 393 00:19:52,620 --> 00:19:55,740 Dus heb ik niet het type opgeven. 394 00:19:55,740 --> 00:20:00,780 JavaScript heeft wel typen, maar het is zeer dynamisch getypeerde in de natuur, zodat 395 00:20:00,780 --> 00:20:02,580 heeft geen enkele vorm van het type op. 396 00:20:02,580 --> 00:20:03,670 Dus het heeft gewoon var. 397 00:20:03,670 --> 00:20:05,320 Dat is hetzelfde als een variabele. 398 00:20:05,320 --> 00:20:05,920 OK? 399 00:20:05,920 --> 00:20:08,340 >> En ik bel deze variabele HTTP. 400 00:20:08,340 --> 00:20:12,480 En op mijn rechterhand, ik heb de uitdrukking die ik wil in HTTP te zetten. 401 00:20:12,480 --> 00:20:14,960 En dit zegt vereisen HTTP. 402 00:20:14,960 --> 00:20:18,500 Dus dit is een beetje vergelijkbaar met omvatten. 403 00:20:18,500 --> 00:20:22,940 Het is een beetje meer als krachtiger dan zijn in die zin dat zijn 404 00:20:22,940 --> 00:20:26,100 zou gewoon kopiëren en plakken de kop bestand voor de functie prototypes of 405 00:20:26,100 --> 00:20:27,930 wat met de type-definities. 406 00:20:27,930 --> 00:20:30,590 Maar vereisen er werkelijk gaande is om ons de code. 407 00:20:30,590 --> 00:20:33,280 >> Zo kunt u denken aan het als importeren van een code. 408 00:20:33,280 --> 00:20:37,960 Dus ergens in de Node.js module systeem of wat, zij hebben dit allemaal 409 00:20:37,960 --> 00:20:40,790 HTTP-server code, dus ik ben gewoon halen het voor mijn eigen 410 00:20:40,790 --> 00:20:43,130 persoonlijk gebruik in dit programma. 411 00:20:43,130 --> 00:20:44,260 OK? 412 00:20:44,260 --> 00:20:46,930 >> Dus dan heb ik deze functie dat ik heb geschreven. 413 00:20:46,930 --> 00:20:50,330 En let op, ik hoefde niet te specificeren de return type of het type van de 414 00:20:50,330 --> 00:20:51,140 argumenten weer. 415 00:20:51,140 --> 00:20:54,440 Dus soort van losse getypt in dat soort gevoel. 416 00:20:54,440 --> 00:20:57,290 Twee argumenten dat het duurt in, de aanvraag en-antwoord. 417 00:20:57,290 --> 00:21:02,080 Dus dat is conceptueel zoiets als bekend van het beeld dat we hadden 418 00:21:02,080 --> 00:21:05,280 op het scherm voordat omdat krijgen we deze aanvraag dat we 419 00:21:05,280 --> 00:21:06,410 hebben van de gebruiker. 420 00:21:06,410 --> 00:21:09,170 En dan hebben we een reactie die kunnen we dingen schrijven. 421 00:21:09,170 --> 00:21:15,060 >> Dus de eerste regel van dit doet res.writeHead 200 en vervolgens deze 422 00:21:15,060 --> 00:21:17,070 content type tekst vlakte. 423 00:21:17,070 --> 00:21:19,300 Dus laten we dit stuk uit elkaar een beetje. 424 00:21:19,300 --> 00:21:22,340 Dus laten we gewoon focussen op res.write voor een beetje. 425 00:21:22,340 --> 00:21:28,420 Dus schrijven is eigenlijk, en schrijf kop, zijn slechts manieren om de soort te schrijven 426 00:21:28,420 --> 00:21:29,960 dingen aan de respons. 427 00:21:29,960 --> 00:21:30,770 OK? 428 00:21:30,770 --> 00:21:36,230 Dus schrijf kop, als iemand herinnert van de HTTP-lezing, doen jullie 429 00:21:36,230 --> 00:21:39,940 herinner headers bij de top van de HTTP-ding? 430 00:21:39,940 --> 00:21:43,580 Dus waarom niet ik demo alleen headers echt snel. 431 00:21:43,580 --> 00:21:44,640 Zou dat nuttig? 432 00:21:44,640 --> 00:21:45,500 Of moeten we gewoon soort van - 433 00:21:45,500 --> 00:21:46,070 OK. 434 00:21:46,070 --> 00:21:46,740 Tuurlijk. 435 00:21:46,740 --> 00:21:52,340 >> Dus als uw browser gaat naar google.com of iets dergelijks, 436 00:21:52,340 --> 00:21:54,250 is er eigenlijk een beetje meer - 437 00:21:54,250 --> 00:21:55,380 dit is als een geheim - 438 00:21:55,380 --> 00:21:58,340 er is net een beetje meer informatie dat komt door de pijp dan alleen 439 00:21:58,340 --> 00:22:00,180 het beetje zoeken en alles. 440 00:22:00,180 --> 00:22:03,550 Dus om u dit te laten zien, ik ga een programma genaamd Curl gebruiken. 441 00:22:03,550 --> 00:22:04,260 OK? 442 00:22:04,260 --> 00:22:08,020 Dus dit is iets dat je kan draaien op Mac OSX opdrachtregel of in de 443 00:22:08,020 --> 00:22:09,830 apparaat of wat dan ook. 444 00:22:09,830 --> 00:22:17,050 En dus als ik Krul HTTP google.com, Ik ga naar de HTML zien. 445 00:22:17,050 --> 00:22:21,230 En dit is, in alle eerlijkheid, maar de HTML dat soort vertelt u 446 00:22:21,230 --> 00:22:24,695 omleiden naar www als uw browser niet automatisch omgaan met de 447 00:22:24,695 --> 00:22:27,110 omleiding. 448 00:22:27,110 --> 00:22:33,390 >> Dus dit is gewoon HTML, maar ik ga toe te voegen aan dit koppelteken markeer ik Krul. 449 00:22:33,390 --> 00:22:33,600 OK? 450 00:22:33,600 --> 00:22:35,600 En dit gaat om te laten zien me de headers. 451 00:22:35,600 --> 00:22:40,640 Dus dit is ook informatie die wordt geleverd door als ik deze reactie. 452 00:22:40,640 --> 00:22:41,260 OK? 453 00:22:41,260 --> 00:22:45,320 >> Dus op de top, dit zie je HTTP 301 permanent verplaatsen. 454 00:22:45,320 --> 00:22:49,470 En dit is een soort van belang omdat dit verwijst naar de status code. 455 00:22:49,470 --> 00:22:53,750 Dus de 301 hier is de status code, dat is eigenlijk gewoon een integer 456 00:22:53,750 --> 00:22:57,750 dat vertelt de browser of wie dan ook is dit leest, als je doet alsof dat 457 00:22:57,750 --> 00:23:01,460 je bent een browser en je ziet dit, eigenlijk nu als je kijkt naar 458 00:23:01,460 --> 00:23:04,960 dat en je ziet een 301, weet je ik heb om iets speciaals te doen op basis van 459 00:23:04,960 --> 00:23:08,810 301, of iets bijzonders gebeurd gebaseerd op 301. 460 00:23:08,810 --> 00:23:12,640 Dus het zegt definitief verhuisd. 461 00:23:12,640 --> 00:23:17,700 >> En dan, in principe, hebben we een bos van belangrijke waarde paren. 462 00:23:17,700 --> 00:23:22,100 Dus krijgen we de locatie is www.google.com. 463 00:23:22,100 --> 00:23:25,190 En dan soort van al die andere dingen, maar in principe, wat de locatie is 464 00:23:25,190 --> 00:23:29,662 gezegde is de nieuwe locatie is op www.google.com. 465 00:23:29,662 --> 00:23:33,800 Dus nu als je naar google.com, zul je soort zien de browser soort blink 466 00:23:33,800 --> 00:23:38,770 voor een tweede en leid je terug naar www.google.com. 467 00:23:38,770 --> 00:23:41,840 Zodat de reacties kunnen bevatten deze headers. 468 00:23:41,840 --> 00:23:43,330 >> En een paar dingen te wijzen. 469 00:23:43,330 --> 00:23:46,890 Dus laten we zeggen dat we waren eigenlijk succesvol in het bezoeken van een webpagina. 470 00:23:46,890 --> 00:23:49,040 Dus laat me gaan - 471 00:23:49,040 --> 00:23:51,080 wat is een goede website? 472 00:23:51,080 --> 00:23:53,285 Ik ben slecht in het denken van een goede websites op de plek. 473 00:23:53,285 --> 00:23:53,640 >> PUBLIEK: Wikipedia. 474 00:23:53,640 --> 00:23:54,160 >> KEVIN SCHMID: OK. 475 00:23:54,160 --> 00:23:56,040 Laten we het doen Wikipedia. 476 00:23:56,040 --> 00:23:58,680 Dus hier was ik verhuisd. 477 00:23:58,680 --> 00:23:59,240 Oh wacht. 478 00:23:59,240 --> 00:24:00,160 Was ik gebleven? 479 00:24:00,160 --> 00:24:00,890 Ja, ik was. 480 00:24:00,890 --> 00:24:01,100 OK. 481 00:24:01,100 --> 00:24:03,005 Dus ik heb naar www doen. 482 00:24:03,005 --> 00:24:06,006 Dus ik ga naar www doen. 483 00:24:06,006 --> 00:24:09,680 En zoals je kunt zien, hier is al de HTML dat de browser zou worden verwerkt 484 00:24:09,680 --> 00:24:10,910 voor Wikipedia. 485 00:24:10,910 --> 00:24:14,055 >> Maar als ik blijf scrollen hier, wat ik zal zien op de top - 486 00:24:14,055 --> 00:24:17,800 wow, er is veel HTML op Wikipedia - 487 00:24:17,800 --> 00:24:22,550 maar wat kan ik hier aan de top te zien is deze 200 statuscode in tegenstelling tot de 488 00:24:22,550 --> 00:24:24,570 301 die ik eerder zag. 489 00:24:24,570 --> 00:24:27,100 En merk op dat het heeft een leuke vriendelijke OK ernaast. 490 00:24:27,100 --> 00:24:29,470 Dus dit is als de goede toestand code. 491 00:24:29,470 --> 00:24:31,160 >> Is dat 200 nummer er bekend uit? 492 00:24:31,160 --> 00:24:34,120 493 00:24:34,120 --> 00:24:39,880 Ja want toen ik dat deed simpler.js, Ik schreef een 200 daar. 494 00:24:39,880 --> 00:24:43,290 Dus dat is eigenlijk te zeggen vertellen de browser of wie probeert te bereiken 495 00:24:43,290 --> 00:24:45,440 dit dat ze succesvol waren. 496 00:24:45,440 --> 00:24:49,040 Of dat soort zoals we waren ook succesvol. 497 00:24:49,040 --> 00:24:54,320 >> En er is een soort van speciale syntax in Javascript voor waarbij een 498 00:24:54,320 --> 00:24:59,870 kaart van deze toetsen als content type en deze waarden zoals tekst vlakte. 499 00:24:59,870 --> 00:25:03,780 Dus als je kijkt naar het antwoord dat we terug van Wikipedia voor, - 500 00:25:03,780 --> 00:25:06,200 Ik ga proberen om te scrollen een beetje sneller - 501 00:25:06,200 --> 00:25:09,900 u deze toetsen zoals server en deze waarden Apache. 502 00:25:09,900 --> 00:25:12,120 Dus je hebt sleutels en waarden. 503 00:25:12,120 --> 00:25:15,930 En u kunt dit aangeven in Knooppunt wat terug te sturen. 504 00:25:15,930 --> 00:25:19,380 >> Dus dit is eigenlijk wel in sommige manieren, en in sommige opzichten is het niet 505 00:25:19,380 --> 00:25:23,170 echt, maar het is een beetje lager niveau dan de PHP-code die je misschien wel 506 00:25:23,170 --> 00:25:26,980 schrijven voor P stelde zeven omdat PHP en Apache soort zorg voor sommige 507 00:25:26,980 --> 00:25:28,150 van deze dingen voor u. 508 00:25:28,150 --> 00:25:32,520 In PHP, kunt u de standaard overschrijven gedrag door het schrijven van uw eigen headers. 509 00:25:32,520 --> 00:25:35,520 Maar voor de toepassing van deze, krijgen we om onze eigen headers uit te schrijven. 510 00:25:35,520 --> 00:25:38,210 511 00:25:38,210 --> 00:25:41,105 >> Dus betekent dat lijn zin om iedereen, de schrijfkop lijn? 512 00:25:41,105 --> 00:25:41,380 OK. 513 00:25:41,380 --> 00:25:42,280 Geweldig. 514 00:25:42,280 --> 00:25:45,870 >> Dus dan wat ik doe is dat ik het einde van de respons door wereld zeggen hallo. 515 00:25:45,870 --> 00:25:47,040 OK. 516 00:25:47,040 --> 00:25:49,920 Maar dat is slechts een functie riep behandelaar. 517 00:25:49,920 --> 00:25:53,510 Dus nu heb ik eigenlijk soort van doen iets met deze functie, toch? 518 00:25:53,510 --> 00:25:59,170 >> Dus hier wat ik doe is er dit lijn die var server gelijken doet 519 00:25:59,170 --> 00:26:03,530 HTTP.create server, en dan heb ik pas in de behandelaar. 520 00:26:03,530 --> 00:26:06,080 Dus dit is een soort van de Node manier van het creëren van een server. 521 00:26:06,080 --> 00:26:08,790 En merk op dat ik het passeren in het verzoek handler. 522 00:26:08,790 --> 00:26:12,290 Dus dit is het vertellen van de createServer functie die ik wil dat je me een te maken 523 00:26:12,290 --> 00:26:16,270 server, en als die server ontvangt een reactie, ik heb je nodig om dit te bellen 524 00:26:16,270 --> 00:26:18,680 handlerfunctie vragen. 525 00:26:18,680 --> 00:26:18,990 OK? 526 00:26:18,990 --> 00:26:22,290 >> Dus die lijn vrij veel eindigt meteen. 527 00:26:22,290 --> 00:26:28,780 Dus de var server lijn wordt recht gedaan nadat je dat vrij veel. 528 00:26:28,780 --> 00:26:31,770 Ik bedoel, het is op te zetten een aantal interne staat om te weten dat je zou moeten 529 00:26:31,770 --> 00:26:35,400 noem dat verzoek handler functie, maar het gaat niet om daar te zitten en 530 00:26:35,400 --> 00:26:37,730 zeggen heeft de gebruiker gestuurd me nog een verzoek? 531 00:26:37,730 --> 00:26:39,270 Heeft de gebruiker een verzoek stuurde me nog? 532 00:26:39,270 --> 00:26:40,780 Zodat het niet blokkeren. 533 00:26:40,780 --> 00:26:41,650 OK? 534 00:26:41,650 --> 00:26:46,120 >> Dus wat dit zal doen, is het in principe slaat nu een verwijzing naar deze code, 535 00:26:46,120 --> 00:26:49,670 deze aanvraag handler functie, en vervolgens zal die code uit te voeren wanneer iemand 536 00:26:49,670 --> 00:26:52,170 een verzoek doet. 537 00:26:52,170 --> 00:26:54,120 En dan doen we server.listen. 538 00:26:54,120 --> 00:26:56,950 539 00:26:56,950 --> 00:26:59,960 >> De 1337 is er vrij willekeurig. 540 00:26:59,960 --> 00:27:02,285 Ik had geen bijzondere reden voor het kiezen dat nummer. 541 00:27:02,285 --> 00:27:03,860 Het was totaal willekeurig. 542 00:27:03,860 --> 00:27:07,010 Maar dat geeft de poort. 543 00:27:07,010 --> 00:27:10,640 Dus de meeste webservers je zult zien dat ze Gebruik poort 80 want dat is een soort 544 00:27:10,640 --> 00:27:11,810 van, zoals de conventie. 545 00:27:11,810 --> 00:27:16,170 Dus als ik naar iets als, Ik weet het niet, Wikipedia.org, 546 00:27:16,170 --> 00:27:17,700 en ik zet colon 8 - 547 00:27:17,700 --> 00:27:18,610 oh wow, kun je niet zien dat. 548 00:27:18,610 --> 00:27:19,370 Het spijt me. 549 00:27:19,370 --> 00:27:21,820 Maar als ik dat doe Wikipedia - 550 00:27:21,820 --> 00:27:24,810 Ik zal het hier schrijven gewoon zo dat het is duidelijk op de camera. 551 00:27:24,810 --> 00:27:29,150 Maar als ik dit in een browser met een dubbele punt 80, die aangeeft naar 552 00:27:29,150 --> 00:27:31,430 Wikipedia.org op poort 80. 553 00:27:31,430 --> 00:27:36,200 Dus het is net hoe de Verenigde Staten heeft meerdere poorten als waar u kunt verzenden 554 00:27:36,200 --> 00:27:37,440 dingen van de soort. 555 00:27:37,440 --> 00:27:40,730 Dus het is net naar deze bijzondere Plaats op deze server. 556 00:27:40,730 --> 00:27:40,990 OK. 557 00:27:40,990 --> 00:27:45,730 >> Dus ik koos voor 1337. 558 00:27:45,730 --> 00:27:47,910 Er is een hele reeks van getallen die je kunt kiezen. 559 00:27:47,910 --> 00:27:50,390 Dat was niet helemaal speciaal. 560 00:27:50,390 --> 00:27:54,560 >> Maar wat ik nu ga doen is Ik ga Node lopen. 561 00:27:54,560 --> 00:27:59,730 Laat me daadwerkelijk in te voeren dat een paar lijnen naar beneden, zodat u het kunt zien. 562 00:27:59,730 --> 00:28:03,130 Ik ga Node doen, en ik ben gaat simpler.js lopen. 563 00:28:03,130 --> 00:28:06,880 En we praten over hoe je Node opgezet in een klein beetje. 564 00:28:06,880 --> 00:28:09,350 Maar nu is het gewoon de server draait. 565 00:28:09,350 --> 00:28:14,360 >> Dus een ding kunnen we proberen die al niet zijn dat spannender is kunnen we eigenlijk 566 00:28:14,360 --> 00:28:16,300 proberen om toegang te krijgen in Curl. 567 00:28:16,300 --> 00:28:20,680 Dus ik kan doen Curl, en mijn machine lokale host. 568 00:28:20,680 --> 00:28:24,600 U ziet ook deze schriftelijke als dit soms. 569 00:28:24,600 --> 00:28:29,810 Lokale host en 127.0.0.1 zijn soort van als uw computer thuis. 570 00:28:29,810 --> 00:28:33,180 Dus het is als praten met uw eigen computer. 571 00:28:33,180 --> 00:28:33,760 OK. 572 00:28:33,760 --> 00:28:36,030 >> En dan kan ik zeggen 1337. 573 00:28:36,030 --> 00:28:39,630 Dus als ik zonder deze lijn van code, het zegt hallo wereld. 574 00:28:39,630 --> 00:28:44,050 En als ik wilde dat spul zien dat had content type tekst effen of 575 00:28:44,050 --> 00:28:46,560 wat dan ook, ik kon zelfs dit hier plaatsen. 576 00:28:46,560 --> 00:28:48,810 En merk op dat het zegt OK. 577 00:28:48,810 --> 00:28:50,810 En ik heb wel tekst vlakte. 578 00:28:50,810 --> 00:28:53,140 En dan is er soort van al die andere spul dat Node zal toevoegen in 579 00:28:53,140 --> 00:28:54,440 er voor mij. 580 00:28:54,440 --> 00:28:55,700 Dat is niet super belangrijk. 581 00:28:55,700 --> 00:28:58,230 >> Ik bedoel, er zijn een soort van technische aspecten van de op dat soort zijn 582 00:28:58,230 --> 00:29:02,280 van cool om over te praten, maar om te laten zien je, ik heb ook de bevoegdheid om 583 00:29:02,280 --> 00:29:03,070 veranderen deze rond. 584 00:29:03,070 --> 00:29:06,280 Dus ik kan gewoon voeg een stelletje van dat soort dingen. 585 00:29:06,280 --> 00:29:11,780 En dan nu, als ik kijk in mijn uitvoer volgt dat. 586 00:29:11,780 --> 00:29:19,740 Dus deze headers betekenen bepaalde dingen om browsers en dat soort dingen. 587 00:29:19,740 --> 00:29:23,040 >> En headers kan in principe vertellen een browser hoe te reageren op iets. 588 00:29:23,040 --> 00:29:26,280 Als je ooit hebt gehoord van cookies voor, of als je ooit geïrriteerd bent geweest 589 00:29:26,280 --> 00:29:29,330 door een webpagina instellen van cookies, of aangezet koekje blok of 590 00:29:29,330 --> 00:29:30,320 zoiets. 591 00:29:30,320 --> 00:29:33,040 Je kunt eigenlijk stellen cookies in deze headers. 592 00:29:33,040 --> 00:29:36,990 Dus ze vertellen een browser hoe gedrag in sommige gevallen. 593 00:29:36,990 --> 00:29:37,750 OK. 594 00:29:37,750 --> 00:29:40,310 >> Dus dat was simpler.js. 595 00:29:40,310 --> 00:29:42,780 Heeft iemand enig vragen op dat broncode bestand? 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 >> Dus laten we verwijderen de r uit dat en kijk naar simple.js. 600 00:29:50,780 --> 00:29:53,010 Dus dit is vrij veel hetzelfde programma. 601 00:29:53,010 --> 00:29:56,030 Ik schreef het een beetje anders want ik wilde om te sorteren van highlight 602 00:29:56,030 --> 00:29:57,850 sommige functies van JavaScript. 603 00:29:57,850 --> 00:30:03,880 >> Dus merken dat de behandelaar functie is totaal verdwenen. 604 00:30:03,880 --> 00:30:05,800 Oh ja, heb je een vraag? 605 00:30:05,800 --> 00:30:08,200 >> PUBLIEK: Ja, de argumenten die worden doorgegeven aan die 606 00:30:08,200 --> 00:30:10,120 functie, wat zijn dat? 607 00:30:10,120 --> 00:30:12,050 >> KEVIN SCHMID: Dus dat zijn JavaScript-objecten. 608 00:30:12,050 --> 00:30:15,230 In de Node.js documentatie het zegt eigenlijk wat methoden zijn 609 00:30:15,230 --> 00:30:15,910 op hen. 610 00:30:15,910 --> 00:30:19,602 We toevallig de toegang tot deze methode genaamd schrijfkop en einde 611 00:30:19,602 --> 00:30:20,730 en dat soort dingen. 612 00:30:20,730 --> 00:30:22,590 Maar er is een hele hoop meer methodes. 613 00:30:22,590 --> 00:30:27,670 >> En bijvoorbeeld, als een van hen in het bijzonder op rec, kunt u doen 614 00:30:27,670 --> 00:30:34,540 iets als rec.method die zal u vertellen of het een HTTP te krijgen of 615 00:30:34,540 --> 00:30:36,780 HTTP POST verzoeken en dat soort dingen. 616 00:30:36,780 --> 00:30:39,100 Dus er is allerlei verschillende eigenschappen, maar ze zijn allebei 617 00:30:39,100 --> 00:30:42,560 JavaScript-objecten, en ze hebben net functies verbonden aan hen die je 618 00:30:42,560 --> 00:30:43,850 kunnen dingen schrijven. 619 00:30:43,850 --> 00:30:45,520 OK? 620 00:30:45,520 --> 00:30:49,030 >> Zo merken dat verzoek handler is volledig verdwenen. 621 00:30:49,030 --> 00:30:52,650 Maar de code die ik had in het verzoek handler is er nog steeds. 622 00:30:52,650 --> 00:30:56,520 Ik heb nog steeds deze res.writeHead en ik heb nog deze res.end. 623 00:30:56,520 --> 00:31:00,270 En wat dit is een voorbeeld van in Javascript is dit idee van een 624 00:31:00,270 --> 00:31:01,460 anonieme functie. 625 00:31:01,460 --> 00:31:04,180 en anoniem is als een passende naam voor omdat het doet letterlijk niet 626 00:31:04,180 --> 00:31:05,180 hebben een naam. 627 00:31:05,180 --> 00:31:07,900 Er is geen functie verzoek handler daar. 628 00:31:07,900 --> 00:31:10,110 >> Heeft geen naam, maar het nog steeds is het nemen van een argument. 629 00:31:10,110 --> 00:31:12,250 Dus ik heb nog rec en res. 630 00:31:12,250 --> 00:31:16,180 En ik heb nog steeds de code. 631 00:31:16,180 --> 00:31:18,930 Dit is prima JavaScript-code. 632 00:31:18,930 --> 00:31:22,540 Dus ik kan een functie verklaren zonder expliciet een naam te geven. 633 00:31:22,540 --> 00:31:24,250 Het is een beetje verwarrend in het begin. 634 00:31:24,250 --> 00:31:26,230 Er zijn een aantal als nuttige dingen dat je kunt doen met 635 00:31:26,230 --> 00:31:28,450 Deze anonieme functies. 636 00:31:28,450 --> 00:31:32,100 Heeft iemand enig vragen over dit, of is het OK gewoon om, voor nu, 637 00:31:32,100 --> 00:31:34,130 soort van gewoon accepteren dat het zal hetzelfde doen? 638 00:31:34,130 --> 00:31:36,700 639 00:31:36,700 --> 00:31:37,125 Yep? 640 00:31:37,125 --> 00:31:38,680 >> Publiek: Zijn functies eerst klasse in JavaScript? 641 00:31:38,680 --> 00:31:41,020 >> KEVIN SCHMID: Ze zijn in de eerste klasse in JavaScript. 642 00:31:41,020 --> 00:31:45,490 En weet gewoon dat deze begrippen passeren in een anonieme functie als 643 00:31:45,490 --> 00:31:49,600 dit toepassen op de JavaScript dat u kan schrijven in uw uiteindelijke project voor 644 00:31:49,600 --> 00:31:51,260 de webbrowser ook. 645 00:31:51,260 --> 00:31:56,700 Dus bijvoorbeeld in de JavaScript uw browser, het is ook een beetje evenement 646 00:31:56,700 --> 00:32:00,680 gedreven in de zin dat wat je zult hebben is wanneer de gebruiker deze klikt 647 00:32:00,680 --> 00:32:02,640 knop, ik wil dat je deze code uitvoert. 648 00:32:02,640 --> 00:32:07,070 >> Dus het is het zelfde soort ideeën van de client-side als een muisklik of ze 649 00:32:07,070 --> 00:32:09,870 muis over enkele afbeelding op uw webpagina, voer deze code. 650 00:32:09,870 --> 00:32:11,350 Die kan worden toegepast op servers. 651 00:32:11,350 --> 00:32:16,380 Dus dat is net zoiets als de spannende reden waarom is JavaScript een echt 652 00:32:16,380 --> 00:32:19,810 geschikt of sommige mensen denken dat het een geschikte taal voor dit soort 653 00:32:19,810 --> 00:32:22,530 evenement driver server omdat je Deze anonieme functies. 654 00:32:22,530 --> 00:32:26,150 Je hebt het hele idee van deze asynchrone code. 655 00:32:26,150 --> 00:32:27,060 OK. 656 00:32:27,060 --> 00:32:30,360 Iemand nog vragen? 657 00:32:30,360 --> 00:32:30,470 >> OK. 658 00:32:30,470 --> 00:32:33,440 Dus dat was simple.js. 659 00:32:33,440 --> 00:32:38,070 Dus laten we eens kijken naar een meer of een paar meer. 660 00:32:38,070 --> 00:32:42,040 Dus dit is sleep.js. 661 00:32:42,040 --> 00:32:47,160 Dus is er iemand bekend met de C-functie slaap? 662 00:32:47,160 --> 00:32:50,936 Van misschien een van de eerdere lezingen of iets dergelijks? 663 00:32:50,936 --> 00:32:54,650 >> Dus eigenlijk kan passeren denk ik een aantal seconden of als je gebruik maakt U 664 00:32:54,650 --> 00:32:57,080 slapen een aantal milliseconden of nanoseconden. 665 00:32:57,080 --> 00:33:00,450 En eigenlijk het programma zal gewoon stoppen lopen voor die tijd. 666 00:33:00,450 --> 00:33:01,280 Rechts? 667 00:33:01,280 --> 00:33:06,970 En dan zal het uiteindelijk wakker en dan zal het gewoon blijven draaien 668 00:33:06,970 --> 00:33:08,340 het programma. 669 00:33:08,340 --> 00:33:12,740 >> Dus deze server soort geeft de indruk van slapen. 670 00:33:12,740 --> 00:33:17,580 Dus merken dat we dezelfde res.writeHead 200 met de header als 671 00:33:17,580 --> 00:33:22,130 voor, maar dan zijn we dit roepen functie genaamd set timeout. 672 00:33:22,130 --> 00:33:26,170 Stel timeout is ook beschikbaar in uw webbrowser Google Chrome 673 00:33:26,170 --> 00:33:28,000 of Safari of wat dan ook. 674 00:33:28,000 --> 00:33:31,720 En eigenlijk wat het hier doet is dat het nemen van een functie. 675 00:33:31,720 --> 00:33:33,360 Let op, nogmaals, het is een anonieme functie. 676 00:33:33,360 --> 00:33:36,310 Dus dat is wel cool omdat we met behulp van een anonieme functie binnen een 677 00:33:36,310 --> 00:33:38,950 anonieme functie die kan een beetje raar. 678 00:33:38,950 --> 00:33:42,270 >> Maar het nemen van die functie, die eigenlijk te zeggen - en de manier waarop deze 679 00:33:42,270 --> 00:33:47,430 werken is in 5000 milliseconden, ik wil dat je die functie uit te voeren die 680 00:33:47,430 --> 00:33:50,830 net eindigt de reactie en schrijft hey. 681 00:33:50,830 --> 00:33:56,730 Dus dit geeft de indruk van dergelijke slapen, maar de manier waarop deze daadwerkelijk 682 00:33:56,730 --> 00:33:59,780 werkt is gaan we lopen door deze lijn zeer snel. 683 00:33:59,780 --> 00:34:01,190 We zijn net iets te schrijven. 684 00:34:01,190 --> 00:34:03,780 En dan zullen we ook doorlopen deze lijn zeer snel. 685 00:34:03,780 --> 00:34:08,620 Dus we eigenlijk niet gaan vijf seconden wachten. 686 00:34:08,620 --> 00:34:11,370 We gaan gewoon lopen deze code onmiddellijk. 687 00:34:11,370 --> 00:34:14,219 >> En dan is er, nogmaals, deze kleine gebeurtenis lus die nu heeft dit ding 688 00:34:14,219 --> 00:34:17,570 registers die in principe slechts voortdurend rond te gaan in een cirkel 689 00:34:17,570 --> 00:34:21,620 en kijken naar de klok in een enkele draad en het zeggen, heeft vijf seconden 690 00:34:21,620 --> 00:34:22,360 nog niet geslaagd? 691 00:34:22,360 --> 00:34:26,409 En dan wanneer het ziet dat de tweede de hand heeft bewoog als vijf seconden of 692 00:34:26,409 --> 00:34:29,190 wat dan ook, dan is het wakker wordt en zegt: oh, wat moet ik doen? 693 00:34:29,190 --> 00:34:30,350 Oh ik moet deze code uitvoert. 694 00:34:30,350 --> 00:34:33,110 En dan gaat lopen res.end hey. 695 00:34:33,110 --> 00:34:35,360 >> Dus nogmaals, we hier nooit te wachten. 696 00:34:35,360 --> 00:34:38,590 Dus het is niet dat deze code binnenkant van deze functie zal vijf nemen 697 00:34:38,590 --> 00:34:39,900 seconden lopen. 698 00:34:39,900 --> 00:34:43,090 Deze code zal vrij veel draaien ogenblikkelijk, althans ten opzichte 699 00:34:43,090 --> 00:34:46,139 de vijf seconden dat we aan het praten waren over vroeger eerder. 700 00:34:46,139 --> 00:34:52,100 >> Dus gewoon om dit in actie te laten zien, Ik kan doen Node.sleep.js. 701 00:34:52,100 --> 00:34:55,159 En heb ik verknoeien iets? 702 00:34:55,159 --> 00:34:56,310 Mogelijk. 703 00:34:56,310 --> 00:34:57,410 Sorry. 704 00:34:57,410 --> 00:34:59,530 Laten we eens kijken wat we kunnen doen om dit op te lossen. 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 Dus zeker gebruiken Node.js. 709 00:35:17,464 --> 00:35:19,440 Ik maak maar een grapje. 710 00:35:19,440 --> 00:35:19,570 OK. 711 00:35:19,570 --> 00:35:20,820 Slechts een sec. 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 Ik weet wat het is. 715 00:35:29,130 --> 00:35:34,440 >> Dus het probleem is dat in mijn andere tab hier was ik actief Node al op 716 00:35:34,440 --> 00:35:36,590 dat hetzelfde adres, 1337. 717 00:35:36,590 --> 00:35:43,370 Dus de fout die deze gooide, als we kijken in het echt nauw, is het adres in 718 00:35:43,370 --> 00:35:45,180 gebruiken, EADDRINUSE. 719 00:35:45,180 --> 00:35:47,970 Dus ik was al gebruik van 1337 hier. 720 00:35:47,970 --> 00:35:52,210 Dus als ik sluit deze af, en dan heb ik nu probeer dit uitvoeren, hopelijk, alles 721 00:35:52,210 --> 00:35:53,210 komt goed. 722 00:35:53,210 --> 00:35:53,440 OK. 723 00:35:53,440 --> 00:35:57,020 Dus je kunt maar een ding soort van het luisteren op een poort in een keer. 724 00:35:57,020 --> 00:35:59,660 Een andere oplossing zou zijn geweest voor mij om alleen te bewerken dat programma en maak 725 00:35:59,660 --> 00:36:02,370 het zijn als 1338 of zoiets als dat. 726 00:36:02,370 --> 00:36:04,100 >> Maar nu slaap loopt. 727 00:36:04,100 --> 00:36:06,400 Dus laten we eigenlijk proberen het uit in de browser dit keer, want het is een 728 00:36:06,400 --> 00:36:09,080 beetje saaie om te zien in een terminal. 729 00:36:09,080 --> 00:36:13,560 Dus ik ga gewoon naar die 127-adres weer op 1337. 730 00:36:13,560 --> 00:36:14,850 En als je het kan zien - 731 00:36:14,850 --> 00:36:18,050 Ik weet niet of je kunt - maar mijn browser van het nemen van een zeer, zeer lange 732 00:36:18,050 --> 00:36:20,600 tijd om te laden of als vijf seconden. 733 00:36:20,600 --> 00:36:23,460 >> En dan na dat, het eindelijk eindigde de respons. 734 00:36:23,460 --> 00:36:29,070 En je kunt het niet zien, omdat de zaak wordt bewogen over een beetje, maar als ik 735 00:36:29,070 --> 00:36:32,500 dit een beetje kleiner, je ziet het zegt he. 736 00:36:32,500 --> 00:36:35,130 Dus ik heb de hey, maar na vijf seconden. 737 00:36:35,130 --> 00:36:38,510 En het zou een beetje schoner zijn om te zien het hier op de terminal, dus ik ben 738 00:36:38,510 --> 00:36:40,980 gaan naar een doen - 739 00:36:40,980 --> 00:36:43,540 laten we hier - 740 00:36:43,540 --> 00:36:48,370 laten we Curl dat adres opnieuw met de 1337. 741 00:36:48,370 --> 00:36:50,820 En ik gewoon een soort moet zitten hier vijf seconden. 742 00:36:50,820 --> 00:36:53,760 Maar merk op dat de server kunnen nieuwe antwoorden accepteren. 743 00:36:53,760 --> 00:36:54,940 Drukt het zo hey. 744 00:36:54,940 --> 00:36:58,720 >> En om deze demo, eigenlijk wat Ik kan doen in deze andere tab - 745 00:36:58,720 --> 00:37:02,640 dus laten we zeggen dat ik dit doen in een ander tabblad, Ik ga Krul en hetzelfde te doen 746 00:37:02,640 --> 00:37:03,780 nogmaals ding. 747 00:37:03,780 --> 00:37:06,600 En ik ga proberen om deze kick jongens af op hetzelfde moment. 748 00:37:06,600 --> 00:37:08,260 Dus ik ga dit doen, en ik ben gaat hier dan om te racen en ik ben 749 00:37:08,260 --> 00:37:09,650 gaan om het opnieuw te doen. 750 00:37:09,650 --> 00:37:14,030 >> En laten we het zo maken dat je kunnen beiden zien. 751 00:37:14,030 --> 00:37:20,250 Dat een gedrukte hey en dat een afgedrukt hey helemaal aan - 752 00:37:20,250 --> 00:37:22,550 laten we het nog een keer doen dat experiment. 753 00:37:22,550 --> 00:37:25,100 Eigenlijk, laten we gebruik deze truc, als dat is OK. 754 00:37:25,100 --> 00:37:30,520 >> Dus ik ga een shell ding gebruiken kan ik in principe lopen twee exemplaren 755 00:37:30,520 --> 00:37:32,630 van dit programma in parallel. 756 00:37:32,630 --> 00:37:36,070 Dus het zal het eerste programma uit te voeren en het tweede programma in parallel. 757 00:37:36,070 --> 00:37:39,060 Dus nu als ik op Enter drukt, gaat het op dat verzoek vrij veel te maken 758 00:37:39,060 --> 00:37:40,570 diens tegelijkertijd. 759 00:37:40,570 --> 00:37:42,620 Dus laten we dit een schot. 760 00:37:42,620 --> 00:37:44,950 >> Dus nu merken dat zegt twee processen. 761 00:37:44,950 --> 00:37:50,630 En als je nieuwsgierig bent, dat 27.000 nummer is in feite het proces ID. 762 00:37:50,630 --> 00:37:52,940 En dan merken ze gedrukt hey tegelijkertijd. 763 00:37:52,940 --> 00:37:56,820 Het was niet zoals we moesten wachten vijf seconden voor een en dan daarna, 764 00:37:56,820 --> 00:37:59,640 vijf seconden later krijgen de tweede. 765 00:37:59,640 --> 00:38:03,300 Dus dat is een soort van, in sommige opzichten, het is niet echt bewijzen, maar het is 766 00:38:03,300 --> 00:38:07,390 intuïtief bewijs dat het niet alleen als vijf seconden te wachten en het blokkeren 767 00:38:07,390 --> 00:38:08,960 de hele thread. 768 00:38:08,960 --> 00:38:10,720 OK cool. 769 00:38:10,720 --> 00:38:17,850 >> Dus vroeg Aaron een vraag eerder dat was, tja, wat als we iets doen - 770 00:38:17,850 --> 00:38:18,735 Yep? 771 00:38:18,735 --> 00:38:19,051 >> PUBLIEK: Wacht. 772 00:38:19,051 --> 00:38:21,585 Hoe is dat anders dan printf buffer, hoewel? 773 00:38:21,585 --> 00:38:23,010 Niet automatisch dat doen? 774 00:38:23,010 --> 00:38:25,390 Waarom hebben we zorgen over te maken? 775 00:38:25,390 --> 00:38:26,555 >> KEVIN SCHMID: Oh, kon je zeggen dat nog een keer? 776 00:38:26,555 --> 00:38:29,510 >> PUBLIEK: Houdt niet van printf buffer doen precies hetzelfde? 777 00:38:29,510 --> 00:38:31,280 >> KEVIN SCHMID: De printf buffer? 778 00:38:31,280 --> 00:38:32,753 >> PUBLIEK: Ja. 779 00:38:32,753 --> 00:38:33,244 OK. 780 00:38:33,244 --> 00:38:40,609 Was niet in een van de quizzen ze waren praten over hoe als je gelijk printf 781 00:38:40,609 --> 00:38:42,899 iets en dan hebben deze te pauzeren een tweede, en dan heb je het lus tien 782 00:38:42,899 --> 00:38:46,530 tijden, zal het tien seconden wachten en dan printf alles samen? 783 00:38:46,530 --> 00:38:47,460 >> KEVIN SCHMID: Oh, OK. 784 00:38:47,460 --> 00:38:49,170 >> PUBLIEK: Is het hetzelfde doen ding dan in dit geval? 785 00:38:49,170 --> 00:38:52,630 >> KEVIN SCHMID: Dus de vraag was in principe in een van de voormalige quizzen 786 00:38:52,630 --> 00:38:57,200 of iets, was er een vraag die eigenlijk als je zegt afdruk f 10 787 00:38:57,200 --> 00:39:01,490 dingen tegelijk en dan sliep als in het proces van het afdrukken van die welke, 788 00:39:01,490 --> 00:39:04,850 aan het eind een of andere reden, het zou dumpen die allemaal uit op het scherm. 789 00:39:04,850 --> 00:39:06,740 Dus er is een soort van twee verschillende concepten hier. 790 00:39:06,740 --> 00:39:10,400 >> Dus ik denk dat een ding is dat in dit geval, we te maken met twee verschillende 791 00:39:10,400 --> 00:39:13,510 soort mensen de server te vragen voor dingen tegelijk. 792 00:39:13,510 --> 00:39:17,455 En de reden dat de printf soort wacht als dat en dumpt het allemaal uit 793 00:39:17,455 --> 00:39:21,760 tegelijkertijd is gerelateerd aan hoe printf soort - 794 00:39:21,760 --> 00:39:25,100 dus de manier printf is eigenlijk geïmplementeerd is het heeft in feite neer op 795 00:39:25,100 --> 00:39:28,850 praten om het besturingssysteem te schrijven dat spul op de console. 796 00:39:28,850 --> 00:39:33,460 Zodat het niet willen doen dat allemaal spullen onmiddellijk wanneer je printf zeggen 797 00:39:33,460 --> 00:39:36,260 een stukje tekst want dat kon krijgen duur als het moet 798 00:39:36,260 --> 00:39:37,340 doe dat elke keer. 799 00:39:37,340 --> 00:39:41,530 >> Dus als je printf hey, je programma misschien niet echt drukken dat 800 00:39:41,530 --> 00:39:43,040 onmiddellijk naar de console. 801 00:39:43,040 --> 00:39:46,080 Het zou kunnen zeggen, OK, schreef ik het. 802 00:39:46,080 --> 00:39:49,570 En dan soort van wachten tot je geven het een beetje meer voordat daadwerkelijk 803 00:39:49,570 --> 00:39:51,380 het uit te schrijven naar de console. 804 00:39:51,380 --> 00:39:54,040 >> Dus de reden dat dat het geval was - 805 00:39:54,040 --> 00:39:56,450 en het is een soort van niet-verwante om de slaap - 806 00:39:56,450 --> 00:40:00,060 is dat de slaap was soort van gewoon geïnjecteerd daar aantonen de 807 00:40:00,060 --> 00:40:02,480 feit dat het niet schrijven het synchroon. 808 00:40:02,480 --> 00:40:06,210 Maar de reden daarvoor is gewoon prestaties, zodat je niet hoeft te 809 00:40:06,210 --> 00:40:08,920 maken dat veel contacten het besturingssysteem. 810 00:40:08,920 --> 00:40:12,300 >> Maar hier, wat we echt proberen te doen met deze slaap ding is gewoon tonen 811 00:40:12,300 --> 00:40:17,730 dat wanneer we twee mensen een bezoek deze website, gaat het niet om te zetten 812 00:40:17,730 --> 00:40:22,310 ze in een lijn waar het gaat om te zeggen Ik moet je helpen, en toen ben ik 813 00:40:22,310 --> 00:40:25,350 helemaal klaar om je te helpen na deze vijf seconden, dan ga ik naar 814 00:40:25,350 --> 00:40:26,750 verplaatsen naar de volgende persoon. 815 00:40:26,750 --> 00:40:29,515 Dus het verzoek van de eerste persoon niet binden die gebeurtenis lus 816 00:40:29,515 --> 00:40:31,610 als dat zinvol is. 817 00:40:31,610 --> 00:40:34,980 >> Maar hier is eigenlijk een voorbeeld van iets dat zal binden 818 00:40:34,980 --> 00:40:36,090 de gebeurtenis lus. 819 00:40:36,090 --> 00:40:39,130 Dus hier is een verschrikkelijke functie om bereken de nde Fibonacci. 820 00:40:39,130 --> 00:40:43,510 Het is letterlijk het erger manier kunt u bereken de n-de Fibonacci getal. 821 00:40:43,510 --> 00:40:48,480 En dit is eigenlijk alleen maar te erkennen waar deze vandaan kwam, 822 00:40:48,480 --> 00:40:49,330 Er is eigenlijk - 823 00:40:49,330 --> 00:40:53,230 Ik bedoel, kan je proberen te gaan vinden - maar er is net een heel lange blog 824 00:40:53,230 --> 00:40:54,130 plaatsen dat iemand schreef. 825 00:40:54,130 --> 00:40:55,660 Het is als een van die Reddit dingen. 826 00:40:55,660 --> 00:40:59,650 Maar iemand bekritiseerd Node.js, en ze gebruikte dit als voorbeeld. 827 00:40:59,650 --> 00:41:03,700 Dus ik soort van wilde gewoon laten zien twee verschillende perspectieven alleen maar om 828 00:41:03,700 --> 00:41:07,320 een algemeen begrip van de concepten achter deze twee dingen. 829 00:41:07,320 --> 00:41:13,050 >> Maar dit wordt gekozen als gewoon een verschrikkelijk, vreselijk inefficiënt computationeel 830 00:41:13,050 --> 00:41:15,940 intensieve manier om het te berekenen n-de Fibonacci getal. 831 00:41:15,940 --> 00:41:21,180 Dus net als een kanttekening, waarom is het verschrikkelijk als op een bepaalde manier? 832 00:41:21,180 --> 00:41:23,210 Yep? 833 00:41:23,210 --> 00:41:25,130 >> PUBLIEK: Zeg je begint met 1000. 834 00:41:25,130 --> 00:41:27,050 1000 splitst in 999 en 998. 835 00:41:27,050 --> 00:41:28,970 Elk van deze splitst in twee dingen. 836 00:41:28,970 --> 00:41:30,890 Elk van deze splitst in twee dingen. 837 00:41:30,890 --> 00:41:31,355 >> KEVIN SCHMID: Juist. 838 00:41:31,355 --> 00:41:32,400 >> PUBLIEK: Helemaal naar beneden. 839 00:41:32,400 --> 00:41:32,840 >> KEVIN SCHMID: Precies. 840 00:41:32,840 --> 00:41:37,330 Dus gewoon te herhalen voor de camera, als ik roepen jokken op zoals 1000 of zoiets 841 00:41:37,330 --> 00:41:41,810 als dat, het is natuurlijk niet minder dan of gelijk is aan een, dus ik ga 842 00:41:41,810 --> 00:41:46,040 ga naar deze zaak anders, en dan ga ik te bellen jokken 999 plus jokken 998. 843 00:41:46,040 --> 00:41:50,290 En dan vrijwel alle van die werk dat jokken 999 doet is 844 00:41:50,290 --> 00:41:52,950 soort op dit niveau. 845 00:41:52,950 --> 00:41:55,620 Als je naar beneden gaat, is het nog overbodig dan dat, maar als je gewoon 846 00:41:55,620 --> 00:42:01,390 denk berekenen fib 998 krijgt ons vrij dicht bij jokken 999. 847 00:42:01,390 --> 00:42:05,860 Dus moeten we eigenlijk een beetje meer slim over hoe we soort hergebruiken 848 00:42:05,860 --> 00:42:07,580 deze, maar we zijn niet hergebruiken deze dingen helemaal. 849 00:42:07,580 --> 00:42:11,860 Dus je kunt je voorstellen dit gigantische, gigantische boom dat is gewoon verschrikkelijk. 850 00:42:11,860 --> 00:42:12,940 >> Maar goed, OK. 851 00:42:12,940 --> 00:42:14,040 Dus dat was fib. 852 00:42:14,040 --> 00:42:15,530 Het duurt gewoon een tijdje te lopen. 853 00:42:15,530 --> 00:42:16,510 Yep? 854 00:42:16,510 --> 00:42:17,760 >> PUBLIEK: [onverstaanbaar]. 855 00:42:17,760 --> 00:42:20,430 856 00:42:20,430 --> 00:42:22,481 >> KEVIN SCHMID: Oh, kon je herhaal de vraag? 857 00:42:22,481 --> 00:42:23,731 >> PUBLIEK: [onverstaanbaar]. 858 00:42:23,731 --> 00:42:30,840 859 00:42:30,840 --> 00:42:33,990 >> KEVIN SCHMID: Oh dus dit is gewoon code dat gaat zijn soort op de 860 00:42:33,990 --> 00:42:34,850 server-side. 861 00:42:34,850 --> 00:42:38,100 Dus dit is niet van plan te vinden in de browser of iets. 862 00:42:38,100 --> 00:42:42,160 Het is eigenlijk wat we hebben is dat wanneer de gebruiker hier vrij veel merken 863 00:42:42,160 --> 00:42:45,300 opnieuw hun verzoek, toen we een soort van een verzoek, gaan we bellen 864 00:42:45,300 --> 00:42:47,040 deze functie op de server. 865 00:42:47,040 --> 00:42:50,480 En dan zullen we het resultaat terug te krijgen van het roepen van die functie. 866 00:42:50,480 --> 00:42:52,460 En dan gaan we gewoon uitprinten het aan de gebruiker. 867 00:42:52,460 --> 00:42:54,580 De gebruiker hoeft dus niet echt te gaan met deze functie te veel. 868 00:42:54,580 --> 00:42:57,270 >> Was dat de vraag? 869 00:42:57,270 --> 00:42:58,470 Is dat logisch? 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 >> Dus nogmaals, we doen dit hele res.writeHead ding waar we uitprinten 873 00:43:04,240 --> 00:43:05,150 de header. 874 00:43:05,150 --> 00:43:09,730 En dan uiteindelijk ik het antwoord door te doen het magische getal is fib 45. 875 00:43:09,730 --> 00:43:12,100 Dus laten we gewoon deze server draaien. 876 00:43:12,100 --> 00:43:15,190 Dus ik ga een Node fib.js. doen 877 00:43:15,190 --> 00:43:17,340 Dus nu mijn fib server draait. 878 00:43:17,340 --> 00:43:21,790 >> En dan hier, ik ga een van deze doen. 879 00:43:21,790 --> 00:43:22,200 OK? 880 00:43:22,200 --> 00:43:24,960 Dus ik ga gewoon zeggen, Curl. 881 00:43:24,960 --> 00:43:32,226 Dus het gaat een tijdje duren, maar hopelijk binnenkort zal eindigen en 882 00:43:32,226 --> 00:43:35,660 het zal dat 45 afdrukken Fibonacci getal. 883 00:43:35,660 --> 00:43:36,910 >> PUBLIEK: [onverstaanbaar]. 884 00:43:36,910 --> 00:43:40,720 885 00:43:40,720 --> 00:43:42,050 >> KEVIN SCHMID: het moet gedaan te krijgen vrij snel. 886 00:43:42,050 --> 00:43:43,780 Dus moet het 5-6 seconden duren. 887 00:43:43,780 --> 00:43:48,570 Ik weet het niet, dat is gewoon V8 wordt super snel, maar in ieder geval is dit een 888 00:43:48,570 --> 00:43:52,700 zeer kort voorbeeld en met opzet inelegant van een niet-triviale 889 00:43:52,700 --> 00:43:54,200 berekening. 890 00:43:54,200 --> 00:43:56,700 Dus na een tijdje, krijgt het dit. 891 00:43:56,700 --> 00:44:02,130 >> Maar nu, wat als ik dat zelfde soort experiment als voorheen waar ik 892 00:44:02,130 --> 00:44:04,010 twee verzoeken op hetzelfde moment? 893 00:44:04,010 --> 00:44:06,990 Dus hier ga ik een Krul op dat adres, en ik ga 894 00:44:06,990 --> 00:44:08,260 naar een andere Curl doen. 895 00:44:08,260 --> 00:44:12,070 En vergeet niet, toen we dit voor de slapen server, toen hadden we het in principe 896 00:44:12,070 --> 00:44:15,320 na vijf seconden, ze vrij veel beide kwam terug recht 897 00:44:15,320 --> 00:44:16,380 rond dezelfde tijd. 898 00:44:16,380 --> 00:44:18,650 Dus het was niet bijzonder vastgebonden. 899 00:44:18,650 --> 00:44:20,290 >> Maar laten we nu proberen. 900 00:44:20,290 --> 00:44:22,370 OK, dus we kregen onze twee processen. 901 00:44:22,370 --> 00:44:24,210 Vergeet niet dat zijn de proces-id's. 902 00:44:24,210 --> 00:44:25,900 Dit gaat om een ​​beetje onhandig terwijl we kraam. 903 00:44:25,900 --> 00:44:31,340 904 00:44:31,340 --> 00:44:35,360 Dus laten we gewoon hier blijven wachten. 905 00:44:35,360 --> 00:44:37,090 >> Dus een van hen moet komen terug na zoals - 906 00:44:37,090 --> 00:44:39,190 OK, dus je kwam terug. 907 00:44:39,190 --> 00:44:43,570 Maar waarom dan niet de tweede een terug komen gewoon nog niet? 908 00:44:43,570 --> 00:44:44,389 Yep? 909 00:44:44,389 --> 00:44:49,280 >> Publiek: De server kan niets doen terwijl het berekenen van dat grote aantal. 910 00:44:49,280 --> 00:44:51,620 >> KEVIN SCHMID: Juist. 911 00:44:51,620 --> 00:44:55,395 Dus de reactie was alleen dat de server echt kan niets doen terwijl 912 00:44:55,395 --> 00:44:57,460 het is het berekenen van dat Fibonacci getal. 913 00:44:57,460 --> 00:44:59,360 Dus nu heb ik net mijn twee dingen terug. 914 00:44:59,360 --> 00:45:03,210 Maar ik denk gewoon na te denken over de code een beetje meer, hoe het werkt 915 00:45:03,210 --> 00:45:05,030 en alles. 916 00:45:05,030 --> 00:45:11,750 >> Dus deze functie hier is de code die Ik heb deze server verteld worden uitgevoerd wanneer het 917 00:45:11,750 --> 00:45:14,100 krijgt een nieuwe inkomende verzoeken. 918 00:45:14,100 --> 00:45:17,940 Dus het is gewoon te lopen door deze hele code, en dan is het gaat om te gaan 919 00:45:17,940 --> 00:45:21,120 terug naar het evenement lus en dan verder controleren op nieuwe gebeurtenissen. 920 00:45:21,120 --> 00:45:23,670 Dus eigenlijk wat we hebben gebeurt is de server 921 00:45:23,670 --> 00:45:25,080 luisteren naar nieuwe dingen. 922 00:45:25,080 --> 00:45:28,070 De eerste persoon vraagt ​​wat 45 is. 923 00:45:28,070 --> 00:45:30,490 We lopen deze code om het te berekenen. 924 00:45:30,490 --> 00:45:33,420 Deze code duurt ongeveer vijf zes seconden draaien. 925 00:45:33,420 --> 00:45:36,990 Dan gaan we terug naar het evenement lus en controleren op nieuwe aanvragen. 926 00:45:36,990 --> 00:45:42,700 >> Dit is dus een voorbeeld van hoe als u hebben dingen die zogenaamde compute 927 00:45:42,700 --> 00:45:48,140 gebonden, of gebruiken veel computationele, geen macht, maar net als zijn 928 00:45:48,140 --> 00:45:50,260 rekenintensieve - 929 00:45:50,260 --> 00:45:54,080 Ik denk dat een ding te zeggen over dit is dat deze functie volledig aan het doen is, 930 00:45:54,080 --> 00:45:56,310 voor het grootste deel, mooie nuttig werk rechts. 931 00:45:56,310 --> 00:45:59,970 De hele tijd dat die callback functie liep, was het vrij 932 00:45:59,970 --> 00:46:03,670 veel het grootste deel van zijn tijd slechts computergebruik dat n Fibonacci getal. 933 00:46:03,670 --> 00:46:05,930 >> Maar we hadden alleen een thread te behandelen. 934 00:46:05,930 --> 00:46:10,270 In de Apache-model, als twee mensen maakte het verzoek om jokken 45, we 935 00:46:10,270 --> 00:46:11,610 zou hebben gehad twee verschillende draden. 936 00:46:11,610 --> 00:46:15,060 En dan de taak van het besturingssysteem zou zijn geweest, of het gebruikersniveau 937 00:46:15,060 --> 00:46:18,660 code die de draden beheert, zou hebben geweest te snijden die op de 938 00:46:18,660 --> 00:46:23,060 CPU, of zelfs als je meerdere CPU's gehad, verdeel ze gelijkmatig over de CPU's 939 00:46:23,060 --> 00:46:26,130 zodat ze beiden afwerking ongeveer tegelijkertijd. 940 00:46:26,130 --> 00:46:31,120 >> Dus gewoon om te laten zien hoe we kunnen sorteren van - en dit is niet een totaal perfect 941 00:46:31,120 --> 00:46:34,280 oplossing, maar een soort van hoe we maak een kom hier terug en doen 942 00:46:34,280 --> 00:46:35,880 een beetje beter. 943 00:46:35,880 --> 00:46:41,540 Dus wat ik hier heb is een programma genaamd Fib C. En dit principe maakt gebruik van 944 00:46:41,540 --> 00:46:45,690 een andere een van Node modules genoemd Het Kind Process Module. 945 00:46:45,690 --> 00:46:49,210 Dus ik heb begrepen dat aan de top soort van als ik een pond zou doen onder 946 00:46:49,210 --> 00:46:51,230 kind process.h of zoiets. 947 00:46:51,230 --> 00:46:56,210 Nu heb ik toegang tot deze CP variabele die heeft al mijn functionaliteit. 948 00:46:56,210 --> 00:47:01,810 >> Dus nu wat ik doe in deze reactie handler is Ik gebruik dit programma 949 00:47:01,810 --> 00:47:04,100 dot slash fib 45. 950 00:47:04,100 --> 00:47:06,820 Dus wat ik heb gedaan - en ik ben gewoon gaan uit te stappen van dit programma voor een 951 00:47:06,820 --> 00:47:07,620 beetje - 952 00:47:07,620 --> 00:47:11,060 is Ik heb een C-programma geschreven dat berekent in principe 953 00:47:11,060 --> 00:47:12,630 n-de Fibonacci getal. 954 00:47:12,630 --> 00:47:15,960 Dus hier is gewoon een programma dat ik heb geschreven in C dat berekent. 955 00:47:15,960 --> 00:47:19,040 Ik kan het compileren, en ik kan lopen het op de opdrachtregel. 956 00:47:19,040 --> 00:47:22,150 En het gaat berekenen de 45 Fibonacci getal. 957 00:47:22,150 --> 00:47:24,510 >> Zo merkt het duurt slechts vrij veel zo lang. 958 00:47:24,510 --> 00:47:28,240 Ik waarschijnlijk zou hebben gebruikt dash 03 tot optimaliseren of iets dergelijks, 959 00:47:28,240 --> 00:47:31,050 maar ik deed gewoon als gewone compiler instellingen. 960 00:47:31,050 --> 00:47:33,260 En het drukt het uit. 961 00:47:33,260 --> 00:47:36,830 >> Maar nu, wat doe ik soort van doen? 962 00:47:36,830 --> 00:47:39,800 Oh sorry, verkeerde bestand. 963 00:47:39,800 --> 00:47:42,800 Dus ik doe hetzelfde spul met de kop als voorheen. 964 00:47:42,800 --> 00:47:45,780 Dan doe ik dit cp.exec. 965 00:47:45,780 --> 00:47:49,460 Dus wat dit gaat doen is dat het ga dit programma uit te voeren. 966 00:47:49,460 --> 00:47:51,960 Maar de manier waarop dit werkt is dat het gaat niet om te wachten op 967 00:47:51,960 --> 00:47:53,400 dat programma te voltooien. 968 00:47:53,400 --> 00:47:56,000 Het zegt gewoon eigenlijk uitvoeren van dit programma. 969 00:47:56,000 --> 00:47:58,700 Dit dus in principe typen in het opdrachtprompt soort. 970 00:47:58,700 --> 00:48:02,350 >> En dan, als je klaar bent met het, lopen deze functie. 971 00:48:02,350 --> 00:48:04,800 Dus nu we soort van krijgen geheel gerestaureerd zaak van 972 00:48:04,800 --> 00:48:06,750 alsof we niet te wachten. 973 00:48:06,750 --> 00:48:08,530 Betekent dat soort zinvol? 974 00:48:08,530 --> 00:48:08,990 Yep? 975 00:48:08,990 --> 00:48:11,060 >> PUBLIEK: [onverstaanbaar]? 976 00:48:11,060 --> 00:48:13,610 >> KEVIN SCHMID: Dus dit ook daadwerkelijk het openen van een nieuw proces om het te doen. 977 00:48:13,610 --> 00:48:19,310 Dus dit is eigenlijk, in sommige opzichten, kwaad, niet super kwaad, maar het is 978 00:48:19,310 --> 00:48:22,990 belangrijk om te zeggen dat dit soort terug te gaan naar, enerzijds, de Apache 979 00:48:22,990 --> 00:48:26,450 model waar we threads en processen doen voor elk verzoek of 980 00:48:26,450 --> 00:48:29,280 werkwijzen voor elk verzoek. 981 00:48:29,280 --> 00:48:32,090 Dus dit is een soort van analoog wat Apache doet. 982 00:48:32,090 --> 00:48:35,110 In sommige gevallen, zal het alleen maar gebruik maken van een nieuwe draad, die een beetje meer licht 983 00:48:35,110 --> 00:48:39,040 gewicht dan een proces, maar Apache kon uiteindelijk forking een nieuw proces 984 00:48:39,040 --> 00:48:43,370 dat is een soort van wat we hier doen impliciet door het doen dot slash fib 45. 985 00:48:43,370 --> 00:48:48,690 >> En dan in dat geval, we soort oplopen dezelfde kosten van processen. 986 00:48:48,690 --> 00:48:50,710 Dus dit is slechts een ding dat je kunt doen. 987 00:48:50,710 --> 00:48:52,600 Maar om dit soort lopende show. 988 00:48:52,600 --> 00:48:57,120 En dit gesprek is gewoon echt gericht op presenteren van dit soort programma's als een 989 00:48:57,120 --> 00:49:00,710 manier om verschillende perspectieven op tonen hoe servers zoals die ontwerpen. 990 00:49:00,710 --> 00:49:08,300 Dus dit wordt uitgevoerd, en dan nu als ik dat doe dit nogmaals, ik heb twee proces-id's. 991 00:49:08,300 --> 00:49:10,320 >> Laten we praten over dingen te wijzen. 992 00:49:10,320 --> 00:49:11,980 Zo merken dat ze stapsgewijs. 993 00:49:11,980 --> 00:49:12,700 Dat is cool. 994 00:49:12,700 --> 00:49:15,140 Omdat het voor 27.122. 995 00:49:15,140 --> 00:49:18,580 Maar merk nu, terug kwamen ze op ongeveer dezelfde tijd. 996 00:49:18,580 --> 00:49:23,960 >> En nu, een goede vraag te stellen over waarom was dat het geval is, wiens taak 997 00:49:23,960 --> 00:49:27,590 was het nu om een ​​soort van deze dingen soort van eerlijk spelen met elkaar 998 00:49:27,590 --> 00:49:31,350 andere deze twee gevallen van dot slash fib 45 die ik liep 999 00:49:31,350 --> 00:49:32,880 of dat Node liep? 1000 00:49:32,880 --> 00:49:36,940 Wie soort maakt het eerlijk dat ze beiden krijgen soort van evenwicht run time? 1001 00:49:36,940 --> 00:49:42,900 1002 00:49:42,900 --> 00:49:44,220 >> PUBLIEK: [onverstaanbaar]. 1003 00:49:44,220 --> 00:49:44,620 >> KEVIN SCHMID: Yeah. 1004 00:49:44,620 --> 00:49:49,740 Dus eigenlijk, als ik dot slash fib 45 of iets dergelijks, nu is het 1005 00:49:49,740 --> 00:49:53,750 soort tot het besturingssysteem omgaan met de looptijd van deze programma's. 1006 00:49:53,750 --> 00:49:56,920 En nu kan het hen plannen op verschillende CPU of het 1007 00:49:56,920 --> 00:49:58,330 kan ze plannen. 1008 00:49:58,330 --> 00:50:01,870 Het kan snijden tot het moment dat een CPU krijgt het of dat ze 1009 00:50:01,870 --> 00:50:03,330 te draaien op een CPU. 1010 00:50:03,330 --> 00:50:05,620 Dus dat is het idee achter dat. 1011 00:50:05,620 --> 00:50:07,220 Is dat zinvol voor iedereen? 1012 00:50:07,220 --> 00:50:10,950 Dus nu Node is niet echt het spelen van een deel aan het verdelen van deze taken. 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 >> Dus dat is bijna het voor voorbeelden. 1016 00:50:17,840 --> 00:50:23,370 Ik wilde gewoon een ding laten zien omdat veel van deze is tot dusver 1017 00:50:23,370 --> 00:50:27,350 niet helemaal super praktische in sommige gevallen. 1018 00:50:27,350 --> 00:50:30,970 Ik kan me voorstellen thuiskomen na deze praten en iets en zeggen als, 1019 00:50:30,970 --> 00:50:35,710 Nou ik heb soort van uit dat gepraat dat Ik kan een Fibonacci-server maken 1020 00:50:35,710 --> 00:50:37,360 mijn afstudeerproject. 1021 00:50:37,360 --> 00:50:40,770 Dus hier is gewoon soort van een voorbeeld die hopelijk zal zijn - 1022 00:50:40,770 --> 00:50:44,620 misschien niet, maar misschien - een beetje meer soort relevant voor afstudeeropdrachten en 1023 00:50:44,620 --> 00:50:46,440 vooruit denken voor dat soort dingen. 1024 00:50:46,440 --> 00:50:48,870 >> Dus dit is chat.js. 1025 00:50:48,870 --> 00:50:52,290 Dus dit is een beetje zoals sommige monster server-side code die je zou kunnen gebruiken om 1026 00:50:52,290 --> 00:50:55,700 het opzetten van een klein praatje server zoals je misschien hebt gezien op de 1027 00:50:55,700 --> 00:50:56,630 Facebook Chat of wat dan ook. 1028 00:50:56,630 --> 00:50:59,990 Dus ik zeg niet dat dit is zoals Facebook Chat, maar dit is een soort van 1029 00:50:59,990 --> 00:51:06,230 als een goed - misschien niet goed, maar misschien goed - startpunt voor een praatje 1030 00:51:06,230 --> 00:51:08,560 server voor uw website voor een afstudeerproject. 1031 00:51:08,560 --> 00:51:11,040 Dus laten we eens kijken wat het doet. 1032 00:51:11,040 --> 00:51:15,500 >> Dus we krijgen deze bijzondere zaak aan de top, deze var SIO 1033 00:51:15,500 --> 00:51:17,050 gelijk vereisen Socket.IO. 1034 00:51:17,050 --> 00:51:20,280 Dus dit is een ander ding dat het niet eigenlijk komen gebundeld met 1035 00:51:20,280 --> 00:51:22,300 Node maar u kunt installeren. 1036 00:51:22,300 --> 00:51:23,480 Het is een Node module. 1037 00:51:23,480 --> 00:51:25,670 Dus het is net als sommige uitbreiding van het knooppunt in. 1038 00:51:25,670 --> 00:51:29,220 >> SocketIO is eigenlijk heel wel cool. 1039 00:51:29,220 --> 00:51:32,550 Het is een abstractie die eigenlijk wat het doet is is het u toestaat om 1040 00:51:32,550 --> 00:51:35,770 hebben dit communicatiestroom tussen een web 1041 00:51:35,770 --> 00:51:39,430 browser en een webserver. 1042 00:51:39,430 --> 00:51:45,250 Dus voor het grootste deel tot nu toe, hebben we gehad deze zeer snel een seconde of twee 1043 00:51:45,250 --> 00:51:48,790 tweede communicatie tussen een web browser en de webserver. 1044 00:51:48,790 --> 00:51:53,310 Dus het is eigenlijk ga naar google.com, get het spul, stuur het terug, en dan 1045 00:51:53,310 --> 00:51:53,770 we klaar zijn. 1046 00:51:53,770 --> 00:51:56,560 We zijn nooit meer praten totdat de types gebruiker in iets anders. 1047 00:51:56,560 --> 00:52:01,090 >> Maar wat Socket.IO en zelfde soort dingen - en SocketIO is eigenlijk een 1048 00:52:01,090 --> 00:52:03,940 van de dingen die is gebouwd op als WebSocket dat is een soort van beschikbare 1049 00:52:03,940 --> 00:52:06,440 als onderdeel van HTML5 - 1050 00:52:06,440 --> 00:52:09,620 waarmee u deze hebt permanente dialoog. 1051 00:52:09,620 --> 00:52:13,990 En dit is zeer nuttig in een chat-server soort dingen, want het is 1052 00:52:13,990 --> 00:52:17,390 als een soort van permanente dialoog in sommige opzichten, want als je aan het chatten bent 1053 00:52:17,390 --> 00:52:21,540 met iemand, kun je nu gewoon stuur bericht onderaan de pijp, en vervolgens de 1054 00:52:21,540 --> 00:52:23,940 server kan een bericht naar beneden het stuur pijp naar de andere persoon die je bent 1055 00:52:23,940 --> 00:52:24,520 chatten met. 1056 00:52:24,520 --> 00:52:26,903 En dan kun je deze hebt wisselen als dat. 1057 00:52:26,903 --> 00:52:30,590 1058 00:52:30,590 --> 00:52:32,850 >> Dus dat is een soort van wat SocketIO is goed voor. 1059 00:52:32,850 --> 00:52:38,400 De reden dat SocketIO gebruikt WebSockets als een ding dat 1060 00:52:38,400 --> 00:52:43,980 Naast gewoon oud WebSockets, het doet ook een aantal trucs om in principe 1061 00:52:43,980 --> 00:52:45,610 maken het browser compatible. 1062 00:52:45,610 --> 00:52:50,040 Dus browsers zoals Internet Explorer helaas geen ondersteuning voor WebSockets 1063 00:52:50,040 --> 00:52:50,810 recht uit de doos. 1064 00:52:50,810 --> 00:52:55,290 Gebruikt het dus een andere vorm van koele keurige dingen met Adobe Flash, zodat 1065 00:52:55,290 --> 00:52:57,170 om cross-browser ondersteuning. 1066 00:52:57,170 --> 00:52:58,800 Dus dat is echt nuttig. 1067 00:52:58,800 --> 00:53:02,440 >> En eigenlijk, ik weet dat ik ben een beetje op tijd rijden hier, maar CS50 1068 00:53:02,440 --> 00:53:08,490 Bespreken, heb je ooit iets gezien zoals, ik weet het niet, blanco zo en zo is 1069 00:53:08,490 --> 00:53:11,030 antwoord op dit bericht of iets als dat, die functie? 1070 00:53:11,030 --> 00:53:12,250 Dat is SocketIO. 1071 00:53:12,250 --> 00:53:15,580 Dus wanneer iemand begint te typen in het bespreken vak om een ​​antwoord of maken 1072 00:53:15,580 --> 00:53:20,040 iets, uw browser ondersteunt wat is genoemd in SocketIO zendt een soort van 1073 00:53:20,040 --> 00:53:22,660 geval dat zegt iemand is antwoord op dit bericht. 1074 00:53:22,660 --> 00:53:26,110 >> Dan zegt de server, OK, wat moet ik doen? 1075 00:53:26,110 --> 00:53:29,270 Nou nu moet ik die andere jongens vertellen die op CS50 Bespreek zoek 1076 00:53:29,270 --> 00:53:31,170 op deze post dat er iemand reageert. 1077 00:53:31,170 --> 00:53:34,190 Dus dat is een soort van wat SocketIO is goed voor, deze voortdurende soort 1078 00:53:34,190 --> 00:53:35,930 stroom van dialoog. 1079 00:53:35,930 --> 00:53:37,250 OK. 1080 00:53:37,250 --> 00:53:40,060 >> Dus wat ik hier heb - en we zijn gewoon gaan naar de aansluitingen serie negeren 1081 00:53:40,060 --> 00:53:41,390 voor een klein beetje - 1082 00:53:41,390 --> 00:53:43,080 wat ik doe is dat ik een ander luisteren. 1083 00:53:43,080 --> 00:53:46,880 Dus dat is gewoon de manier waarop in Socket.IO wordt zegt laten we luisteren op deze poort. 1084 00:53:46,880 --> 00:53:50,060 En dit doe ik op de verbinding. 1085 00:53:50,060 --> 00:53:53,360 Dus dat is gewoon eigenlijk Socket IO's manier om te zeggen, als we een ontvangen 1086 00:53:53,360 --> 00:53:55,840 verband wil ik u om deze code uit te voeren. 1087 00:53:55,840 --> 00:53:59,870 >> En merk op dat in plaats van rec en res doorgegeven daar heb ik Socket. 1088 00:53:59,870 --> 00:54:03,260 En dit Socket idee is in principe is deze ding dat je kunt schrijven en lezen 1089 00:54:03,260 --> 00:54:05,750 van die heeft de gebruiker berichten mogelijk. 1090 00:54:05,750 --> 00:54:10,700 En de berichten die u zou sturen kunnen gaan door die Socket. 1091 00:54:10,700 --> 00:54:12,140 Is dat logisch? 1092 00:54:12,140 --> 00:54:14,490 Dus het is deze voortdurende ding. 1093 00:54:14,490 --> 00:54:17,820 >> Dus wat ik doe is ik noem Socket.emit. 1094 00:54:17,820 --> 00:54:20,330 En stoten neemt vrij veel twee argumenten. 1095 00:54:20,330 --> 00:54:24,100 Het eerste argument is een string net vertegenwoordigen het type 1096 00:54:24,100 --> 00:54:25,270 wat je uitzendt. 1097 00:54:25,270 --> 00:54:28,120 Dus in dit geval, heb ik gebruik deze string nieuw bericht. 1098 00:54:28,120 --> 00:54:32,670 En dat is gewoon eigenlijk te zeggen dat de aard van dit ding, wat ik 1099 00:54:32,670 --> 00:54:34,750 verzenden, is een nieuw bericht. 1100 00:54:34,750 --> 00:54:38,460 Zo kunt u voor specifieke soorten luisteren als nieuw bericht of wat dan ook 1101 00:54:38,460 --> 00:54:39,960 met stip op. 1102 00:54:39,960 --> 00:54:44,570 >> Zo verbinding en gebruiker gestuurd daar, als je kijkt naar waar we noemen stip op, 1103 00:54:44,570 --> 00:54:48,150 dat zijn andere snaren die vertegenwoordigen soorten gebruikers berichten. 1104 00:54:48,150 --> 00:54:52,060 Het is dus in principe kun je deze uitstoten hebben een van deze boodschap typen en 1105 00:54:52,060 --> 00:54:55,520 dan is er iets te doen in reactie op een van deze boodschap typen 1106 00:54:55,520 --> 00:54:57,640 >> Dus ik ben emitting dit nieuwe bericht. 1107 00:54:57,640 --> 00:55:00,540 We gaan connections.push negeren voor een tweede. 1108 00:55:00,540 --> 00:55:03,360 Maar dan zeg ik, Socket.on gebruiker gestuurd. 1109 00:55:03,360 --> 00:55:07,540 Dus nu is het is net zoiets als wanneer de gebruiker stuurt me een bericht, ik wil 1110 00:55:07,540 --> 00:55:09,240 u deze code uitvoert. 1111 00:55:09,240 --> 00:55:12,080 En merk op dat die anonieme functie neemt in deze variabele 1112 00:55:12,080 --> 00:55:16,300 genaamd data die in feite gaat de boodschap van de gebruiker hebben. 1113 00:55:16,300 --> 00:55:20,700 >> Dus laten we nu soort gepraat over de aansluitingen array. 1114 00:55:20,700 --> 00:55:24,590 Dus dit is ontworpen voor een chat-client waar in principe iedereen is een beetje in 1115 00:55:24,590 --> 00:55:25,950 dezelfde chatroom. 1116 00:55:25,950 --> 00:55:29,640 Dus eigenlijk, wat we nodig hebben om te blijven rond is enkele array die in principe 1117 00:55:29,640 --> 00:55:33,170 vertegenwoordigt alle mensen chatten in sommige opzichten, als dat zinvol is. 1118 00:55:33,170 --> 00:55:33,340 Rechts? 1119 00:55:33,340 --> 00:55:37,190 Omdat we moeten weten wie die jongens zijn zo kunnen we ze de berichten te verzenden 1120 00:55:37,190 --> 00:55:39,140 dat andere mensen naar ons te sturen. 1121 00:55:39,140 --> 00:55:44,440 >> Dus wat deze code doet is wanneer de gebruiker stuurt een bericht - dat is de aard van de 1122 00:55:44,440 --> 00:55:45,300 het evenement - 1123 00:55:45,300 --> 00:55:47,120 we gaan deze code uitvoert. 1124 00:55:47,120 --> 00:55:51,240 En wat we doen is dat we lopen door deze array die we connecties hebben genoemd. 1125 00:55:51,240 --> 00:55:54,390 En vrijwel voor elke verbinding behalve degene die is van ons, dat is 1126 00:55:54,390 --> 00:55:59,520 wat deze code zegt, sturen we een nieuwe bericht met dat bijgevoegde bericht 1127 00:55:59,520 --> 00:56:01,210 gegevens. 1128 00:56:01,210 --> 00:56:04,880 >> Dus als je hier ziet, wat ik deed toen de gebruiker in feite maakt een nieuwe 1129 00:56:04,880 --> 00:56:08,560 verbinding is ik heb toegevoegd met de JavaScript.push methode, dit 1130 00:56:08,560 --> 00:56:12,100 eigenlijk gewoon zeggen als toe te voegen dat Socket als waarde in 1131 00:56:12,100 --> 00:56:13,900 onze connecties array. 1132 00:56:13,900 --> 00:56:20,560 Dus nu wanneer deze code wordt uitgevoerd, zal het dingen te sturen naar die bijzondere 1133 00:56:20,560 --> 00:56:22,020 verbindingen. 1134 00:56:22,020 --> 00:56:26,980 Dus dit kan een goed uitgangspunt zijn voor het maken van een praatje server 1135 00:56:26,980 --> 00:56:28,250 of iets dergelijks. 1136 00:56:28,250 --> 00:56:33,315 >> En de aard van de koele ding is dat de code die u ziet hier voor zoals op-en 1137 00:56:33,315 --> 00:56:36,390 uitstoten en dat soort dingen is hetzelfde soort van JavaScript-code die je zou 1138 00:56:36,390 --> 00:56:39,260 schrijven in de browser te interageren met de server. 1139 00:56:39,260 --> 00:56:42,480 Dus dat is de reden waarom SocketIO is een soort van netjes en bruikbaar op die manier. 1140 00:56:42,480 --> 00:56:45,680 1141 00:56:45,680 --> 00:56:49,250 >> Oh en nog een ding echt snel. 1142 00:56:49,250 --> 00:56:55,970 Er was een CS50 afstudeerproject vorig jaar dat in principe uitgevoerd een praatje 1143 00:56:55,970 --> 00:56:57,840 server in Node.js. 1144 00:56:57,840 --> 00:57:01,350 Ik denk dat het Harvardchats.org maar ik ben niet - 1145 00:57:01,350 --> 00:57:02,940 OK. 1146 00:57:02,940 --> 00:57:06,190 Ik weet niet zeker wat de URL is, maar Ik kan achteraf sturen dat uit. 1147 00:57:06,190 --> 00:57:09,260 Maar het is wel cool wat je kunt doen met Node.js. 1148 00:57:09,260 --> 00:57:14,680 >> Dus ik hoop dat, in het algemeen, hebben jullie een goed gevoel van wat Node.js is nuttig 1149 00:57:14,680 --> 00:57:17,870 voor en hoe je zou misschien van toepassing om je afstudeerproject. 1150 00:57:17,870 --> 00:57:21,050 Ik zal sturen wat meer middelen samen met deze. 1151 00:57:21,050 --> 00:57:23,170 En dank u voor uw komst. 1152 00:57:23,170 --> 00:57:23,610 Dank u. 1153 00:57:23,610 --> 00:57:27,168 >> [Applaus]