1 00:00:00,000 --> 00:00:08,350 2 00:00:08,350 --> 00:00:09,710 >> KEVIN SCHMID: Hello everybody. 3 00:00:09,710 --> 00:00:12,640 Welkom by die CS50 seminaar op Node.js. 4 00:00:12,640 --> 00:00:13,955 My naam is Kevin. 5 00:00:13,955 --> 00:00:15,580 Ek is 'n CS50 TF. 6 00:00:15,580 --> 00:00:17,650 En ek is soort van soos baie opgewonde oor hierdie seminaar. 7 00:00:17,650 --> 00:00:20,430 Ek dink Node.js is baie cool. 8 00:00:20,430 --> 00:00:24,200 Ek hoop dat hierdie seminaar gebruik kan word as 'n goeie, dink ek, springplank vir 9 00:00:24,200 --> 00:00:26,380 sommige van jou finale projekte indien jy belangstel in die gebruik van 10 00:00:26,380 --> 00:00:27,630 iets soos Node.js. 11 00:00:27,630 --> 00:00:29,770 12 00:00:29,770 --> 00:00:33,320 >> Ons sal soort van begin om die seminaar af deur net praat oor 'n bietjie van die 13 00:00:33,320 --> 00:00:36,970 soort agtergrond scalability perspektiewe van Node.js, en dan 14 00:00:36,970 --> 00:00:39,240 ons sal beweeg na 'n paar kode voorbeelde. 15 00:00:39,240 --> 00:00:42,340 En Ek sal die kode op 'n webwerf het, en jy kan kyk na die kode. 16 00:00:42,340 --> 00:00:45,475 En ná die seminaar, sal ek soort van talk oor hoe jy kan 'Node.js 17 00:00:45,475 --> 00:00:48,220 op jou rekenaar. 18 00:00:48,220 --> 00:00:48,710 >> OK. 19 00:00:48,710 --> 00:00:49,760 So laat ons begin. 20 00:00:49,760 --> 00:00:53,700 So ek dink ek wil net om te praat oor web bedieners, regtig, eerste. 21 00:00:53,700 --> 00:00:59,730 En hierdie bespreking te begin, het ek basies 'n diagram wat uit 22 00:00:59,730 --> 00:01:04,269 die handboek gebruik vir CS61, wat basies dui die interaksie 23 00:01:04,269 --> 00:01:08,510 tussen 'n kliënt proses, soos jou web leser of soos jou doel kliënt of 24 00:01:08,510 --> 00:01:11,340 iets soos dit, en 'n web bediener. 25 00:01:11,340 --> 00:01:15,150 So hierdie soort lyk soortgelyk aan die prentjie wat jy sien in lesing oor 26 00:01:15,150 --> 00:01:19,270 Woensdag waar basies het ons het 'n paar kliënt proses soos Google Chrome. 27 00:01:19,270 --> 00:01:22,980 >> En dan stap een is die kliënt stuur 'n versoek. 28 00:01:22,980 --> 00:01:27,510 So wat kan iets soos goed laat wees besoek, weet ek nie, CS50.net. 29 00:01:27,510 --> 00:01:29,320 So reik ons ​​dat versoek. 30 00:01:29,320 --> 00:01:34,280 En nie almal onthou nie die naam van die die protokol wat bepaal hoe dit 31 00:01:34,280 --> 00:01:35,610 versoek gestruktureer moet word? 32 00:01:35,610 --> 00:01:36,382 Yep. 33 00:01:36,382 --> 00:01:37,650 >> Publiek: [onhoorbaar]. 34 00:01:37,650 --> 00:01:38,150 >> KEVIN SCHMID: Presies. 35 00:01:38,150 --> 00:01:40,100 So dit is soos HTTP, reg? 36 00:01:40,100 --> 00:01:44,720 So basies die spesifikasies vir hoe daardie versoek moet eintlik gelê word 37 00:01:44,720 --> 00:01:47,450 uit, want op die einde van die dag, wat versoek is eintlik net graag 'n 38 00:01:47,450 --> 00:01:50,240 string wat basies sê ek wil dit. 39 00:01:50,240 --> 00:01:53,580 En die spesifikasie want dit is HTTP. 40 00:01:53,580 --> 00:01:55,270 So dit is soos 'n protokol. 41 00:01:55,270 --> 00:01:57,920 >> So dan is die bediener ontvang daardie versoek. 42 00:01:57,920 --> 00:02:01,610 So julle ouens het 'n web bediener geïnstalleer in die CS50 toestel. 43 00:02:01,610 --> 00:02:02,460 Dit is Apache. 44 00:02:02,460 --> 00:02:06,230 En hierdie week wanneer jy werk op die probleem die sewe, sal jy eintlik werk 45 00:02:06,230 --> 00:02:08,160 met die web-bediener. 46 00:02:08,160 --> 00:02:12,380 So die bediener ontvang wat versoek en dan moet dit soort krap sy 47 00:02:12,380 --> 00:02:15,090 kop en soos sê goed wat doen ek met hierdie? 48 00:02:15,090 --> 00:02:20,060 >> So op grond van wat dit besluit om te doen, dan dit het 'n soort te kontak 49 00:02:20,060 --> 00:02:20,730 van die hulpbron. 50 00:02:20,730 --> 00:02:23,700 En dit kan 'n bron wees baie verskillende dinge. 51 00:02:23,700 --> 00:02:26,810 Vir een, kan dit net soos 'n statiese HTML-lêer. 52 00:02:26,810 --> 00:02:29,820 So dit kan net wees soos 'n paar HTML wat is soos vir 53 00:02:29,820 --> 00:02:31,100 jou persoonlike webwerf. 54 00:02:31,100 --> 00:02:35,360 Dit kan 'n statiese lêer soos 'n beeld wees of soos 'n film wat jy het. 55 00:02:35,360 --> 00:02:37,660 Dit kan selfs om te praat om 'n soort van databasis 56 00:02:37,660 --> 00:02:39,530 soos 'n MySQL databasis. 57 00:02:39,530 --> 00:02:43,910 Daarom is dit nie altyd om te kommunikeer met 'n bron nie, maar in 58 00:02:43,910 --> 00:02:45,700 sommige gevalle, dit kan. 59 00:02:45,700 --> 00:02:47,800 >> So dan wat dit gaan doen Na dit is dit gaan 60 00:02:47,800 --> 00:02:49,430 terug te stuur om die reaksie. 61 00:02:49,430 --> 00:02:53,130 En die reaksie, want dit is ook bepaal deur HTTP. 62 00:02:53,130 --> 00:02:54,830 So dan is die kliënt kan dit ontvang het. 63 00:02:54,830 --> 00:02:56,740 Dit kan dit uitmekaar skeur en verwerk dit. 64 00:02:56,740 --> 00:03:00,900 En dan kry jy 'n webblad soos Google of CS50.net of 65 00:03:00,900 --> 00:03:02,240 alles wat jy het om te. 66 00:03:02,240 --> 00:03:03,100 OK? 67 00:03:03,100 --> 00:03:06,080 >> So dit is die basiese interaksie wat ons gaan word behandel. 68 00:03:06,080 --> 00:03:08,770 En ons is pretty much gaan wees fokus op hierdie deel van die 69 00:03:08,770 --> 00:03:10,640 interaksie, die bediener. 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 Enigiemand enige vrae so ver? 73 00:03:15,500 --> 00:03:17,720 OK. 74 00:03:17,720 --> 00:03:22,430 >> So as ons gesê het, die web bediener ontvang hierdie HTTP versoek en dan reik hierdie 75 00:03:22,430 --> 00:03:24,760 HTTP reaksie. 76 00:03:24,760 --> 00:03:29,100 En soos ons gepraat oor voordat die CS50 toestel web bediener is Apache. 77 00:03:29,100 --> 00:03:32,490 So wanneer jy ouens werk op P die sewe, jy gaan om te werk met die 78 00:03:32,490 --> 00:03:34,120 Apache web server. 79 00:03:34,120 --> 00:03:37,890 Jy sal nooit weer hoef te werk regtig met Apache direk te veel. 80 00:03:37,890 --> 00:03:41,920 Jy soort instel Apache 'n bietjie As jy die virtuele gasheer of 81 00:03:41,920 --> 00:03:44,970 die v leërskare, en ons kry aan dié in 'n bietjie. 82 00:03:44,970 --> 00:03:50,620 >> Maar basies, die Apache webbediener stel om te werk met PHP soort 83 00:03:50,620 --> 00:03:51,730 van uit die boks. 84 00:03:51,730 --> 00:03:56,170 So wat werklik gebeur, is wanneer jy gaan om een ​​van jou webwerwe soos, sê, 85 00:03:56,170 --> 00:04:00,360 plaaslike gasheer streep jeug of iets, is jou leser stuur wat 86 00:04:00,360 --> 00:04:04,330 versoek, en dan Apache sit daar en figure uit te doen met dit. 87 00:04:04,330 --> 00:04:08,840 En die aksie is om uit te voer wat die kode in jeug en 88 00:04:08,840 --> 00:04:11,330 stuur dit dan af terug. 89 00:04:11,330 --> 00:04:15,640 So daar is nie. 90 00:04:15,640 --> 00:04:16,980 So het ons soort van gepraat het oor hierdie. 91 00:04:16,980 --> 00:04:21,990 So dit kan net dien 'n statiese lêer of hardloop 'n PHP-kode en dan kwessie 92 00:04:21,990 --> 00:04:23,510 die reaksie. 93 00:04:23,510 --> 00:04:27,670 >> So dan is 'n algemene vraag wat kan kom up is goed, hoe gaan ons nie regtig 94 00:04:27,670 --> 00:04:31,750 met die feit dat verskeie gebruikers op dieselfde tyd? 95 00:04:31,750 --> 00:04:36,930 So dink as jy 'n webblad is skriftelik bediener, as jy 'n web bediener wat 96 00:04:36,930 --> 00:04:39,900 jy het probeer in om iets te skryf soos C of iets soos dit, 97 00:04:39,900 --> 00:04:45,150 basies kan jy dink oor hoe daar kon 'n soort van die kode wees dat 98 00:04:45,150 --> 00:04:49,330 sou die versoek ontvang nie, maar dan dit het al hierdie werk op om dit te doen. 99 00:04:49,330 --> 00:04:53,060 Dit mag het om, byvoorbeeld, kontak die databasis of iets soos dit. 100 00:04:53,060 --> 00:04:53,300 Reg? 101 00:04:53,300 --> 00:04:56,010 En dan is dit dat die soort doen van die verwerking en dan 102 00:04:56,010 --> 00:04:57,060 terug gestuur het om die reaksie. 103 00:04:57,060 --> 00:04:58,950 So dit is soos die hoë vlak oorsig. 104 00:04:58,950 --> 00:05:04,210 >> Maar dit is nie onmiddellik duidelik hoe jy kan doen wat so dat twee mense of 105 00:05:04,210 --> 00:05:09,040 selfs 1000 mense kan werk met jou web bediener op dieselfde tyd. 106 00:05:09,040 --> 00:05:14,880 So die oplossing wat Apache gebruik is drade of prosesse genoem. 107 00:05:14,880 --> 00:05:16,770 So jy dalk gehoor het van hierdie terme voor. 108 00:05:16,770 --> 00:05:22,190 Dit is OK as jy nie, maar dink net oor drade of prosesse as maniere vir 109 00:05:22,190 --> 00:05:26,290 'n bedryfstelsel of 'n gebruiker program of iets of 'n web bediener 110 00:05:26,290 --> 00:05:28,810 om soort van voer verskeie dinge gelyktydig. 111 00:05:28,810 --> 00:05:31,760 So kan jy die term gehoor het soos 'n draad van die uitvoering. 112 00:05:31,760 --> 00:05:34,140 So dit is soort van soos jy soort van multitasking. 113 00:05:34,140 --> 00:05:37,710 >> En as jy dit gesien het op die boks van jou laptop, of iets soos dit, 114 00:05:37,710 --> 00:05:43,040 multicore, wat jy kan doen, is wat jy kan hardloop twee verskillende drade op verskillende 115 00:05:43,040 --> 00:05:46,700 dele van die CPU, sodat hulle kan werklik gebeur op dieselfde tyd. 116 00:05:46,700 --> 00:05:48,100 So, dit is werklik 'n kragtige. 117 00:05:48,100 --> 00:05:52,270 En dit is 'n soort van Apache se oplossing vir hierdie probleem. 118 00:05:52,270 --> 00:05:57,900 >> So is daar soort van soos enige kwessies met hierdie benadering al? 119 00:05:57,900 --> 00:05:59,870 So ek dink ek soort van daar geskryf het. 120 00:05:59,870 --> 00:06:03,440 Maar beide van hulle soort gebruik om 'n baie van die geheue. 121 00:06:03,440 --> 00:06:07,490 Dit is baie duur om te skep 'n draad of 'n proses. 122 00:06:07,490 --> 00:06:11,750 >> En 'n deel van die redenasie is dat net soos wanneer jy loop 'n C program 123 00:06:11,750 --> 00:06:15,090 soos jou hoof en dan dat oproepe 'n ander funksie, wat 124 00:06:15,090 --> 00:06:16,520 'n soort van stapel. 125 00:06:16,520 --> 00:06:19,910 So drade vereis ook 'n heeltemal aparte stapel wat 126 00:06:19,910 --> 00:06:21,220 kan baie groot. 127 00:06:21,220 --> 00:06:25,170 En as jy jou kan voorstel met ton van die gebruikers op jou webwerf, sou jy 128 00:06:25,170 --> 00:06:26,280 'n baie verskillende drade. 129 00:06:26,280 --> 00:06:28,230 Dit is 'n baie stapels te bestuur en te onderhou. 130 00:06:28,230 --> 00:06:31,280 So dit is 'n groot geheue verbruik. 131 00:06:31,280 --> 00:06:35,650 >> En dan ook, kom ons sê jy het net een CPU, of kom ons sê jy het ' 132 00:06:35,650 --> 00:06:38,460 meer drade as jy diegene multicores. 133 00:06:38,460 --> 00:06:38,730 Reg? 134 00:06:38,730 --> 00:06:43,280 So kom ons sê jy het 10 drade en jy net vyf CPUs het. 135 00:06:43,280 --> 00:06:46,260 Jy soort van hierdie ding om te doen waar oorskakel tussen die huidige 136 00:06:46,260 --> 00:06:49,090 een wat loop nie omdat jy kan nie al 10 hardloop in 'n keer. 137 00:06:49,090 --> 00:06:50,980 En dit is bekend as 'n konteks skakelaar. 138 00:06:50,980 --> 00:06:54,260 En die term het eintlik 'n paar verskillende kontekste, maar laat ons net 139 00:06:54,260 --> 00:06:56,620 dink aan dit as skakel tussen twee drade. 140 00:06:56,620 --> 00:06:59,730 Dit kan redelik duur wees, want basies wat jy hoef te doen is om jou 141 00:06:59,730 --> 00:07:03,340 het om te stop wat jy doen nie, behalwe die van daardie hardloop draad, en 142 00:07:03,340 --> 00:07:05,440 dan oor te skakel na 'n ander plek. 143 00:07:05,440 --> 00:07:09,420 >> So het almal soort van sien motivering van waarom drade en 144 00:07:09,420 --> 00:07:12,030 prosesse dalk 'n bietjie lywige? 145 00:07:12,030 --> 00:07:13,840 En het jy 'n 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 Enigiemand enige vrae? 149 00:07:18,090 --> 00:07:19,620 OK. 150 00:07:19,620 --> 00:07:26,720 >> So as ons 'n stap terug vir 'n tweede, daar is soort van soos 'n 151 00:07:26,720 --> 00:07:30,350 waarneming dat ons kan maak oor 'n baie web programme. 152 00:07:30,350 --> 00:07:34,810 En dit is regtig so baie van hulle eintlik nie doen nie baie bruikbaar nie 153 00:07:34,810 --> 00:07:37,140 werk binnekant van 'n draad. 154 00:07:37,140 --> 00:07:41,170 So het iemand begin op P die sewe nie? 155 00:07:41,170 --> 00:07:45,650 So wil jy dalk beskryf sommige van die dele? 156 00:07:45,650 --> 00:07:47,850 Het jy aanmelding gewerk of iets soos dit? 157 00:07:47,850 --> 00:07:49,330 >> Publiek: No 158 00:07:49,330 --> 00:07:49,780 >> KEVIN SCHMID: OK. 159 00:07:49,780 --> 00:07:50,150 Never mind. 160 00:07:50,150 --> 00:07:50,900 Jammer. 161 00:07:50,900 --> 00:07:55,790 Maar basies, in die P stel, is jy gaan word om 'n baie soort van 162 00:07:55,790 --> 00:07:59,760 navrae aan 'n databasis 'n paar te kry inligting uit die databasis. 163 00:07:59,760 --> 00:08:03,330 En wat jou kode is gaan doen, wat dit Apache proses of 164 00:08:03,330 --> 00:08:06,030 dat Apache draad gaan om te doen terwyl dit het te kontak die 165 00:08:06,030 --> 00:08:08,990 databasis is dit soort van gaan wees sit daar en dit gaan wees 166 00:08:08,990 --> 00:08:12,130 wag vir die databasis te antwoord. 167 00:08:12,130 --> 00:08:16,290 >> Nou wat dalk nie klink soos so 'n groot gaan omdat die databasis is op jou 168 00:08:16,290 --> 00:08:18,240 CS50 toestel, reg? 169 00:08:18,240 --> 00:08:22,930 Maar daar is 'n soort van netwerk latency daar omdat dit nou die web 170 00:08:22,930 --> 00:08:26,830 bediener het sy eie versoek uit te reik na Die databasis met die te kommunikeer 171 00:08:26,830 --> 00:08:29,520 databasis en dan kry dat inligting terug. 172 00:08:29,520 --> 00:08:33,190 Dus is dit nou soos goed wag vir my, ek is gaan om te gaan kry iets uit die 173 00:08:33,190 --> 00:08:35,770 databasis en dan is daar 'n baie wag aangaan. 174 00:08:35,770 --> 00:08:36,870 Is wat sin maak? 175 00:08:36,870 --> 00:08:38,580 >> En vir 'n paar dinge wat dit is nie so sleg nie. 176 00:08:38,580 --> 00:08:41,950 As dit net moet, byvoorbeeld, toegang geheue, dit is nie soos 177 00:08:41,950 --> 00:08:44,100 aaklige I / O latency. 178 00:08:44,100 --> 00:08:47,110 En as ek sê, I / O latency, wat ek verwys is, soos enige soort van soos 179 00:08:47,110 --> 00:08:48,290 insette uitset. 180 00:08:48,290 --> 00:08:52,950 Maar om toegang te verkry om 'n lêer op die skyf, soos As ek wou die statiese HTML te dien 181 00:08:52,950 --> 00:08:57,850 lêer wat op my webblad of iets soos dit, ek soort van moet 182 00:08:57,850 --> 00:09:02,310 stop vir 'n bietjie, lees die lêer in van die skyf, en dan in 183 00:09:02,310 --> 00:09:04,400 dat die proses Ek wag. 184 00:09:04,400 --> 00:09:06,700 Ek doen nuttige werk. 185 00:09:06,700 --> 00:09:11,270 >> Dit is nie waar van alles nie, maar dit is algemeen in programme soos P stel 186 00:09:11,270 --> 00:09:13,960 sewe en 'n baie aansoeke dat jy nie 187 00:09:13,960 --> 00:09:15,440 eintlik veel denke. 188 00:09:15,440 --> 00:09:19,090 En as ek sê dink, ek bedoel computational werk. 189 00:09:19,090 --> 00:09:23,270 So computational werk kan iets wees soos, sê, jy wou 190 00:09:23,270 --> 00:09:26,590 skryf 'n web bediener wat net bereken die de Fibonacci getal. 191 00:09:26,590 --> 00:09:29,300 Dit klink nie soos 'n besonder pret web bediener. 192 00:09:29,300 --> 00:09:34,220 Soos ek sou nie verwag dat die site te wees die volgende Facebook, maar dit is 'n paar 193 00:09:34,220 --> 00:09:35,610 soort van computational werk. 194 00:09:35,610 --> 00:09:39,570 >> En jy kan dink vervang wat met 'n ander soort van interessante 195 00:09:39,570 --> 00:09:43,070 computational werk. 196 00:09:43,070 --> 00:09:46,050 Kom ons sê jy is iets skryf wat bereken is om die grade van 197 00:09:46,050 --> 00:09:49,170 skeiding tussen twee mense of iets soos dit. 198 00:09:49,170 --> 00:09:51,860 So wat nie behels 'n soort berekening, reg? 199 00:09:51,860 --> 00:09:56,630 En selfs dan, om te doen wat jy nog 'n baie wag om te doen vir miskien 200 00:09:56,630 --> 00:09:59,550 jy het 'n databasis te kyk om navraag te up wat is vriende met wie of 201 00:09:59,550 --> 00:10:00,600 iets soos dit. 202 00:10:00,600 --> 00:10:03,510 So is daar dat die soort van idee van numeriese werk. 203 00:10:03,510 --> 00:10:05,260 Is wat sin maak? 204 00:10:05,260 --> 00:10:08,258 Het enige iemand enige vrae? 205 00:10:08,258 --> 00:10:11,960 >> Ag, en ek dink ek het chat bedieners daar omdat chat bedieners is soort 206 00:10:11,960 --> 00:10:13,240 nog 'n goeie voorbeeld hiervan. 207 00:10:13,240 --> 00:10:15,250 'N chat server nie veel te dink nie. 208 00:10:15,250 --> 00:10:18,350 Dit het net om te wag vir mense om te boodskappe stuur en dan wanneer 209 00:10:18,350 --> 00:10:19,800 hulle nie, hulle stuur. 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 >> So net om weer te vat, Apache en soortgelyke web bedieners soos daardie vurk 'n 213 00:10:28,180 --> 00:10:31,470 baie van die drade en prosesse wat soort van verkwistende kan wees. 214 00:10:31,470 --> 00:10:37,530 So ek dink die vraag wat kan kom van wat ons nodig het 215 00:10:37,530 --> 00:10:39,610 verskeie drade en prosesse? 216 00:10:39,610 --> 00:10:41,890 Wat as ons net een gehad? 217 00:10:41,890 --> 00:10:45,710 >> So laat se soort van 'n skildery van wat hierdie sou lyk. 218 00:10:45,710 --> 00:10:47,810 So laat ons gebruik net een draad. 219 00:10:47,810 --> 00:10:48,660 OK? 220 00:10:48,660 --> 00:10:52,790 So dink net dit met een draad. 221 00:10:52,790 --> 00:10:56,600 >> Kom ons dink ons ​​is nie regtig doen dat baie nuttig - en wanneer ek sê 222 00:10:56,600 --> 00:10:59,450 nuttig, ek bedoel computational werk - 223 00:10:59,450 --> 00:11:01,130 in die verskeie drade voor. 224 00:11:01,130 --> 00:11:04,180 So laat se soort konsolideer alles in een draad. 225 00:11:04,180 --> 00:11:07,780 So wat as ons het 'n draad wat soort net gaan rond in die loop en 226 00:11:07,780 --> 00:11:10,880 voortdurend tjeks het iets nuwe gebeur. 227 00:11:10,880 --> 00:11:15,130 So byvoorbeeld, iets nuuts gebeur kan beteken ek het iets terug van 228 00:11:15,130 --> 00:11:19,310 die databasis, of iemand gestuur my 'n nuwe HTTP versoek. 229 00:11:19,310 --> 00:11:22,290 So dit is soort van gebeure dit gebeur, reg? 230 00:11:22,290 --> 00:11:26,130 >> En dan wat ek kan doen wanneer daardie nuwe dinge gebeur, is in dieselfde draad 231 00:11:26,130 --> 00:11:30,120 van die uitvoering, hierdie enkele draad van uitvoering, kan ek 'n paar kode noem dat 232 00:11:30,120 --> 00:11:32,410 sou daardie spesifieke ding hanteer. 233 00:11:32,410 --> 00:11:36,640 So byvoorbeeld, as ek iets terug uit die databasis, kan ek draai my 234 00:11:36,640 --> 00:11:40,960 klein computational deel van dit wat eintlik net berei die ding te 235 00:11:40,960 --> 00:11:42,620 terug te stuur na die gebruiker. 236 00:11:42,620 --> 00:11:46,710 So doen dat die soort van sin maak? 237 00:11:46,710 --> 00:11:49,940 >> Maar wat is regtig die implikasies van hierdie? 238 00:11:49,940 --> 00:11:50,660 Reg? 239 00:11:50,660 --> 00:11:53,730 Want ons het geskryf 'n baie van die kode dat - 240 00:11:53,730 --> 00:11:58,330 en ek is net gaan om voort te spring in die skyfies as dit is OK. 241 00:11:58,330 --> 00:12:00,930 So as jy nie omgee nie, ek is net gaan 'n stap terug te neem. 242 00:12:00,930 --> 00:12:03,410 So hierdie soort ding is genoem 'n gebeurtenis lus. 243 00:12:03,410 --> 00:12:04,070 OK? 244 00:12:04,070 --> 00:12:07,240 En dit is soort van die basiese idee agter Node.js. 245 00:12:07,240 --> 00:12:11,240 >> So, wat Node.js is regtig doen as 'n web bediener is daar is 'n enkele draad 246 00:12:11,240 --> 00:12:14,850 wat basies gaan om in 'n lus soos 'n terwyl een soort onder 247 00:12:14,850 --> 00:12:18,510 die kap van Node.js wat voortdurend nagaan, het ons nuwe dinge ontvang? 248 00:12:18,510 --> 00:12:22,720 En dan sal dit loop hanteerders dat jy die opstel van. 249 00:12:22,720 --> 00:12:26,720 Maar 'n goeie vraag om te vra is, hoe kan ons maak dit gebeur 250 00:12:26,720 --> 00:12:28,090 met bestaande dinge? 251 00:12:28,090 --> 00:12:32,440 >> So ek het 'n lyn van C kode wat basies lyk soos dit is die opening van 'n 252 00:12:32,440 --> 00:12:33,060 lêer, reg? 253 00:12:33,060 --> 00:12:36,090 Ek Sy het net kom uit met 'n album. 254 00:12:36,090 --> 00:12:39,600 So ek het haar 'n nuwe lêer oop te maak. 255 00:12:39,600 --> 00:12:43,810 So die manier waarop ons C-kode vir die bedryf - 256 00:12:43,810 --> 00:12:47,890 en ek dink die rede hoekom ek verkies lêers want dit is 'n soort van die mate 257 00:12:47,890 --> 00:12:52,000 van die I / O werk wat ons in C gedoen het in 'n gevoel dat daar is insette uitset. 258 00:12:52,000 --> 00:12:55,070 So noem ons hierdie kode wat doen dit f oop. 259 00:12:55,070 --> 00:12:59,370 En dan op die volgende lyn van ons program, kan ons nou saam met f. 260 00:12:59,370 --> 00:13:02,710 >> So sou 'n voorbeeld van iets wees dit is soos loop-of 261 00:13:02,710 --> 00:13:06,850 blokkeer, want op daardie eerste reël Daar wag ons totdat ons 262 00:13:06,850 --> 00:13:08,110 kry die lêer oop te maak. 263 00:13:08,110 --> 00:13:12,260 So op die tweede lyn, ons weet dat ons kan werk met f, maar dit beteken dat 264 00:13:12,260 --> 00:13:16,240 dat die tweede lyn kan regtig nie hardloop totdat die eerste lyn gedoen word. 265 00:13:16,240 --> 00:13:17,760 Is wat sin maak? 266 00:13:17,760 --> 00:13:20,890 >> So hierdie slegte sou wees om te sit in 'n geval hanteerder. 267 00:13:20,890 --> 00:13:23,920 En die rede daarvoor is dat hierdie soort van wag, reg? 268 00:13:23,920 --> 00:13:26,500 So dit sou terugkeer ons terug aan dieselfde ding. 269 00:13:26,500 --> 00:13:29,470 En nou wil ons nie eens die voordeel van verskeie drade of 270 00:13:29,470 --> 00:13:32,390 prosesse, want ons het een draad in Node.js. 271 00:13:32,390 --> 00:13:35,496 Is wat sin maak vir almal? 272 00:13:35,496 --> 00:13:35,990 >> Publiek: Wag. 273 00:13:35,990 --> 00:13:36,980 So, wat is die vervanging? 274 00:13:36,980 --> 00:13:37,840 >> KEVIN SCHMID: O, so ja. 275 00:13:37,840 --> 00:13:39,560 So ek gaan kry om te die vervanging. 276 00:13:39,560 --> 00:13:40,430 OK. 277 00:13:40,430 --> 00:13:42,960 So wat as ons het iets wat lyk soos hierdie? 278 00:13:42,960 --> 00:13:45,730 So wat as ek nou geredigeer f maak 'n bietjie? 279 00:13:45,730 --> 00:13:48,370 So ek verby in dieselfde twee argumente as voorheen. 280 00:13:48,370 --> 00:13:52,610 Ek het nog lief vir die nuwe lied dat sy kom uit met. 281 00:13:52,610 --> 00:13:57,260 Maar ek verby 'n derde ding wat is hierdie veranderlike genoem kode. 282 00:13:57,260 --> 00:14:02,280 >> Maar wat is die kode eintlik in hierdie konteks? 283 00:14:02,280 --> 00:14:05,360 Is dit soos 'n gereelde C veranderlike? 284 00:14:05,360 --> 00:14:06,740 Dit is 'n funksie, reg? 285 00:14:06,740 --> 00:14:09,450 En dit kan 'n bietjie vreemd, want Ek is eintlik soos nou verby 'n 286 00:14:09,450 --> 00:14:12,320 funksioneer in 'n ander funksie. 287 00:14:12,320 --> 00:14:14,400 >> So 'n paar dinge om op te let oor hierdie. 288 00:14:14,400 --> 00:14:17,145 Een, ek is nie eintlik 'n beroep die kode funksie. 289 00:14:17,145 --> 00:14:20,650 So jy sien nie kode met die links paren, reg van voorwerpe. 290 00:14:20,650 --> 00:14:23,010 Ek is net verby in die kode. 291 00:14:23,010 --> 00:14:26,990 En in C, wat dit eintlik sou doen is vir my 'n wyser na daardie werklike 292 00:14:26,990 --> 00:14:29,740 kode, en dan is dit kan dit loop. 293 00:14:29,740 --> 00:14:33,350 Maar dink net oor dit as jy verby die kode uit te voer wanneer 294 00:14:33,350 --> 00:14:35,150 dat 'n lêer geopen word. 295 00:14:35,150 --> 00:14:41,430 >> Maar wat dit beteken, is dat dit nou die res van my program wat kan doen 296 00:14:41,430 --> 00:14:47,050 ander dinge, kan voortgaan om ander te doen dinge, terwyl ons, nie regtig nie wag nie, maar 297 00:14:47,050 --> 00:14:50,890 net in die agterkant van ons koppe wat wanneer die lêer se oop, hardloop wat 298 00:14:50,890 --> 00:14:52,130 kode aan die bokant. 299 00:14:52,130 --> 00:14:53,390 Is wat sin maak? 300 00:14:53,390 --> 00:14:58,060 >> En nou het die idee agter Node.js is dat die kode in die doen dinge met f 301 00:14:58,060 --> 00:15:04,590 deel moet wees redelik kort en eenvoudige en eenvoudig en nie werklik 302 00:15:04,590 --> 00:15:06,160 baie bestryk intensiewe. 303 00:15:06,160 --> 00:15:09,390 Dit kan 'n ander lêer oop te maak nie, maar wat moet ook redelik vinnig 304 00:15:09,390 --> 00:15:14,710 want dit moet net sê nie 'n ander f oop te maak en dan noem hierdie ander kode. 305 00:15:14,710 --> 00:15:19,100 >> So net heeltemal duidelik, die f te wees open wat nie die nuwe Katy Perry lied 306 00:15:19,100 --> 00:15:23,060 gedoen MP3, wat gaan mooi veel onmiddellik terug te keer. 307 00:15:23,060 --> 00:15:27,820 En dan kan ons net voortgaan om te doen ander dinge, want al wat nou f 308 00:15:27,820 --> 00:15:33,410 oop oproep maak is basies vertel die onderliggende f oop-kode van die lêer oop te maak 309 00:15:33,410 --> 00:15:36,020 en as jy klaar is die opening van hierdie lêer of wanneer jy dit terug, 310 00:15:36,020 --> 00:15:37,480 dan loop die kode. 311 00:15:37,480 --> 00:15:39,540 Maar dit maak nie eintlik loop dat code. 312 00:15:39,540 --> 00:15:41,815 En jy het 'n vraag? 313 00:15:41,815 --> 00:15:46,180 >> Publiek: Jy was 'n paar te impliseer keer dat die byvoeging van computationeel 314 00:15:46,180 --> 00:15:50,545 intensiewe-kode soort van breek die [Onhoorbaar] gedrewe stelsel. 315 00:15:50,545 --> 00:15:51,795 [Onhoorbaar]? 316 00:15:51,795 --> 00:15:54,450 317 00:15:54,450 --> 00:15:55,290 >> KEVIN SCHMID: Dit is 'n groot vraag. 318 00:15:55,290 --> 00:15:59,280 So ek het eintlik 'n voorbeeld van hoe jy kan computationeel integreer 319 00:15:59,280 --> 00:16:01,090 intensiewe-kode in 'n bietjie. 320 00:16:01,090 --> 00:16:03,620 So wanneer ons by die kode voorbeelde, Ek sal seker maak dat die een om te trek nie. 321 00:16:03,620 --> 00:16:04,700 Is dit OK? 322 00:16:04,700 --> 00:16:05,950 Dankie. 323 00:16:05,950 --> 00:16:07,690 324 00:16:07,690 --> 00:16:08,750 >> Wat was jou naam? 325 00:16:08,750 --> 00:16:10,620 >> Publiek: Aaron. 326 00:16:10,620 --> 00:16:14,830 >> KEVIN SCHMID: Aaron bring 'n baie goeie punt, en dit is dat as ek gehad het 327 00:16:14,830 --> 00:16:18,560 sommige computationeel intensiewe kode in die doen dinge met f deel, die res van die 328 00:16:18,560 --> 00:16:22,880 my program kan nie loop nie en kan nie luister vir 'n nuwe versoeke of iets tot al 329 00:16:22,880 --> 00:16:24,270 daardie dinge is klaar. 330 00:16:24,270 --> 00:16:27,390 So as ek skryf Node-kode in die algemeen tensy ons iets soos ek gaan 331 00:16:27,390 --> 00:16:33,060 om later stel wanneer ons kyk na die code voorbeelde, ek moet seker wees dat 332 00:16:33,060 --> 00:16:36,060 my kode nie saamvat hierdie gebeurtenis lus. 333 00:16:36,060 --> 00:16:38,120 Is wat sin maak? 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 >> So Node.js bied hierdie raamwerk wat jy kan hierdie gebeurtenis bou gedryf 337 00:16:47,090 --> 00:16:48,210 servers met. 338 00:16:48,210 --> 00:16:53,460 So het dit hierdie soort van asynchrone nie-blokkeer I / O biblioteke, terwyl 339 00:16:53,460 --> 00:16:56,800 die standaard C biblioteke wat ons al werk met, soos as jy net 340 00:16:56,800 --> 00:16:59,500 gebruik dit op dieselfde manier wat ons het gebruik hulle met f open en 341 00:16:59,500 --> 00:17:03,000 dinge, wat is die sluit omdat jy eintlik moet wag vir 342 00:17:03,000 --> 00:17:04,470 dat 'n lêer oop te maak. 343 00:17:04,470 --> 00:17:09,290 >> Maar Node.js gee jou daardie en dit bande basies in Google se V8 344 00:17:09,290 --> 00:17:14,030 JavaScript-enjin wat is die rede dat Chrome is so vinnig by die verwerking 345 00:17:14,030 --> 00:17:17,040 JavaScript, want dit het hierdie V8 enjin. 346 00:17:17,040 --> 00:17:22,460 So ek weet dit klink soos een van daardie WWDC ontwikkelaar konferensies ding 347 00:17:22,460 --> 00:17:25,390 waar hulle gooi net 'n klomp van die brief aantal dinge vir verwerkers 348 00:17:25,390 --> 00:17:26,910 en sê dit is so cool. 349 00:17:26,910 --> 00:17:34,200 Maar dit is cool dat hulle gedoen het omdat JavaScript - 350 00:17:34,200 --> 00:17:37,010 of miskien as jy nie vertroud is met JavaScript nog nie, want ons het nie ' 351 00:17:37,010 --> 00:17:38,180 Die lesings op dit - 352 00:17:38,180 --> 00:17:40,770 maar JavaScript is 'n geïnterpreteer taal. 353 00:17:40,770 --> 00:17:41,970 >> En dit is 'n belangrike punt ook. 354 00:17:41,970 --> 00:17:45,790 So dit is belangrik vir ons web bedieners te vinnig, reg? 355 00:17:45,790 --> 00:17:49,970 En as ons net loop JavaScript kode wat vertolk is met net 356 00:17:49,970 --> 00:17:52,130 enige ou tolk dit kan stadig wees. 357 00:17:52,130 --> 00:17:55,980 So Node voordele uit met hierdie super vinnig V8 tolk. 358 00:17:55,980 --> 00:17:59,580 En ek weet nie of hulle dit genoem omdat die V8 klap in die voorkop 359 00:17:59,580 --> 00:18:01,110 ding, maar OK. 360 00:18:01,110 --> 00:18:07,070 >> So het ek voorberei n paar voorbeelde op hierdie skakel. 361 00:18:07,070 --> 00:18:10,490 Na afloop van die seminaar, ek soort van gaan praat oor hoe jy kan Node stel kry 362 00:18:10,490 --> 00:18:13,570 up, maar vir nou, ek het net soort van wil deur 'n paar voorbeelde kode te loop. 363 00:18:13,570 --> 00:18:17,250 So as jy wil volg saam, al die bron-kode is daar beskikbaar. 364 00:18:17,250 --> 00:18:18,720 OK? 365 00:18:18,720 --> 00:18:22,280 >> So ek sal hierdie URL verlaat vir 'n bietjie. 366 00:18:22,280 --> 00:18:24,440 En dan gaan ek net te oorskakel na die terminale. 367 00:18:24,440 --> 00:18:29,670 368 00:18:29,670 --> 00:18:34,400 Is almal goed met hierdie URL? 369 00:18:34,400 --> 00:18:37,990 So ek gaan oor te skakel om my terminale hier. 370 00:18:37,990 --> 00:18:42,030 >> So hier is die kode wat Ek het vir vandag. 371 00:18:42,030 --> 00:18:43,960 Hoekom doen ons nie begin met simpler.js lêer? 372 00:18:43,960 --> 00:18:49,110 373 00:18:49,110 --> 00:18:52,100 Die ander ding is dat al hierdie kode gaan in geskryf word 374 00:18:52,100 --> 00:18:56,660 JavaScript wat jy mag of mag nie vertroud wees met. 375 00:18:56,660 --> 00:19:00,170 Ek dink 'n paar dinge is wat 'n baie JavaScript-kode is die soort 376 00:19:00,170 --> 00:19:04,000 sintaksis en struktuur is baie soortgelyk aan C, sodat jy kan soort dit kom haal as 377 00:19:04,000 --> 00:19:05,020 jy gaan saam. 378 00:19:05,020 --> 00:19:08,750 Ek het probeer om 'n groot deel van die skryf begin-kode vir die in 'n manier wat 379 00:19:08,750 --> 00:19:11,230 soortgelyk aan C sodat dit 'n bietjie meer leesbare. 380 00:19:11,230 --> 00:19:15,980 Maar soos ons vorder, sal ek toon sommige van die bykomende 381 00:19:15,980 --> 00:19:18,980 kenmerke van JavaScript dat is gaaf. 382 00:19:18,980 --> 00:19:21,510 >> Maar laat ons kyk na hierdie voorbeeld program. 383 00:19:21,510 --> 00:19:24,820 Ek dink alles is daar afgesny. 384 00:19:24,820 --> 00:19:28,500 Ek gaan net dat ware op te los vinnig as dit is OK of nie. 385 00:19:28,500 --> 00:19:31,400 Ek weet nie wat dit gaan doen. 386 00:19:31,400 --> 00:19:34,660 Is dit 'n bietjie beter? 387 00:19:34,660 --> 00:19:36,510 Kan jy sien die var en dinge? 388 00:19:36,510 --> 00:19:39,320 OK. 389 00:19:39,320 --> 00:19:44,120 >> Dus is die eerste lyn is soos die JavaScript weergawe van 'n veranderlike 390 00:19:44,120 --> 00:19:44,800 verklaring. 391 00:19:44,800 --> 00:19:49,870 So net om te beklemtoon wat dit sou lyk soos in C. So dit is net soos 392 00:19:49,870 --> 00:19:52,620 my gesê indeks is gelyk aan drie of iets soos dit. 393 00:19:52,620 --> 00:19:55,740 So ek het nie die tipe spesifiseer. 394 00:19:55,740 --> 00:20:00,780 JavaScript wel tipes, maar dit is baie dinamiese getik in die natuur, so 395 00:20:00,780 --> 00:20:02,580 het nie enige soort van tipe op dit. 396 00:20:02,580 --> 00:20:03,670 So dit net 'var. 397 00:20:03,670 --> 00:20:05,320 Dit is soos veranderlike. 398 00:20:05,320 --> 00:20:05,920 OK? 399 00:20:05,920 --> 00:20:08,340 >> En ek vra hierdie veranderlike HTTP. 400 00:20:08,340 --> 00:20:12,480 En op my regterkant, ek het die uitdrukking wat ek wil om te sit in HTTP. 401 00:20:12,480 --> 00:20:14,960 En dit sê vereis HTTP. 402 00:20:14,960 --> 00:20:18,500 So dit is 'n soort van 'n soortgelyke in te sluit. 403 00:20:18,500 --> 00:20:22,940 Dit is 'n bietjie meer soos kragtig as sluit in die sin dat sluit 404 00:20:22,940 --> 00:20:26,100 sou net kopieer en plak die kop dien vir die funksie prototipes of 405 00:20:26,100 --> 00:20:27,930 alles wat met die tipe definisies. 406 00:20:27,930 --> 00:20:30,590 Maar vereis eintlik gaan om ons te kry die kode. 407 00:20:30,590 --> 00:20:33,280 >> Sodat jy kan dink dat dit as die invoer van sekere kode. 408 00:20:33,280 --> 00:20:37,960 So iewers in die Node.js module stelsel of wat ook al, hulle het al hierdie 409 00:20:37,960 --> 00:20:40,790 HTTP bediener-kode so ek is net haal dit vir my eie 410 00:20:40,790 --> 00:20:43,130 persoonlike gebruik in hierdie program. 411 00:20:43,130 --> 00:20:44,260 OK? 412 00:20:44,260 --> 00:20:46,930 >> So dan het ek hierdie funksie wat ek geskryf het. 413 00:20:46,930 --> 00:20:50,330 En sien ek het nie spesifiseer return of die tipe van die 414 00:20:50,330 --> 00:20:51,140 argumente weer. 415 00:20:51,140 --> 00:20:54,440 So soort van los getik in dat die soort van sin. 416 00:20:54,440 --> 00:20:57,290 Twee argumente wat dit neem om in, Die versoek en reaksie. 417 00:20:57,290 --> 00:21:02,080 So dit is konseptueel soort van soos bekend uit die prentjie wat ons gehad het 418 00:21:02,080 --> 00:21:05,280 op die skerm voor omdat ons kry die versoek dat ons 419 00:21:05,280 --> 00:21:06,410 het van die gebruiker. 420 00:21:06,410 --> 00:21:09,170 En dan het ons 'n reaksie wat ons dinge kan skryf aan. 421 00:21:09,170 --> 00:21:15,060 >> Dus is die eerste reël van hierdie nie res.writeHead 200 en dan is dit 422 00:21:15,060 --> 00:21:17,070 inhoud soort teks plain. 423 00:21:17,070 --> 00:21:19,300 So laat se werk dit uitmekaar 'n bietjie. 424 00:21:19,300 --> 00:21:22,340 So laat ons net fokus op res.write vir 'n bietjie. 425 00:21:22,340 --> 00:21:28,420 So skryf is basies, en skryf hoof, is net maniere om soort van uitskryf 426 00:21:28,420 --> 00:21:29,960 dinge aan die reaksie. 427 00:21:29,960 --> 00:21:30,770 OK? 428 00:21:30,770 --> 00:21:36,230 So skryf hoof, as iemand onthou van die HTTP lesing, het julle 429 00:21:36,230 --> 00:21:39,940 onthou kop op die top van die HTTP ding? 430 00:21:39,940 --> 00:21:43,580 So hoekom doen ek nie net demo kop ware vinnig. 431 00:21:43,580 --> 00:21:44,640 Sou dit nuttig? 432 00:21:44,640 --> 00:21:45,500 Of moet ons net soort van - 433 00:21:45,500 --> 00:21:46,070 OK. 434 00:21:46,070 --> 00:21:46,740 Seker nie. 435 00:21:46,740 --> 00:21:52,340 >> So wanneer jou leser gaan na google.com of iets soos dit, 436 00:21:52,340 --> 00:21:54,250 daar is eintlik 'n bietjie meer - 437 00:21:54,250 --> 00:21:55,380 dit is soos 'n geheim - 438 00:21:55,380 --> 00:21:58,340 daar is soos 'n bietjie meer inligting wat kom deur die pyp as net 439 00:21:58,340 --> 00:22:00,180 die klein soek en alles. 440 00:22:00,180 --> 00:22:03,550 So om jou te wys dit, ek gaan 'n program genaamd Curl te gebruik. 441 00:22:03,550 --> 00:22:04,260 OK? 442 00:22:04,260 --> 00:22:08,020 So dit is iets wat jy kan doen by die Mac OSX command line of in die 443 00:22:08,020 --> 00:22:09,830 toestel of wat ook al. 444 00:22:09,830 --> 00:22:17,050 En so as ek krul HTTP google.com, Ek gaan die HTML te sien. 445 00:22:17,050 --> 00:22:21,230 En dit is, in regverdigheid, net die HTML dat die soort van vertel jou te 446 00:22:21,230 --> 00:22:24,695 lei na www as jou blaaier nie outomaties hanteer die 447 00:22:24,695 --> 00:22:27,110 herleiding. 448 00:22:27,110 --> 00:22:33,390 >> So dit is net HTML, maar ek gaan om by te voeg hierdie koppelteken ek vlag te krul. 449 00:22:33,390 --> 00:22:33,600 OK? 450 00:22:33,600 --> 00:22:35,600 En dit gaan om te wys my kop. 451 00:22:35,600 --> 00:22:40,640 So is dit ook inligting wat deur wanneer ek hierdie reaksie. 452 00:22:40,640 --> 00:22:41,260 OK? 453 00:22:41,260 --> 00:22:45,320 >> So aan die bokant, jy sien dit HTTP 301 permanent te beweeg. 454 00:22:45,320 --> 00:22:49,470 En dit is 'n soort van belangrik omdat dit verwys na die status kode. 455 00:22:49,470 --> 00:22:53,750 So het die 301 hier is die status kode, wat is basies net 'n heelgetal 456 00:22:53,750 --> 00:22:57,750 wat vertel die leser of wie is die lees van hierdie, as jy voorgee dat 457 00:22:57,750 --> 00:23:01,460 jy is 'n leser en jy sien dit, basies nou as jy kyk na 458 00:23:01,460 --> 00:23:04,960 dat en jy sien 'n 301, jy weet ek het iets spesiaals wat gebaseer is op te doen 459 00:23:04,960 --> 00:23:08,810 301, of iets spesiaals gebeur gebaseer op die 301. 460 00:23:08,810 --> 00:23:12,640 So sê verhuis permanent. 461 00:23:12,640 --> 00:23:17,700 >> En dan, in wese, het ons ' 'n klomp van die sleutel waarde pare. 462 00:23:17,700 --> 00:23:22,100 So kry ons die plek is www.google.com. 463 00:23:22,100 --> 00:23:25,190 En dan soort van al hierdie ander dinge, maar basies, wat die plek is 464 00:23:25,190 --> 00:23:29,662 woord is die nuwe plek is op www.google.com. 465 00:23:29,662 --> 00:23:33,800 So nou as jy gaan na google.com, sal jy soort van sien die leser soort knip 466 00:23:33,800 --> 00:23:38,770 vir 'n tweede en dan lei jy terug na www.google.com. 467 00:23:38,770 --> 00:23:41,840 So het die antwoorde kan bevat hierdie hoofde. 468 00:23:41,840 --> 00:23:43,330 >> En 'n paar dinge uit te wys. 469 00:23:43,330 --> 00:23:46,890 So kom ons sê ons was eintlik suksesvolle in die besoek van 'n webblad. 470 00:23:46,890 --> 00:23:49,040 So laat my gaan - 471 00:23:49,040 --> 00:23:51,080 Wat is 'n goeie webwerf? 472 00:23:51,080 --> 00:23:53,285 Ek is sleg dink van goeie webtuistes op die 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 Kom ons doen Wikipedia. 476 00:23:56,040 --> 00:23:58,680 So hier is ek verskuif. 477 00:23:58,680 --> 00:23:59,240 O wag. 478 00:23:59,240 --> 00:24:00,160 Was ek? 479 00:24:00,160 --> 00:24:00,890 Ja, ek was. 480 00:24:00,890 --> 00:24:01,100 OK. 481 00:24:01,100 --> 00:24:03,005 So het ek www te doen. 482 00:24:03,005 --> 00:24:06,006 So ek gaan www te doen. 483 00:24:06,006 --> 00:24:09,680 En soos jy kan sien, hier is al die HTML dat die leser sal verwerk 484 00:24:09,680 --> 00:24:10,910 vir Wikipedia. 485 00:24:10,910 --> 00:24:14,055 >> Maar as ek hou blaai hier, wat ek sal sien op die top - 486 00:24:14,055 --> 00:24:17,800 Sjoe, daar is 'n baie HTML op Wikipedia - 487 00:24:17,800 --> 00:24:22,550 Maar wat ek kan sien op die top hier is hierdie 200 status kode in teenstelling met die 488 00:24:22,550 --> 00:24:24,570 301 wat ek gesien het vroeër. 489 00:24:24,570 --> 00:24:27,100 En sien dat dit het 'n mooi vriendelike OK langs dit. 490 00:24:27,100 --> 00:24:29,470 So dit is soos die goeie status kode. 491 00:24:29,470 --> 00:24:31,160 >> Is dit 200 aantal bekende lyk? 492 00:24:31,160 --> 00:24:34,120 493 00:24:34,120 --> 00:24:39,880 Ja, want toe ek dit gedoen simpler.js, Ek het 'n 200 daar. 494 00:24:39,880 --> 00:24:43,290 So dit is basies sê vertel die leser of wie is probeer om te kry om te 495 00:24:43,290 --> 00:24:45,440 dit wat hulle suksesvol was. 496 00:24:45,440 --> 00:24:49,040 Of dat die soort van soos ons suksesvol was ook. 497 00:24:49,040 --> 00:24:54,320 >> En daar is hierdie soort van spesiale sintaks in JavaScript vir waarby 'n 498 00:24:54,320 --> 00:24:59,870 kaart van die sleutels soos inhoud tipe en hierdie waardes soos teks plain. 499 00:24:59,870 --> 00:25:03,780 So as jy kyk na die reaksie wat ons terug gekom van Wikipedia voor, - 500 00:25:03,780 --> 00:25:06,200 Ek gaan om te probeer om te blaai 'n bietjie vinniger - 501 00:25:06,200 --> 00:25:09,900 jy het die sleutels soos bediener en hierdie waardes Apache. 502 00:25:09,900 --> 00:25:12,120 So jy het die sleutels en waardes. 503 00:25:12,120 --> 00:25:15,930 En jy kan spesifiseer dit in Node wat terug te stuur. 504 00:25:15,930 --> 00:25:19,380 >> So dit is eintlik soort van, in sommige maniere, en in sommige opsigte is dit nie 505 00:25:19,380 --> 00:25:23,170 regtig nie, maar dit is 'n bietjie laer vlak as die PHP-kode wat jy kan wees 506 00:25:23,170 --> 00:25:26,980 skryf vir P die sewe omdat PHP en Apache soort van sorg van 'n paar 507 00:25:26,980 --> 00:25:28,150 van hierdie dinge vir jou. 508 00:25:28,150 --> 00:25:32,520 In PHP, kan jy die standaard ignoreer gedrag deur die skryf van jou eie kop. 509 00:25:32,520 --> 00:25:35,520 Maar vir die doeleindes van hierdie, ons kry ons eie kop uit te skryf. 510 00:25:35,520 --> 00:25:38,210 511 00:25:38,210 --> 00:25:41,105 >> So het die lyn sin maak almal, die skryf hoof lyn? 512 00:25:41,105 --> 00:25:41,380 OK. 513 00:25:41,380 --> 00:25:42,280 Awesome. 514 00:25:42,280 --> 00:25:45,870 >> So het wat ek doen, is ek uiteindelik die antwoord deur te sê hallo wêreld. 515 00:25:45,870 --> 00:25:47,040 OK. 516 00:25:47,040 --> 00:25:49,920 Maar dit is net 'n funksie genoem versoek hanteerder. 517 00:25:49,920 --> 00:25:53,510 So nou is ek eintlik soort doen iets met hierdie funksie, reg? 518 00:25:53,510 --> 00:25:59,170 >> So hier wat ek doen, is daar hierdie lyn wat nie var bediener gelykes 519 00:25:59,170 --> 00:26:03,530 HTTP.create bediener, en dan het ek slaag in die versoek hanteerder. 520 00:26:03,530 --> 00:26:06,080 So dit is 'n soort van die knoop manier van die skep van 'n bediener. 521 00:26:06,080 --> 00:26:08,790 En sien dat ek verby in die versoek hanteerder. 522 00:26:08,790 --> 00:26:12,290 So, dit is die vertel van die createServer funksie wat ek wil hê jy my te maak 'n 523 00:26:12,290 --> 00:26:16,270 bediener, en wanneer die bediener ontvang 'n reaksie, ek het jou nodig om dit te noem 524 00:26:16,270 --> 00:26:18,680 versoek hanteerder funksie. 525 00:26:18,680 --> 00:26:18,990 OK? 526 00:26:18,990 --> 00:26:22,290 >> Sodat lyn pretty much afwerkings dadelik. 527 00:26:22,290 --> 00:26:28,780 So het die var bediener lyn is gedoen wat reg nadat jy dit doen pretty much. 528 00:26:28,780 --> 00:26:31,770 Ek bedoel, dit het om 'n interne staat om te weet dat jy sal moet 529 00:26:31,770 --> 00:26:35,400 noem dat die versoek hanteerder funksie nie, maar dit is nie van plan om daar te sit en 530 00:26:35,400 --> 00:26:37,730 sê het die gebruiker gestuur vir my 'n versoek nie? 531 00:26:37,730 --> 00:26:39,270 Het die gebruiker 'n versoek gestuur vir my nog? 532 00:26:39,270 --> 00:26:40,780 Daarom is dit nie sluit. 533 00:26:40,780 --> 00:26:41,650 OK? 534 00:26:41,650 --> 00:26:46,120 >> So, wat dit sal doen, is dit basies slaan nou 'n verwysing na hierdie kode, 535 00:26:46,120 --> 00:26:49,670 hierdie versoek hanteerder funksie, en dan sal die kode uitgevoer word wanneer iemand 536 00:26:49,670 --> 00:26:52,170 'n versoek. 537 00:26:52,170 --> 00:26:54,120 En dan moet ons server.listen. 538 00:26:54,120 --> 00:26:56,950 539 00:26:56,950 --> 00:26:59,960 >> Die 1337 is daar mooi arbitrêr. 540 00:26:59,960 --> 00:27:02,285 Ek het geen spesifieke rede vir die pluk dat die getal. 541 00:27:02,285 --> 00:27:03,860 Dit was heeltemal random. 542 00:27:03,860 --> 00:27:07,010 Maar dit net spesifiseer die hawe. 543 00:27:07,010 --> 00:27:10,640 So die meeste webbedieners jy sal sien dat hulle gebruik port 80 want dit is soort 544 00:27:10,640 --> 00:27:11,810 van soos die konvensie. 545 00:27:11,810 --> 00:27:16,170 So as ek gaan iets soos, Ek weet nie, Wikipedia.org, 546 00:27:16,170 --> 00:27:17,700 en ek sit kolon 8 - 547 00:27:17,700 --> 00:27:18,610 O wow, kan jy nie sien nie. 548 00:27:18,610 --> 00:27:19,370 Ek is jammer. 549 00:27:19,370 --> 00:27:21,820 Maar as ek doen Wikipedia - 550 00:27:21,820 --> 00:27:24,810 Ek sal hier skryf dit net so dat dit is duidelik op die kamera. 551 00:27:24,810 --> 00:27:29,150 Maar as ek dit in 'n leser met 'n kolon 80, wat bepaal na 552 00:27:29,150 --> 00:27:31,430 Wikipedia.org op poort 80. 553 00:27:31,430 --> 00:27:36,200 So dit is soos hoe die Verenigde State het verskeie hawens soos waar jy kan skip 554 00:27:36,200 --> 00:27:37,440 dinge soort. 555 00:27:37,440 --> 00:27:40,730 So dit is soos gaan na hierdie spesifieke plaas op hierdie bediener. 556 00:27:40,730 --> 00:27:40,990 OK. 557 00:27:40,990 --> 00:27:45,730 >> So ek het net verkies om 1337. 558 00:27:45,730 --> 00:27:47,910 Daar is 'n hele reeks van getalle wat jy kan kies. 559 00:27:47,910 --> 00:27:50,390 Dit was nie heeltemal spesiaal. 560 00:27:50,390 --> 00:27:54,560 >> Maar wat ek nou gaan doen is ek gaan Node te voer. 561 00:27:54,560 --> 00:27:59,730 Laat my eintlik voer dat 'n paar lyne af sodat jy dit kan sien. 562 00:27:59,730 --> 00:28:03,130 Ek gaan Node te doen, en ek is gaan simpler.js te voer. 563 00:28:03,130 --> 00:28:06,880 En ons sal praat oor hoe om te kry Node opgestel in 'n bietjie. 564 00:28:06,880 --> 00:28:09,350 Maar nou is dit net die bestuur van die bediener. 565 00:28:09,350 --> 00:28:14,360 >> So een ding wat ons kan probeer wat nie wees dat opwindend is, is wat ons kan eintlik 566 00:28:14,360 --> 00:28:16,300 probeer om dit te maak in die krul. 567 00:28:16,300 --> 00:28:20,680 So ek kan doen krul, en my masjien is die plaaslike gasheer. 568 00:28:20,680 --> 00:28:24,600 Jy sal ook sien dat hierdie skriftelike soos hierdie soms. 569 00:28:24,600 --> 00:28:29,810 Plaaslike gasheer en 127.0.0.1 is die soort van soos om jou rekenaar by die huis. 570 00:28:29,810 --> 00:28:33,180 So dit is soos praat met jou eie rekenaar. 571 00:28:33,180 --> 00:28:33,760 OK. 572 00:28:33,760 --> 00:28:36,030 >> En dan kan ek sê 1337. 573 00:28:36,030 --> 00:28:39,630 So as ek loop hierdie lyn van kode, dit sê hallo wêreld. 574 00:28:39,630 --> 00:28:44,050 En as ek wou dat dinge om te sien dat gehad inhoud soort teks plain of 575 00:28:44,050 --> 00:28:46,560 wat ook al, ek kan selfs sit dit hier. 576 00:28:46,560 --> 00:28:48,810 En sien dat dit nie sê OK. 577 00:28:48,810 --> 00:28:50,810 En ek het die teks plain. 578 00:28:50,810 --> 00:28:53,140 En dan is daar van alle soorte is die ander dinge wat Node sal voeg in 579 00:28:53,140 --> 00:28:54,440 daar is vir my. 580 00:28:54,440 --> 00:28:55,700 Dit is nie super belangrik. 581 00:28:55,700 --> 00:28:58,230 >> Ek bedoel, daar is 'n soort van tegniese aspekte van wat soort 582 00:28:58,230 --> 00:29:02,280 cool om te praat oor, maar net om te wys jy, het ek ook die mag het om te 583 00:29:02,280 --> 00:29:03,070 verander hierdie rond. 584 00:29:03,070 --> 00:29:06,280 So ek kan voeg net 'n klomp dinge soos dat. 585 00:29:06,280 --> 00:29:11,780 En dan nou, as ek kyk in my uitset, sal dit wees dat. 586 00:29:11,780 --> 00:29:19,740 So hierdie hoofde beteken sekere dinge te implementeer en dinge soos dat. 587 00:29:19,740 --> 00:29:23,040 >> En kop kan basies vertel 'n leser hoe om te reageer op iets. 588 00:29:23,040 --> 00:29:26,280 As jy al ooit gehoor het van koekies voor, of as jy al ooit vererg 589 00:29:26,280 --> 00:29:29,330 deur 'n webblad opstel van koekies, of draai op koekie blok of 590 00:29:29,330 --> 00:29:30,320 iets soos dit. 591 00:29:30,320 --> 00:29:33,040 Jy kan eintlik koekies in hierdie hoofde. 592 00:29:33,040 --> 00:29:36,990 So vertel hulle 'n leser hoe om te gedrag in sommige gevalle. 593 00:29:36,990 --> 00:29:37,750 OK. 594 00:29:37,750 --> 00:29:40,310 >> So dit was simpler.js. 595 00:29:40,310 --> 00:29:42,780 Het enige iemand enige vrae op dat die bron-kode lêer? 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 >> So laat verwyder die r uit daardie en kyk na simple.js. 600 00:29:50,780 --> 00:29:53,010 So dit is pretty much dieselfde program. 601 00:29:53,010 --> 00:29:56,030 Ek het net het dit 'n bietjie anders want ek wou soort van 'n hoogtepunt 602 00:29:56,030 --> 00:29:57,850 'n paar kenmerke van JavaScript. 603 00:29:57,850 --> 00:30:03,880 >> So sien dat die versoek hanteerder funksie het heeltemal verdwyn. 604 00:30:03,880 --> 00:30:05,800 O yep, het jy 'n vraag? 605 00:30:05,800 --> 00:30:08,200 >> Publiek: Ja, die argumente wat geslaag het, word tot daardie 606 00:30:08,200 --> 00:30:10,120 funksie, wat is dit? 607 00:30:10,120 --> 00:30:12,050 >> KEVIN SCHMID: So dit is JavaScript voorwerpe. 608 00:30:12,050 --> 00:30:15,230 In die Node.js dokumentasie, is dit basies sê watter metodes is 609 00:30:15,230 --> 00:30:15,910 beskikbaar op hulle. 610 00:30:15,910 --> 00:30:19,602 Ons het net gebeur om die toegang te hê hierdie metode genoem skryf kop en einde 611 00:30:19,602 --> 00:30:20,730 en dinge soos dat. 612 00:30:20,730 --> 00:30:22,590 Maar daar is 'n hele klomp meer metodes. 613 00:30:22,590 --> 00:30:27,670 >> En byvoorbeeld, soos een van hulle in die besonder op rec, kan jy doen 614 00:30:27,670 --> 00:30:34,540 iets soos rec.method wat sal vertel of dit is 'n HTTP kry of 615 00:30:34,540 --> 00:30:36,780 HTTP post versoeke en dinge soos dat. 616 00:30:36,780 --> 00:30:39,100 So is daar alle soorte van verskillende eienskappe, maar hulle is albei 617 00:30:39,100 --> 00:30:42,560 JavaScript voorwerpe, en hulle het net funksies verbonde aan die wat vir julle 618 00:30:42,560 --> 00:30:43,850 dinge kan skryf aan. 619 00:30:43,850 --> 00:30:45,520 OK? 620 00:30:45,520 --> 00:30:49,030 >> So sien dat versoek hanteerder is heeltemal weg. 621 00:30:49,030 --> 00:30:52,650 Maar die kode wat ek gehad het in aanvraag hanteerder is nog steeds daar. 622 00:30:52,650 --> 00:30:56,520 Ek het nog steeds hierdie res.writeHead en ek het nog steeds hierdie res.end. 623 00:30:56,520 --> 00:31:00,270 En wat is hierdie 'n voorbeeld van in JavaScript is hierdie idee van 'n 624 00:31:00,270 --> 00:31:01,460 anonieme funksie. 625 00:31:01,460 --> 00:31:04,180 en anoniem is soos 'n gepaste naam want dit omdat dit nie letterlik nie 626 00:31:04,180 --> 00:31:05,180 het 'n naam. 627 00:31:05,180 --> 00:31:07,900 Daar is geen funksie versoek hanteerder in daar. 628 00:31:07,900 --> 00:31:10,110 >> Geen naam het nie, maar dit nog steeds is die neem van 'n argument. 629 00:31:10,110 --> 00:31:12,250 So ek hou nog steeds rec en res. 630 00:31:12,250 --> 00:31:16,180 En ek het nog steeds die kode. 631 00:31:16,180 --> 00:31:18,930 Dit is heeltemal fyn JavaScript-kode. 632 00:31:18,930 --> 00:31:22,540 So ek kan 'n funksie te verklaar sonder uitdruklik gee dit 'n naam. 633 00:31:22,540 --> 00:31:24,250 Dit is 'n bietjie verwarrend op die eerste. 634 00:31:24,250 --> 00:31:26,230 Daar is 'n paar nuttige dinge soos wat jy kan doen met 635 00:31:26,230 --> 00:31:28,450 hierdie anonieme funksies. 636 00:31:28,450 --> 00:31:32,100 Het enige iemand enige vrae oor hierdie, of is dit OK net vir nou, 637 00:31:32,100 --> 00:31:34,130 soort van net aanvaar dat dit sal dieselfde ding 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: Is funksies eerste klas in JavaScript? 641 00:31:38,680 --> 00:31:41,020 >> KEVIN SCHMID: Hulle is die eerste klas in JavaScript. 642 00:31:41,020 --> 00:31:45,490 En net weet dat hierdie begrippe verby in 'n anonieme funksie soos 643 00:31:45,490 --> 00:31:49,600 dit van toepassing op die JavaScript dat jy mag in jou finale projek skryf vir 644 00:31:49,600 --> 00:31:51,260 die webblaaier ook. 645 00:31:51,260 --> 00:31:56,700 So byvoorbeeld, in die JavaScript in die leser, is dit ook 'n bietjie geval 646 00:31:56,700 --> 00:32:00,680 tree in die sin dat dit wat jy sal het, is wanneer die gebruiker druk hierdie 647 00:32:00,680 --> 00:32:02,640 knoppie, ek wil hê jy moet hierdie kode uit te voer. 648 00:32:02,640 --> 00:32:07,070 >> So dit is dieselfde soort van idees van die kliënt kant wanneer 'n kliek of hulle 649 00:32:07,070 --> 00:32:09,870 muis oor sekere beeld op jou webblad, gebruik hierdie kode. 650 00:32:09,870 --> 00:32:11,350 Dit kan van toepassing op bedieners. 651 00:32:11,350 --> 00:32:16,380 So dit is soort van soos die opwindende rede waarom JavaScript is 'n baie 652 00:32:16,380 --> 00:32:19,810 geskik of sommige mense dink dit is 'n geskikte taal vir hierdie soort 653 00:32:19,810 --> 00:32:22,530 gebeurtenis bestuurder bediener omdat jy hierdie anonieme funksies. 654 00:32:22,530 --> 00:32:26,150 Jy het die hele idee van hierdie asynchrone kode. 655 00:32:26,150 --> 00:32:27,060 OK. 656 00:32:27,060 --> 00:32:30,360 Enigiemand enige vrae? 657 00:32:30,360 --> 00:32:30,470 >> OK. 658 00:32:30,470 --> 00:32:33,440 So dit was simple.js. 659 00:32:33,440 --> 00:32:38,070 So laat ons kyk na nog 'n of 'n paar meer. 660 00:32:38,070 --> 00:32:42,040 So dit is sleep.js. 661 00:32:42,040 --> 00:32:47,160 So is enigiemand vertroud is met die C-funksie slaap? 662 00:32:47,160 --> 00:32:50,936 Van dalk een van die vorige lesings of iets soos dit? 663 00:32:50,936 --> 00:32:54,650 >> So basies wat jy kan slaag in Ek dink 'n aantal sekondes of as jy met U 664 00:32:54,650 --> 00:32:57,080 slaap 'n aantal millisekondes of nano sekondes. 665 00:32:57,080 --> 00:33:00,450 En basies die program sal net ophou hardloop vir die bedrag van die tyd. 666 00:33:00,450 --> 00:33:01,280 Reg? 667 00:33:01,280 --> 00:33:06,970 En dan sal dit uiteindelik wakker en dan sal dit net aanhou hardloop 668 00:33:06,970 --> 00:33:08,340 die program. 669 00:33:08,340 --> 00:33:12,740 >> Dus is hierdie bediener soort gee die indruk van die slaap. 670 00:33:12,740 --> 00:33:17,580 So sien dat ons dieselfde res.writeHead 200 met die kop as 671 00:33:17,580 --> 00:33:22,130 voor, maar dan is ons noem hierdie funksie genoem stel timeout. 672 00:33:22,130 --> 00:33:26,170 Stel time-out is ook beskikbaar in jou webblaaier Google Chrome 673 00:33:26,170 --> 00:33:28,000 of Safari of wat ook al. 674 00:33:28,000 --> 00:33:31,720 En basies wat dit is hier is dit om in 'n funksie. 675 00:33:31,720 --> 00:33:33,360 Kennis, weer, dit is 'n anonieme funksie. 676 00:33:33,360 --> 00:33:36,310 So dit is gaaf, want ons is gebruik van 'n anonieme funksie binne 'n 677 00:33:36,310 --> 00:33:38,950 anonieme funksie wat kan 'n bietjie vreemd. 678 00:33:38,950 --> 00:33:42,270 >> Maar dit is die neem van daardie funksie, wat basies sê - en die wyse waarop hierdie 679 00:33:42,270 --> 00:33:47,430 werke is in 5000 millisekondes, ek wil jy daardie funksie uit te voer wat 680 00:33:47,430 --> 00:33:50,830 net eindig die reaksie en skryf hey. 681 00:33:50,830 --> 00:33:56,730 So dit gee die indruk van soos slaap, maar die manier waarop dit werklik 682 00:33:56,730 --> 00:33:59,780 werk, is ons sal loop deur hierdie lyn baie vinnig. 683 00:33:59,780 --> 00:34:01,190 Ons is net iets te skryf. 684 00:34:01,190 --> 00:34:03,780 En dan sal ons ook loop deur hierdie lyn baie vinnig. 685 00:34:03,780 --> 00:34:08,620 So ons is nie eintlik gaan vyf sekondes om te wag. 686 00:34:08,620 --> 00:34:11,370 Ons is net gaan om te hardloop hierdie kode direk. 687 00:34:11,370 --> 00:34:14,219 >> En dan is daar, weer, hierdie klein gebeurtenis lus wat nou hierdie ding 688 00:34:14,219 --> 00:34:17,570 registers wat basies net voortdurend rond gaan in 'n sirkel 689 00:34:17,570 --> 00:34:21,620 en kyk na die horlosie in 'n enkele draad en gesegde, het vyf sekondes 690 00:34:21,620 --> 00:34:22,360 geslaag het nie? 691 00:34:22,360 --> 00:34:26,409 En dan wanneer dit sien dat die tweede hand het verskuif soos vyf sekondes of 692 00:34:26,409 --> 00:34:29,190 wat ook al, dan is dit wakker en sê, O, wat moet ek doen? 693 00:34:29,190 --> 00:34:30,350 Ag, ek het hierdie kode uit te voer. 694 00:34:30,350 --> 00:34:33,110 En dan gaan dit hardloop res.end hey. 695 00:34:33,110 --> 00:34:35,360 >> So weer, ons is nooit hier wag. 696 00:34:35,360 --> 00:34:38,590 So is dit nie dat hierdie kode binne-in hierdie funksie gaan vyf te neem 697 00:34:38,590 --> 00:34:39,900 sekondes te hardloop. 698 00:34:39,900 --> 00:34:43,090 Hierdie kode sal baie hardloop onmiddellik, ten minste met betrekking tot 699 00:34:43,090 --> 00:34:46,139 die vyf sekondes wat ons praat oor vroeër voor. 700 00:34:46,139 --> 00:34:52,100 >> So net om dit te wys in aksie Ek kan doen Node.sleep.js. 701 00:34:52,100 --> 00:34:55,159 En ek het iets gemors? 702 00:34:55,159 --> 00:34:56,310 Moontlik. 703 00:34:56,310 --> 00:34:57,410 Jammer. 704 00:34:57,410 --> 00:34:59,530 Kom ons kyk wat ons kan doen om dit te los. 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 So beslis gebruik Node.js. 709 00:35:17,464 --> 00:35:19,440 Ek is net 'n grap. 710 00:35:19,440 --> 00:35:19,570 OK. 711 00:35:19,570 --> 00:35:20,820 Net een sek. 712 00:35:20,820 --> 00:35:27,380 713 00:35:27,380 --> 00:35:27,900 OK. 714 00:35:27,900 --> 00:35:29,130 Ek weet wat dit is. 715 00:35:29,130 --> 00:35:34,440 >> So die probleem is dat in my ander blad hier is ek hardloop Node reeds op 716 00:35:34,440 --> 00:35:36,590 dieselfde adres, 1337. 717 00:35:36,590 --> 00:35:43,370 So die fout dat dit gooi, as ons kyk by dit regtig nou, is adres in 718 00:35:43,370 --> 00:35:45,180 gebruik, EADDRINUSE. 719 00:35:45,180 --> 00:35:47,970 So ek reeds gebruik 1337 hier. 720 00:35:47,970 --> 00:35:52,210 So as ek toegesluit dit af, en dan het ek nou probeer om dit te hardloop, hopelik, alles 721 00:35:52,210 --> 00:35:53,210 sal goed wees. 722 00:35:53,210 --> 00:35:53,440 OK. 723 00:35:53,440 --> 00:35:57,020 So kan jy net een ding soort luister op 'n hawe in 'n keer. 724 00:35:57,020 --> 00:35:59,660 Nog 'n oplossing sou vir my gewees het om net die program wysig en maak 725 00:35:59,660 --> 00:36:02,370 dit sal wees soos 1338 of iets soos dit. 726 00:36:02,370 --> 00:36:04,100 >> Maar nou slaap loop. 727 00:36:04,100 --> 00:36:06,400 So laat ons eintlik probeer om dit uit in die hierdie tyd leser, want dit is 'n 728 00:36:06,400 --> 00:36:09,080 bietjie onopwindend te sien dit in 'n terminale. 729 00:36:09,080 --> 00:36:13,560 So ek is net gaan om te gaan na daardie 127-posadres weer na 1337. 730 00:36:13,560 --> 00:36:14,850 En as jy dit kan sien - 731 00:36:14,850 --> 00:36:18,050 Ek weet nie of jy kan nie - maar my leser se neem van 'n baie, baie lang 732 00:36:18,050 --> 00:36:20,600 tyd om te laai of soos vyf sekondes. 733 00:36:20,600 --> 00:36:23,460 >> En dan na dat dit uiteindelik die einde van die reaksie. 734 00:36:23,460 --> 00:36:29,070 En jy kan dit nie sien nie, want die ding geskuif oor 'n bietjie, maar as ek ' 735 00:36:29,070 --> 00:36:32,500 dit 'n bietjie kleiner, jy kan dit sien, sê hey. 736 00:36:32,500 --> 00:36:35,130 So ek het die hey, maar na vyf sekondes. 737 00:36:35,130 --> 00:36:38,510 En dit kan 'n bietjie skoner wees om te sien dit hier op die einde, so ek is 738 00:36:38,510 --> 00:36:40,980 gaan 'n om te doen - 739 00:36:40,980 --> 00:36:43,540 Kom ons doen hier - 740 00:36:43,540 --> 00:36:48,370 Kom ons doen Curl daardie adres weer met die 1337. 741 00:36:48,370 --> 00:36:50,820 En ek het net soort van moet sit hier vir vyf sekondes. 742 00:36:50,820 --> 00:36:53,760 Maar let op dat die bediener kan aanvaar nuwe antwoorde. 743 00:36:53,760 --> 00:36:54,940 So is dit druk hey. 744 00:36:54,940 --> 00:36:58,720 >> En dit na die demo, basies wat Ek kan doen in hierdie ander blad - 745 00:36:58,720 --> 00:37:02,640 so kom ons sê ek doen dit in 'n ander blad, Ek gaan Curl en om dieselfde te doen 746 00:37:02,640 --> 00:37:03,780 ding weer. 747 00:37:03,780 --> 00:37:06,600 En ek gaan om te probeer om dit te skop ouens af op dieselfde tyd. 748 00:37:06,600 --> 00:37:08,260 So ek gaan om dit te doen, en ek is gaan jaag hier en ek is 749 00:37:08,260 --> 00:37:09,650 gaan dit weer te doen. 750 00:37:09,650 --> 00:37:14,030 >> En laat ons dit so dat jy kan sien beide van hulle. 751 00:37:14,030 --> 00:37:20,250 Dat een gedruk hey en dat 'n mens gedruk hey al die pad aan - 752 00:37:20,250 --> 00:37:22,550 Kom ons doen daardie eksperiment weer. 753 00:37:22,550 --> 00:37:25,100 Eintlik, laat ons gebruik om hierdie mislei, as dit is OK. 754 00:37:25,100 --> 00:37:30,520 >> So ek gaan 'n dop ding te gebruik wat laat my toe om basies hardloop twee kopieë 755 00:37:30,520 --> 00:37:32,630 van hierdie program in parallel. 756 00:37:32,630 --> 00:37:36,070 So dit sal die eerste program hardloop en Die tweede program in parallel. 757 00:37:36,070 --> 00:37:39,060 So as ek nou druk Enter, gaan dit daardie versoek pretty much te maak 758 00:37:39,060 --> 00:37:40,570 onmiddellik op dieselfde tyd. 759 00:37:40,570 --> 00:37:42,620 So kom ons gee dit 'n skoot. 760 00:37:42,620 --> 00:37:44,950 >> So nou sien dit sê twee prosesse. 761 00:37:44,950 --> 00:37:50,630 En as jy nuuskierig is, wat 27000 getal is basies die proses ID. 762 00:37:50,630 --> 00:37:52,940 En dan sien, het hulle gedruk hey op dieselfde tyd. 763 00:37:52,940 --> 00:37:56,820 Dit was nie soos wat ons gehad het om te wag vyf sekondes vir een en dan na dit, 764 00:37:56,820 --> 00:37:59,640 vyf sekondes later kry die tweede. 765 00:37:59,640 --> 00:38:03,300 So dit is soort van, in sommige maniere, dit is nie regtig getuienis, maar dit is 766 00:38:03,300 --> 00:38:07,390 intuïtief bewyse dat dit is nie net soos wag vyf sekondes en blokkeer 767 00:38:07,390 --> 00:38:08,960 die hele draad. 768 00:38:08,960 --> 00:38:10,720 OK cool. 769 00:38:10,720 --> 00:38:17,850 >> So Aaron gevra om 'n vraag vroeër was, goed wat as ons nie iets doen - 770 00:38:17,850 --> 00:38:18,735 Yep? 771 00:38:18,735 --> 00:38:19,051 >> Publiek: Wag. 772 00:38:19,051 --> 00:38:21,585 Hoe is dit anders printf buffer, al is? 773 00:38:21,585 --> 00:38:23,010 Is dit nie outomaties doen? 774 00:38:23,010 --> 00:38:25,390 Hoekom moet ons bekommerd wees oor dit? 775 00:38:25,390 --> 00:38:26,555 >> KEVIN SCHMID: Ag, kon jy sê dat 'n mens meer tyd? 776 00:38:26,555 --> 00:38:29,510 >> Publiek: Hou nie printf buffer doen presies dieselfde ding? 777 00:38:29,510 --> 00:38:31,280 >> KEVIN SCHMID: Die 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 nie in een van die vasvrae hulle praat oor hoe as jy regs printf 781 00:38:40,609 --> 00:38:42,899 iets en dan het dit breek een tweede, en dan moet jy dit lus tien 782 00:38:42,899 --> 00:38:46,530 keer, sal dit tien sekondes wag en dan printf alles saam? 783 00:38:46,530 --> 00:38:47,460 >> KEVIN SCHMID: O, OK. 784 00:38:47,460 --> 00:38:49,170 >> Publiek: Is dit om dieselfde te doen ding dan in hierdie geval? 785 00:38:49,170 --> 00:38:52,630 >> KEVIN SCHMID: So die vraag was basies in een van die voormalige vasvrae 786 00:38:52,630 --> 00:38:57,200 of iets, daar was 'n vraag wat basies as jy sê Print f 10 787 00:38:57,200 --> 00:39:01,490 dinge op 'n tyd en dan geslaap soos in die proses van die druk van diegene wat nie, 788 00:39:01,490 --> 00:39:04,850 aan die einde vir een of ander rede, dit sou net stort diegene almal uit op die skerm. 789 00:39:04,850 --> 00:39:06,740 So is daar 'n soort van twee verskillende konsepte hier. 790 00:39:06,740 --> 00:39:10,400 >> So ek dink een ding is dat, in hierdie geval, is ons te make met twee verskillende 791 00:39:10,400 --> 00:39:13,510 soort van mense wat vra die bediener vir dinge op dieselfde tyd. 792 00:39:13,510 --> 00:39:17,455 En die rede dat die printf soort wag soos wat en stort dit uit 793 00:39:17,455 --> 00:39:21,760 in 'n keer is meer verwant aan hoe printf soort van - 794 00:39:21,760 --> 00:39:25,100 sodat die pad printf is eintlik geïmplementeer is dit basies het om te 795 00:39:25,100 --> 00:39:28,850 praat met die bedryfstelsel te skryf dat dinge aan die konsole. 796 00:39:28,850 --> 00:39:33,460 Sodat dit nie wil hê dat alle van daardie te doen dinge onmiddellik wanneer jy sê printf 797 00:39:33,460 --> 00:39:36,260 paar string, want dit kan kry duur as dit moet 798 00:39:36,260 --> 00:39:37,340 doen dat elke keer. 799 00:39:37,340 --> 00:39:41,530 >> So as jy dit doen printf hey, jou program dalk nie eintlik druk wat 800 00:39:41,530 --> 00:39:43,040 onmiddellik na die konsole. 801 00:39:43,040 --> 00:39:46,080 Dit kan sê, OK, ek het dit geskryf. 802 00:39:46,080 --> 00:39:49,570 En dan soort van wag vir jou te gee dit 'n bietjie meer voor eintlik 803 00:39:49,570 --> 00:39:51,380 uit te skryf aan die konsole. 804 00:39:51,380 --> 00:39:54,040 >> So die rede dat dit die geval was - 805 00:39:54,040 --> 00:39:56,450 en dit is soort van nie-verwante aan die slaap - 806 00:39:56,450 --> 00:40:00,060 is dat die slaap was soort van net ingespuit in daar te demonstreer 807 00:40:00,060 --> 00:40:02,480 feit dat dit nie skryf dit sinkronies. 808 00:40:02,480 --> 00:40:06,210 Maar die rede vir dit is net prestasie, sodat jy nie hoef te 809 00:40:06,210 --> 00:40:08,920 maak dat baie kontakte Die bedryfstelsel. 810 00:40:08,920 --> 00:40:12,300 >> Maar hier, wat ons regtig probeer om te doen met hierdie slaap ding is net show 811 00:40:12,300 --> 00:40:17,730 dat wanneer ons twee mense wat hierdie webwerf, is dit nie gaan sit 812 00:40:17,730 --> 00:40:22,310 hulle in 'n lyn waar dit gaan om te sê Ek het jou te help, en dan wanneer ek 813 00:40:22,310 --> 00:40:25,350 heeltemal klaar te help jy na hierdie vyf sekondes, dan gaan ek 814 00:40:25,350 --> 00:40:26,750 beweeg na die volgende persoon. 815 00:40:26,750 --> 00:40:29,515 Dus is die eerste persoon se versoek nie saamvat daardie gebeurtenis lus 816 00:40:29,515 --> 00:40:31,610 as dit sin maak. 817 00:40:31,610 --> 00:40:34,980 >> Maar hier is eintlik 'n voorbeeld iets wat le 818 00:40:34,980 --> 00:40:36,090 die geval lus. 819 00:40:36,090 --> 00:40:39,130 So hier is 'n verskriklike funksie te bereken die nth Fibonacci. 820 00:40:39,130 --> 00:40:43,510 Dit is letterlik die ergste manier wat jy kan bereken die de Fibonacci getal. 821 00:40:43,510 --> 00:40:48,480 En dit is eintlik net om te erken waar dit vandaan kom, 822 00:40:48,480 --> 00:40:49,330 daar is eintlik - 823 00:40:49,330 --> 00:40:53,230 Ek bedoel, kan jy probeer om te gaan soek - maar daar is soos 'n baie lang blog 824 00:40:53,230 --> 00:40:54,130 plaas dat iemand geskryf het. 825 00:40:54,130 --> 00:40:55,660 Dit is soos een van daardie dinge Reddit. 826 00:40:55,660 --> 00:40:59,650 Maar iemand gekritiseer Node.js, en hulle gebruik dit as 'n voorbeeld. 827 00:40:59,650 --> 00:41:03,700 So ek soort wou net wys dat jy twee verskillende perspektiewe om net te kry 828 00:41:03,700 --> 00:41:07,320 'n algemene begrip van die konsepte agter hierdie twee dinge. 829 00:41:07,320 --> 00:41:13,050 >> Maar dit is gekies as net 'n aaklige, verskriklik ondoeltreffende computationeel 830 00:41:13,050 --> 00:41:15,940 intensiewe manier om die te bereken de Fibonacci getal. 831 00:41:15,940 --> 00:41:21,180 So, net soos 'n kant nota, hoekom is dit verskriklik soos in een manier? 832 00:41:21,180 --> 00:41:23,210 Yep? 833 00:41:23,210 --> 00:41:25,130 >> Publiek: Sê jy begin met 1000. 834 00:41:25,130 --> 00:41:27,050 1000 split in 999 en 998. 835 00:41:27,050 --> 00:41:28,970 Elkeen van hierdie split in twee dinge. 836 00:41:28,970 --> 00:41:30,890 Elkeen van hierdie split in twee dinge. 837 00:41:30,890 --> 00:41:31,355 >> KEVIN SCHMID: Right. 838 00:41:31,355 --> 00:41:32,400 >> Publiek: al die pad af. 839 00:41:32,400 --> 00:41:32,840 >> KEVIN SCHMID: Presies. 840 00:41:32,840 --> 00:41:37,330 So net om te herhaal vir die kamera, as ek noem fib op soos 1000 of iets 841 00:41:37,330 --> 00:41:41,810 soos wat dit is natuurlik nie minder nie as of gelyk aan een so ek gaan 842 00:41:41,810 --> 00:41:46,040 gaan na hierdie geval anders, en dan gaan ek te noem fib 999 plus fib 998. 843 00:41:46,040 --> 00:41:50,290 En dan pretty much al wat werk wat fib 999 doen, is 844 00:41:50,290 --> 00:41:52,950 soort op hierdie vlak. 845 00:41:52,950 --> 00:41:55,620 As jy gaan sit, is dit selfs meer oorbodig as dit, maar as jy net 846 00:41:55,620 --> 00:42:01,390 dink die berekening van fib 998 kry ons redelik naby aan fib 999. 847 00:42:01,390 --> 00:42:05,860 So moet ons regtig 'n bietjie meer slim oor hoe ons soort van onthou 848 00:42:05,860 --> 00:42:07,580 hierdie, maar ons is nie hergebruik hierdie dinge nie. 849 00:42:07,580 --> 00:42:11,860 So jy kan dink hierdie groot, reusagtige boom wat net verskriklik. 850 00:42:11,860 --> 00:42:12,940 >> Maar in elk geval, OK. 851 00:42:12,940 --> 00:42:14,040 So dit was fib. 852 00:42:14,040 --> 00:42:15,530 Dit neem net 'n rukkie om te hardloop. 853 00:42:15,530 --> 00:42:16,510 Yep? 854 00:42:16,510 --> 00:42:17,760 >> Publiek: [onhoorbaar]. 855 00:42:17,760 --> 00:42:20,430 856 00:42:20,430 --> 00:42:22,481 >> KEVIN SCHMID: Ag, kon jy herhaal die vraag? 857 00:42:22,481 --> 00:42:23,731 >> Publiek: [onhoorbaar]. 858 00:42:23,731 --> 00:42:30,840 859 00:42:30,840 --> 00:42:33,990 >> KEVIN SCHMID: O so dit is net-kode wat gaan wees soort op die 860 00:42:33,990 --> 00:42:34,850 bediener kant. 861 00:42:34,850 --> 00:42:38,100 So gaan dit nie te vinde in die leser of iets nie. 862 00:42:38,100 --> 00:42:42,160 Dit is basies wat ons het, is dat wanneer die gebruiker hier redelik baie fabrikate 863 00:42:42,160 --> 00:42:45,300 hulle versoek weer, wanneer ons soort 'n versoek, ons gaan om te bel 864 00:42:45,300 --> 00:42:47,040 hierdie funksie op die bediener kant. 865 00:42:47,040 --> 00:42:50,480 En dan sal ons die resultaat terug te kry van die roeping van die funksie. 866 00:42:50,480 --> 00:42:52,460 En dan sal ons net druk dit aan die gebruiker. 867 00:42:52,460 --> 00:42:54,580 Sodat die gebruiker nie regtig gaan met hierdie funksie te veel. 868 00:42:54,580 --> 00:42:57,270 >> Was dat die vraag? 869 00:42:57,270 --> 00:42:58,470 Is wat sin maak? 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 >> So weer, doen ons dit geheel res.writeHead ding waar ons druk 873 00:43:04,240 --> 00:43:05,150 die kop. 874 00:43:05,150 --> 00:43:09,730 En dan eindig ek die reaksie deur te doen die magie nommer is fib 45. 875 00:43:09,730 --> 00:43:12,100 So laat ons net die uitvoering van hierdie bediener. 876 00:43:12,100 --> 00:43:15,190 So ek gaan 'n knoop fib.js. te doen 877 00:43:15,190 --> 00:43:17,340 So nou is my fib bediener loop. 878 00:43:17,340 --> 00:43:21,790 >> En dan is hier, ek gaan een van hierdie dinge te doen. 879 00:43:21,790 --> 00:43:22,200 OK? 880 00:43:22,200 --> 00:43:24,960 So is ek net gaan om te sê, krul. 881 00:43:24,960 --> 00:43:32,226 So dit gaan 'n rukkie neem, maar hopelik binnekort sal dit voltooi en 882 00:43:32,226 --> 00:43:35,660 dit sal druk wat 45 Fibonacci nommer. 883 00:43:35,660 --> 00:43:36,910 >> Publiek: [onhoorbaar]. 884 00:43:36,910 --> 00:43:40,720 885 00:43:40,720 --> 00:43:42,050 >> KEVIN SCHMID: Daar moet raak redelik gou gedoen. 886 00:43:42,050 --> 00:43:43,780 So dit behoort te neem 5-6 sekondes. 887 00:43:43,780 --> 00:43:48,570 Ek weet nie wat is net V8 synde super vinnig, maar in elk geval, dit is 'n 888 00:43:48,570 --> 00:43:52,700 baie kort voorbeeld en doelbewus onelegant van 'n nie-triviale 889 00:43:52,700 --> 00:43:54,200 berekening. 890 00:43:54,200 --> 00:43:56,700 So na 'n ruk, kry dit nie. 891 00:43:56,700 --> 00:44:02,130 >> Maar nou, wat as ek doen wat dieselfde soort eksperiment voor waar ek 892 00:44:02,130 --> 00:44:04,010 twee versoeke op dieselfde tyd? 893 00:44:04,010 --> 00:44:06,990 So hier gaan ek 'n krul op daardie adres, en ek gaan 894 00:44:06,990 --> 00:44:08,260 'n ander Curl te doen. 895 00:44:08,260 --> 00:44:12,070 En onthou, wanneer ons het dit vir die slaap bediener, wanneer ons basies moes dit 896 00:44:12,070 --> 00:44:15,320 na vyf sekondes, het hulle mooi veel twee het regs agter 897 00:44:15,320 --> 00:44:16,380 rondom dieselfde tyd. 898 00:44:16,380 --> 00:44:18,650 So dit is nie besonder vasgebind. 899 00:44:18,650 --> 00:44:20,290 >> Maar laat ons probeer om dit nou. 900 00:44:20,290 --> 00:44:22,370 OK, so ons het ons twee prosesse. 901 00:44:22,370 --> 00:44:24,210 Onthou dit is die proses-ID's. 902 00:44:24,210 --> 00:44:25,900 Dit gaan 'n bietjie wees ongemaklike terwyl ons stalletjie. 903 00:44:25,900 --> 00:44:31,340 904 00:44:31,340 --> 00:44:35,360 So laat ons net hier bly en wag. 905 00:44:35,360 --> 00:44:37,090 >> So een van hulle moet kom terug na soos - 906 00:44:37,090 --> 00:44:39,190 OK, so een kom terug. 907 00:44:39,190 --> 00:44:43,570 Maar hoekom het nie die tweede een terug te kom net nog nie? 908 00:44:43,570 --> 00:44:44,389 Yep? 909 00:44:44,389 --> 00:44:49,280 >> Publiek: Die bediener kan niks doen nie terwyl dit die berekening van die groot aantal. 910 00:44:49,280 --> 00:44:51,620 >> KEVIN SCHMID: Right. 911 00:44:51,620 --> 00:44:55,395 So het die reaksie was net dat die bediener werklik kan niks doen nie, terwyl 912 00:44:55,395 --> 00:44:57,460 dit is die berekening van die Fibonacci-nommer. 913 00:44:57,460 --> 00:44:59,360 So nou is ek net my twee dinge terug. 914 00:44:59,360 --> 00:45:03,210 Maar ek dink net om te dink oor die kode 'n bietjie meer, hoe dit werk 915 00:45:03,210 --> 00:45:05,030 en alles. 916 00:45:05,030 --> 00:45:11,750 >> So hierdie funksie hier is die kode wat Ek het gesê hierdie bediener te hardloop wanneer dit 917 00:45:11,750 --> 00:45:14,100 ontvang 'n nuwe inkomende versoek. 918 00:45:14,100 --> 00:45:17,940 So dit is net gaan om te hardloop deur middel van hierdie hele kode, en dan is dit gaan om te gaan 919 00:45:17,940 --> 00:45:21,120 terug na die gebeurtenis lus en dan voortgaan kontrole vir nuwe geleenthede. 920 00:45:21,120 --> 00:45:23,670 So basies wat ons gebeur is die bediener is 921 00:45:23,670 --> 00:45:25,080 luister vir nuwe dinge. 922 00:45:25,080 --> 00:45:28,070 Die eerste persoon vra vir wat 45 is. 923 00:45:28,070 --> 00:45:30,490 Ons gebruik hierdie kode om dit te bereken. 924 00:45:30,490 --> 00:45:33,420 Hierdie kode neem ongeveer vyf ses sekondes te hardloop. 925 00:45:33,420 --> 00:45:36,990 Dan gaan ons terug na die gebeurtenis lus en kyk vir 'n nuwe versoeke. 926 00:45:36,990 --> 00:45:42,700 >> So dit is 'n voorbeeld van hoe, as jy dinge wat sogenaamde bereken 927 00:45:42,700 --> 00:45:48,140 gebind, of gebruik 'n baie computational, nie mag nie, maar soos is 928 00:45:48,140 --> 00:45:50,260 computationeel intensiewe - 929 00:45:50,260 --> 00:45:54,080 Ek dink een ding om te sê oor hierdie dat hierdie funksie is heeltemal te doen, 930 00:45:54,080 --> 00:45:56,310 vir die grootste deel, mooi nuttige werk reg. 931 00:45:56,310 --> 00:45:59,970 Die hele tyd dat terugbel funksie hardloop, dit was mooi 932 00:45:59,970 --> 00:46:03,670 veel geld spandeer die meeste van sy tyd net rekenaar wat de Fibonacci getal. 933 00:46:03,670 --> 00:46:05,930 >> Maar ons het net een draad het om te hanteer. 934 00:46:05,930 --> 00:46:10,270 In die Apache model, wanneer twee mense gemaak om die versoek te kry fib 45, ons 935 00:46:10,270 --> 00:46:11,610 sou twee verskillende drade gehad het. 936 00:46:11,610 --> 00:46:15,060 En dan is die bedryfstelsel se werk sou gewees het, of die gebruiker-vlak 937 00:46:15,060 --> 00:46:18,660 kode wat die bestuur van die drade, sou het is dat om te sny op die 938 00:46:18,660 --> 00:46:23,060 CPU, of selfs as jy het verskeie CPUs, versprei hulle eweredig oor die CPUs 939 00:46:23,060 --> 00:46:26,130 sodat hulle albei afwerking ongeveer op dieselfde tyd. 940 00:46:26,130 --> 00:46:31,120 >> So net om te wys hoe ons kan soort van - en dit is nie 'n totale volmaakte 941 00:46:31,120 --> 00:46:34,280 oplossing nie, maar soort van hoe ons kan maak 'n terug te kom hier en doen 942 00:46:34,280 --> 00:46:35,880 'n bietjie beter. 943 00:46:35,880 --> 00:46:41,540 So, wat ek hier het is 'n program genaamd FIB C. En dit basies gebruik 944 00:46:41,540 --> 00:46:45,690 'n ander een van Node se modules genoem Die Kind Proses Module. 945 00:46:45,690 --> 00:46:49,210 So ek het ingesluit dat die top soort van soos ek sou 'n pond doen sluit 946 00:46:49,210 --> 00:46:51,230 kind process.h of iets. 947 00:46:51,230 --> 00:46:56,210 Nou het ek toegang tot hierdie CP veranderlike wat al my funksies. 948 00:46:56,210 --> 00:47:01,810 >> So nou wat ek doen in hierdie reaksie hanteerder is Ek hardloop hierdie program 949 00:47:01,810 --> 00:47:04,100 dot streep fib 45. 950 00:47:04,100 --> 00:47:06,820 So, wat ek gedoen het - en ek gaan net om uit te stap van hierdie program vir 'n 951 00:47:06,820 --> 00:47:07,620 bietjie - 952 00:47:07,620 --> 00:47:11,060 is ek 'n C program wat geskryf is dat basies bere die 953 00:47:11,060 --> 00:47:12,630 de Fibonacci getal. 954 00:47:12,630 --> 00:47:15,960 So hier is net 'n program wat ek geskryf het in C wat bere hierdie. 955 00:47:15,960 --> 00:47:19,040 Ek kan stel nie, en ek kan hardloop dit by die opdrag lyn. 956 00:47:19,040 --> 00:47:22,150 En dit gaan te bereken die 45 Fibonacci nommer. 957 00:47:22,150 --> 00:47:24,510 >> So sien dit net neem pretty much so lank. 958 00:47:24,510 --> 00:47:28,240 Ek kon seker Dash 03 tot gebruik het optimaliseer dit of iets soos dit, 959 00:47:28,240 --> 00:47:31,050 maar ek het net soos gereelde samesteller instellings. 960 00:47:31,050 --> 00:47:33,260 En druk dit uit. 961 00:47:33,260 --> 00:47:36,830 >> Maar nou, wat ek soort van doen? 962 00:47:36,830 --> 00:47:39,800 O jammer, verkeerde lêer. 963 00:47:39,800 --> 00:47:42,800 So ek doen dieselfde dinge met die kop as tevore. 964 00:47:42,800 --> 00:47:45,780 Toe ek hierdie cp.exec. 965 00:47:45,780 --> 00:47:49,460 So, wat dit gaan doen, is dit gaan hierdie program uit te voer. 966 00:47:49,460 --> 00:47:51,960 Maar die manier waarop dit werk, is dat dit gaan nie om te wag vir 967 00:47:51,960 --> 00:47:53,400 daardie program te voltooi. 968 00:47:53,400 --> 00:47:56,000 Dit sê net basies voer hierdie program. 969 00:47:56,000 --> 00:47:58,700 So tik basies dit in die beveel vinnige soort. 970 00:47:58,700 --> 00:48:02,350 >> En dan, wanneer jy klaar is met dit is, loop hierdie funksie. 971 00:48:02,350 --> 00:48:04,800 So nou het ons soort van kry dit herstel, iets van 972 00:48:04,800 --> 00:48:06,750 soos ons wag nie. 973 00:48:06,750 --> 00:48:08,530 Maak dat die soort van sin maak? 974 00:48:08,530 --> 00:48:08,990 Yep? 975 00:48:08,990 --> 00:48:11,060 >> Publiek: [onhoorbaar]? 976 00:48:11,060 --> 00:48:13,610 >> KEVIN SCHMID: So dit sal eintlik open 'n nuwe proses om dit te doen. 977 00:48:13,610 --> 00:48:19,310 So dit is eintlik, in sommige maniere, kwaad nie super kwaad, maar dit is 978 00:48:19,310 --> 00:48:22,990 belangrik om te sê dat hierdie is 'n soort van terug te gaan na, aan die een kant, die Apache 979 00:48:22,990 --> 00:48:26,450 model waar ons drade en prosesse vir elke versoek of 980 00:48:26,450 --> 00:48:29,280 prosesse vir elke versoek. 981 00:48:29,280 --> 00:48:32,090 So dit is 'n soort van analoog na wat Apache doen. 982 00:48:32,090 --> 00:48:35,110 In sommige gevalle is, sal dit net gebruik om 'n nuwe draad, wat 'n bietjie meer lig 983 00:48:35,110 --> 00:48:39,040 gewig as 'n proses, maar Apache kon beland vurk 'n nuwe proses 984 00:48:39,040 --> 00:48:43,370 wat is 'n soort van wat ons hier doen implisiet deur te doen dot streep fib 45. 985 00:48:43,370 --> 00:48:48,690 >> En dan in daardie geval, ons soort aangaan dieselfde uitgawes van prosesse. 986 00:48:48,690 --> 00:48:50,710 So dit is net een ding wat jy kan doen. 987 00:48:50,710 --> 00:48:52,600 Maar net hierdie soort van loop om te wys. 988 00:48:52,600 --> 00:48:57,120 En hierdie gesprek is net regtig daarop gemik is om die aanbieding van hierdie soort programme as 'n 989 00:48:57,120 --> 00:49:00,710 wyse waarop die verskillende perspektiewe op om te wys hoe stuur soos wat te ontwerp. 990 00:49:00,710 --> 00:49:08,300 So hierdie aktief is, en dan nou as ek dit doen dit weer, ek het twee proses-ID's. 991 00:49:08,300 --> 00:49:10,320 >> Laat ons net praat oor dinge uit te wys. 992 00:49:10,320 --> 00:49:11,980 So sien dat hulle toenemend. 993 00:49:11,980 --> 00:49:12,700 Dit is cool. 994 00:49:12,700 --> 00:49:15,140 Want dit was 27.122 voor. 995 00:49:15,140 --> 00:49:18,580 Maar kennisgewing nou, kom hulle terug min of meer dieselfde tyd. 996 00:49:18,580 --> 00:49:23,960 >> En nou, 'n goeie vraag om te vra oor Waarom was dit die geval is, wie se werk 997 00:49:23,960 --> 00:49:27,590 was dit nou soort van te maak hierdie dinge soort van speel billike met mekaar 998 00:49:27,590 --> 00:49:31,350 ander, is hierdie twee gevalle van dot streep fib 45 dat ek gehardloop 999 00:49:31,350 --> 00:49:32,880 of dat Node gehardloop? 1000 00:49:32,880 --> 00:49:36,940 Wie maak soort van dit regverdig dat hulle albei kry soort van gebalanseerde hardloop tyd? 1001 00:49:36,940 --> 00:49:42,900 1002 00:49:42,900 --> 00:49:44,220 >> Publiek: [onhoorbaar]. 1003 00:49:44,220 --> 00:49:44,620 >> KEVIN SCHMID: Ja. 1004 00:49:44,620 --> 00:49:49,740 So basies, as ek dit doen dot streep fib 45 of iets soos dit, nou is dit 1005 00:49:49,740 --> 00:49:53,750 soort tot die bedryfstelsel hanteer die runtime van die programme. 1006 00:49:53,750 --> 00:49:56,920 En nou is dit hulle skeduleer op verskillende CPUs of dit 1007 00:49:56,920 --> 00:49:58,330 hulle kan skeduleer. 1008 00:49:58,330 --> 00:50:01,870 Dit kan sny tot die tyd dat 'n mens CPU kry dit of dat hulle 1009 00:50:01,870 --> 00:50:03,330 uit te voer op 'n SVE. 1010 00:50:03,330 --> 00:50:05,620 So wat is die idee agter dit. 1011 00:50:05,620 --> 00:50:07,220 Is wat sin maak vir almal? 1012 00:50:07,220 --> 00:50:10,950 So nou Node is regtig nie speel 'n deel in die verdeling van hierdie take. 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 >> So dit is byna dit vir voorbeelde. 1016 00:50:17,840 --> 00:50:23,370 Ek wou net een ding om te wys omdat baie van hierdie tot dusver 1017 00:50:23,370 --> 00:50:27,350 nie heeltemal super praktiese in sommige gevalle. 1018 00:50:27,350 --> 00:50:30,970 Ek kan my voorstel die huis te kom nadat hierdie praat en iets en sê soos 1019 00:50:30,970 --> 00:50:35,710 Wel, ek het soort van uit dat sprake dat Ek kan 'n Fibonacci bediener vir maak 1020 00:50:35,710 --> 00:50:37,360 my finale projek. 1021 00:50:37,360 --> 00:50:40,770 So hier is net soort van nog 'n voorbeeld wat hopelik sal wees - 1022 00:50:40,770 --> 00:50:44,620 Miskien nie, maar miskien is - 'n bietjie meer soort relevant tot die finale projekte en 1023 00:50:44,620 --> 00:50:46,440 dink vooruit vir dinge soos dat. 1024 00:50:46,440 --> 00:50:48,870 >> So dit is chat.js. 1025 00:50:48,870 --> 00:50:52,290 So dit is soort van soos 'n monster bediener kant kode wat jy kan gebruik om 1026 00:50:52,290 --> 00:50:55,700 opstel van 'n klein chat bediener soos jy gesien het op die 1027 00:50:55,700 --> 00:50:56,630 Facebook Chat of wat ook al. 1028 00:50:56,630 --> 00:50:59,990 So ek is nie te sê dit is soos Facebook Chat, maar dit is 'n soort van 1029 00:50:59,990 --> 00:51:06,230 soos 'n goeie nie - miskien nie goed nie, maar miskien goeie - beginpunt vir 'n geselsie 1030 00:51:06,230 --> 00:51:08,560 bediener vir jou webwerf vir 'n finale projek. 1031 00:51:08,560 --> 00:51:11,040 So laat ons kyk na wat dit doen. 1032 00:51:11,040 --> 00:51:15,500 >> So is ons om hierdie spesiale ding aan die bokant, hierdie var SiO 1033 00:51:15,500 --> 00:51:17,050 gelyk vereis Socket.IO. 1034 00:51:17,050 --> 00:51:20,280 So, dit is 'n ander ding wat dit nie doen nie eintlik kom saam met 1035 00:51:20,280 --> 00:51:22,300 Knoop, maar jy kan dit installeer. 1036 00:51:22,300 --> 00:51:23,480 Dit is 'n knoop module. 1037 00:51:23,480 --> 00:51:25,670 So dit is net soos 'n paar uitbreiding Node. 1038 00:51:25,670 --> 00:51:29,220 >> SocketIO is eintlik baie gaaf. 1039 00:51:29,220 --> 00:51:32,550 Dit is 'n abstraksie wat basies wat dit is, is dit jou toelaat om te 1040 00:51:32,550 --> 00:51:35,770 hierdie stroom van kommunikasie tussen 'n web 1041 00:51:35,770 --> 00:51:39,430 leser en 'n web bediener. 1042 00:51:39,430 --> 00:51:45,250 So vir die grootste deel so ver, het ons het hierdie baie vinnige een sekonde of twee 1043 00:51:45,250 --> 00:51:48,790 tweede kommunikasie tussen 'n web leser en die web bediener. 1044 00:51:48,790 --> 00:51:53,310 So dit is basies gaan na google.com, kry ' die dinge, stuur dit terug, en dan 1045 00:51:53,310 --> 00:51:53,770 ons gedoen het. 1046 00:51:53,770 --> 00:51:56,560 Ons is nooit weer praat tot die gebruiker in iets anders. 1047 00:51:56,560 --> 00:52:01,090 >> Maar wat Socket.IO en soortgelyke aard van die dinge - en SocketIO is eintlik een 1048 00:52:01,090 --> 00:52:03,940 van die dinge wat gebou is op as WebSocket wat is 'n soort van beskikbare 1049 00:52:03,940 --> 00:52:06,440 as deel van HTML5 - 1050 00:52:06,440 --> 00:52:09,620 wat u toelaat om hierdie te hê voortgesette dialoog. 1051 00:52:09,620 --> 00:52:13,990 En dit is baie nuttig in 'n chat server soort van ding, want dit is 1052 00:52:13,990 --> 00:52:17,390 soort van soos 'n voortdurende dialoog in sommige maniere, want as jy gesels 1053 00:52:17,390 --> 00:52:21,540 met iemand, kan jy nou stuur net 'n boodskap af in die pyp, en dan die 1054 00:52:21,540 --> 00:52:23,940 bediener kan 'n boodskap stuur af in die pyp na die ander persoon wat jy is 1055 00:52:23,940 --> 00:52:24,520 gesels met. 1056 00:52:24,520 --> 00:52:26,903 En dan kan jy dit ruil soos dit. 1057 00:52:26,903 --> 00:52:30,590 1058 00:52:30,590 --> 00:52:32,850 >> So dit is soort van wat SocketIO is goed vir. 1059 00:52:32,850 --> 00:52:38,400 Die rede is dat SocketIO gebruik WebSockets as een ding is wat in 1060 00:52:38,400 --> 00:52:43,980 Benewens net plain ou WebSockets, Dit is ook nie 'n paar truuks basies 1061 00:52:43,980 --> 00:52:45,610 maak dit die leser versoenbaar is. 1062 00:52:45,610 --> 00:52:50,040 So blaaiers soos Internet Explorer WebSockets ongelukkig nie ondersteun nie 1063 00:52:50,040 --> 00:52:50,810 reg uit die boks. 1064 00:52:50,810 --> 00:52:55,290 So dit maak gebruik van 'n ander soort van die koel netjiese dinge met Adobe Flash te laat 1065 00:52:55,290 --> 00:52:57,170 jy kruis leser ondersteuning te hê. 1066 00:52:57,170 --> 00:52:58,800 So dit is baie handig. 1067 00:52:58,800 --> 00:53:02,440 >> En eintlik, ek weet ek is soort loop op tyd hier, maar CS50 1068 00:53:02,440 --> 00:53:08,490 Bespreek, het jy al ooit iets gesien soos, ek weet nie, leë so en so is 1069 00:53:08,490 --> 00:53:11,030 antwoord op hierdie post of iets soos dit, dat die funksie? 1070 00:53:11,030 --> 00:53:12,250 Dit is SocketIO. 1071 00:53:12,250 --> 00:53:15,580 So wanneer iemand begin tik in die bespreek boks 'n antwoord of te maak 1072 00:53:15,580 --> 00:53:20,040 iets jou blaaier wat is genoem in SocketIO straal 'n soort van 1073 00:53:20,040 --> 00:53:22,660 gebeurtenis wat sê iemand is antwoord op hierdie post. 1074 00:53:22,660 --> 00:53:26,110 >> Toe die bediener sê, OK, wat moet ek doen? 1075 00:53:26,110 --> 00:53:29,270 Wel, nou ek het die ander ouens te vertel wat op CS50 Bespreek soek 1076 00:53:29,270 --> 00:53:31,170 in hierdie pos wat iemand se antwoord. 1077 00:53:31,170 --> 00:53:34,190 So dit is soort van wat SocketIO is goed vir hierdie voortgesette 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 >> So, wat ek hier - en ons is net gaan die verbindings skikking te ignoreer 1081 00:53:40,060 --> 00:53:41,390 vir 'n bietjie - 1082 00:53:41,390 --> 00:53:43,080 wat ek doen, is ek 'n ander te luister. 1083 00:53:43,080 --> 00:53:46,880 So dit is net die manier Socket.IO word sê Kom ons luister op hierdie hawe. 1084 00:53:46,880 --> 00:53:50,060 En dan doen ek dit op verband. 1085 00:53:50,060 --> 00:53:53,360 So dit is net basies Socket IK se manier om te sê, wanneer ons 'n 1086 00:53:53,360 --> 00:53:55,840 verband wil ek u hierdie kode uit te voer. 1087 00:53:55,840 --> 00:53:59,870 >> En let op dat in plaas van rec en res geslaag daar Ek het Socket. 1088 00:53:59,870 --> 00:54:03,260 En dit Socket idee is basies hierdie ding wat jy kan skryf aan en lees 1089 00:54:03,260 --> 00:54:05,750 van wat die gebruiker se boodskappe moontlik. 1090 00:54:05,750 --> 00:54:10,700 En die boodskappe wat jy wil stuur kan gaan deur daardie voetstuk. 1091 00:54:10,700 --> 00:54:12,140 Is wat sin maak? 1092 00:54:12,140 --> 00:54:14,490 So dit is die voortsetting van ding. 1093 00:54:14,490 --> 00:54:17,820 >> So, wat ek doen, is ek noem Socket.emit. 1094 00:54:17,820 --> 00:54:20,330 En stoot neem mooi veel twee argumente. 1095 00:54:20,330 --> 00:54:24,100 Die eerste argument is 'n string net wat die tipe 1096 00:54:24,100 --> 00:54:25,270 ding wat jy afgee. 1097 00:54:25,270 --> 00:54:28,120 So vir hierdie geval, ek het gebruik hierdie string nuwe boodskap. 1098 00:54:28,120 --> 00:54:32,670 En dit is net basies sê dat die die tipe van hierdie ding, wat ek 1099 00:54:32,670 --> 00:54:34,750 stuur, is 'n nuwe boodskap. 1100 00:54:34,750 --> 00:54:38,460 Sodat jy kan luister vir spesifieke tipes soos 'n nuwe boodskap of wat ook al 1101 00:54:38,460 --> 00:54:39,960 deur die gebruik van dot op. 1102 00:54:39,960 --> 00:54:44,570 >> So verband en die gebruiker gestuur daar, as jy kyk na waar ons 'n beroep op dot, 1103 00:54:44,570 --> 00:54:48,150 dit is die ander snare wat verteenwoordig tipes gebruiker boodskappe. 1104 00:54:48,150 --> 00:54:52,060 So dit is basies wat jy kan hierdie stole het een van hierdie boodskap tipes, en 1105 00:54:52,060 --> 00:54:55,520 dan om iets te doen in reaksie op een van hierdie boodskap tipes 1106 00:54:55,520 --> 00:54:57,640 >> So ek afgee hierdie nuwe boodskap. 1107 00:54:57,640 --> 00:55:00,540 Ons gaan connections.push te ignoreer vir 'n tweede. 1108 00:55:00,540 --> 00:55:03,360 Maar dan sê ek, Socket.on gebruiker gestuur. 1109 00:55:03,360 --> 00:55:07,540 So nou is dit is soort van soos wanneer die gebruiker stuur my 'n boodskap, ek wil 1110 00:55:07,540 --> 00:55:09,240 jy hierdie kode uit te voer. 1111 00:55:09,240 --> 00:55:12,080 En sien dat dat anonieme funksie neem in hierdie veranderlike 1112 00:55:12,080 --> 00:55:16,300 genoem data wat basies gaan die gebruiker se boodskap te hê. 1113 00:55:16,300 --> 00:55:20,700 >> So laat ons nou soort van praat oor die verbindings skikking. 1114 00:55:20,700 --> 00:55:24,590 So dit is ontwerp vir 'n chat kliënt waar basies almal is soort van in 1115 00:55:24,590 --> 00:55:25,950 dieselfde chat room. 1116 00:55:25,950 --> 00:55:29,640 So basies, wat ons nodig het om te hou rondom is 'n paar skikking wat basies 1117 00:55:29,640 --> 00:55:33,170 verteenwoordig al die mense gesels in sommige maniere, as dit sin maak. 1118 00:55:33,170 --> 00:55:33,340 Reg? 1119 00:55:33,340 --> 00:55:37,190 Omdat ons wat die ouens om te weet is sodat ons hulle die boodskappe kan stuur 1120 00:55:37,190 --> 00:55:39,140 dat ander mense aan ons stuur. 1121 00:55:39,140 --> 00:55:44,440 >> So, wat hierdie kode doen, is wanneer die gebruiker stuur 'n boodskap - dit is die tipe 1122 00:55:44,440 --> 00:55:45,300 die geval - 1123 00:55:45,300 --> 00:55:47,120 Ons gaan hierdie kode uit te voer. 1124 00:55:47,120 --> 00:55:51,240 En wat ons doen, is ons loop deur middel van hierdie skikking wat ons verbindings genoem. 1125 00:55:51,240 --> 00:55:54,390 En pretty much vir elke verbinding behalwe die een wat ons s'n, dit is 1126 00:55:54,390 --> 00:55:59,520 wat hierdie kode sê, stuur ons 'n nuwe boodskap wat aangeheg boodskap 1127 00:55:59,520 --> 00:56:01,210 inligting. 1128 00:56:01,210 --> 00:56:04,880 >> So as jy hier sien, wat ek gedoen het toe die gebruiker eintlik maak 'n nuwe 1129 00:56:04,880 --> 00:56:08,560 verband is ek het bygevoeg met die JavaScript.push metode, is dit 1130 00:56:08,560 --> 00:56:12,100 basies net sê soos voeg dat Socket as 'n waarde in 1131 00:56:12,100 --> 00:56:13,900 ons verbindings skikking. 1132 00:56:13,900 --> 00:56:20,560 So nou wanneer hierdie kode loop, sal dit stuur dinge aan dié besondere 1133 00:56:20,560 --> 00:56:22,020 verbindings. 1134 00:56:22,020 --> 00:56:26,980 So dit kan 'n goeie beginpunt wees vir die maak van 'n chat server 1135 00:56:26,980 --> 00:56:28,250 of iets soortgelyks. 1136 00:56:28,250 --> 00:56:33,315 >> En die aard van die cool ding is dat die kode wat jy sien hier vir soos op en 1137 00:56:33,315 --> 00:56:36,390 stoot en dinge soos wat dieselfde soort van JavaScript-kode wat jy wil 1138 00:56:36,390 --> 00:56:39,260 skryf in die leser in interaksie te tree met die bediener. 1139 00:56:39,260 --> 00:56:42,480 So dit is waarom SocketIO is soort netjies en nuttig in die manier. 1140 00:56:42,480 --> 00:56:45,680 1141 00:56:45,680 --> 00:56:49,250 >> Ag, en net een ding ware vinnig. 1142 00:56:49,250 --> 00:56:55,970 Daar was 'n finale projek CS50 verlede jaar wat basies 'n chat geïmplementeer 1143 00:56:55,970 --> 00:56:57,840 bediener in Node.js. 1144 00:56:57,840 --> 00:57:01,350 Ek dink dit is Harvardchats.org maar ek is nie - 1145 00:57:01,350 --> 00:57:02,940 OK. 1146 00:57:02,940 --> 00:57:06,190 Ek is nie seker wat die URL is nie, maar Ek kan stuur wat uit daarna. 1147 00:57:06,190 --> 00:57:09,260 Maar dit is gaaf wat wat jy kan doen met Node.js. 1148 00:57:09,260 --> 00:57:14,680 >> So ek hoop, in die algemeen, julle het 'n goeie sin van wat Node.js is nuttig 1149 00:57:14,680 --> 00:57:17,870 en hoe jy kan dalk van toepassing jou finale projek. 1150 00:57:17,870 --> 00:57:21,050 Ek sal stuur 'n paar meer hulpbronne saam met hierdie. 1151 00:57:21,050 --> 00:57:23,170 En dankie vir die kom. 1152 00:57:23,170 --> 00:57:23,610 Dankie. 1153 00:57:23,610 --> 00:57:27,168 >> [Applous]