1 00:00:00,000 --> 00:00:08,350 2 00:00:08,350 --> 00:00:09,710 >> KEVIN Schmid: Ciao a tutti. 3 00:00:09,710 --> 00:00:12,640 Benvenuti al seminario CS50 su Node.js. 4 00:00:12,640 --> 00:00:13,955 Il mio nome è Kevin. 5 00:00:13,955 --> 00:00:15,580 Sono un TF CS50. 6 00:00:15,580 --> 00:00:17,650 E io sono un po 'come davvero entusiasta di questo seminario. 7 00:00:17,650 --> 00:00:20,430 Penso Node.js è molto cool. 8 00:00:20,430 --> 00:00:24,200 Spero che questo seminario può essere utilizzato come un bene, credo, trampolino di lancio per 9 00:00:24,200 --> 00:00:26,380 alcuni dei tuoi progetti finali se siete interessati ad utilizzare 10 00:00:26,380 --> 00:00:27,630 qualcosa come Node.js. 11 00:00:27,630 --> 00:00:29,770 12 00:00:29,770 --> 00:00:33,320 >> Ti sorta di avviamo il seminario fuori dal parlando solo di un po 'di 13 00:00:33,320 --> 00:00:36,970 tipo di sfondo scalabilità prospettive di Node.js, e poi 14 00:00:36,970 --> 00:00:39,240 ci sposteremo ad alcuni esempi di codice. 15 00:00:39,240 --> 00:00:42,340 E io ho il codice su un sito web, e si può guardare il codice. 16 00:00:42,340 --> 00:00:45,475 E dopo il seminario, sarò una sorta di colloquio su come è possibile impostare Node.js 17 00:00:45,475 --> 00:00:48,220 sul vostro computer. 18 00:00:48,220 --> 00:00:48,710 >> OK. 19 00:00:48,710 --> 00:00:49,760 Quindi cerchiamo di iniziare. 20 00:00:49,760 --> 00:00:53,700 Quindi credo che voglio solo parlare server web, in realtà, in primo luogo. 21 00:00:53,700 --> 00:00:59,730 E per iniziare questa discussione, ho fondamentalmente un diagramma che è da 22 00:00:59,730 --> 00:01:04,269 il libro di testo utilizzato per CS61, che fondamentalmente mostra l'interazione 23 00:01:04,269 --> 00:01:08,510 tra un processo client, come il tuo web il browser o come il vostro client scopo o 24 00:01:08,510 --> 00:01:11,340 qualcosa di simile, e un server web. 25 00:01:11,340 --> 00:01:15,150 Quindi questo tipo di aspetto simile al immagine che avete visto nella conferenza su 26 00:01:15,150 --> 00:01:19,270 Mercoledì dove in sostanza abbiamo un po ' processo client come Google Chrome. 27 00:01:19,270 --> 00:01:22,980 >> E poi passo uno è l' client invia una richiesta. 28 00:01:22,980 --> 00:01:27,510 In modo che possa essere qualcosa di simile Beh diciamo visitare, non lo so, CS50.net. 29 00:01:27,510 --> 00:01:29,320 Quindi noi emettiamo tale richiesta. 30 00:01:29,320 --> 00:01:34,280 E qualcuno ricorda il nome di il protocollo che specifica come tale 31 00:01:34,280 --> 00:01:35,610 richiesta deve essere strutturato? 32 00:01:35,610 --> 00:01:36,382 Yep. 33 00:01:36,382 --> 00:01:37,650 >> AUDIENCE: [incomprensibile]. 34 00:01:37,650 --> 00:01:38,150 >> KEVIN SCHMID: Esattamente. 35 00:01:38,150 --> 00:01:40,100 Così è come HTTP, giusto? 36 00:01:40,100 --> 00:01:44,720 Quindi, in pratica la specifica per quanto tale richiesta dovrebbe realmente essere posato 37 00:01:44,720 --> 00:01:47,450 out, perché alla fine della giornata, tale richiesta è davvero solo come un 38 00:01:47,450 --> 00:01:50,240 stringa che fondamentalmente dice Voglio questo. 39 00:01:50,240 --> 00:01:53,580 E la specifica per questo è HTTP. 40 00:01:53,580 --> 00:01:55,270 Ecco, questo è come un protocollo. 41 00:01:55,270 --> 00:01:57,920 >> Allora il server riceve tale richiesta. 42 00:01:57,920 --> 00:02:01,610 Quindi voi ragazzi avete un server web installato nell'apparecchio CS50. 43 00:02:01,610 --> 00:02:02,460 E 'Apache. 44 00:02:02,460 --> 00:02:06,230 E questa settimana, quando si lavora su un problema set di sette, ci troveremo a lavorare 45 00:02:06,230 --> 00:02:08,160 con il server web. 46 00:02:08,160 --> 00:02:12,380 Quindi il server riceve la richiesta, e allora deve sorta di graffiare la sua 47 00:02:12,380 --> 00:02:15,090 testa e dire come bene cosa faccio con questo? 48 00:02:15,090 --> 00:02:20,060 >> Quindi, in base a ciò che decide di fare, allora potrebbe essere necessario contattare qualche tipo 49 00:02:20,060 --> 00:02:20,730 di risorse. 50 00:02:20,730 --> 00:02:23,700 E questa risorsa può essere un sacco di cose diverse. 51 00:02:23,700 --> 00:02:26,810 Per uno, potrebbe essere solo come un file HTML statico. 52 00:02:26,810 --> 00:02:29,820 Quindi potrebbe essere solo come alcuni HTML che è come per 53 00:02:29,820 --> 00:02:31,100 il vostro sito personale. 54 00:02:31,100 --> 00:02:35,360 Potrebbe essere un file statico come un'immagine o come un film che avete. 55 00:02:35,360 --> 00:02:37,660 Si potrebbe anche avere a parlare a una sorta di banca dati 56 00:02:37,660 --> 00:02:39,530 come un database MySQL. 57 00:02:39,530 --> 00:02:43,910 Quindi non sempre deve comunicare con una risorsa, ma in 58 00:02:43,910 --> 00:02:45,700 alcuni casi, potrebbe. 59 00:02:45,700 --> 00:02:47,800 >> Allora che cosa sta andando a fare dopo che è sta andando a 60 00:02:47,800 --> 00:02:49,430 rispedire la risposta. 61 00:02:49,430 --> 00:02:53,130 E la risposta di questo è anche specificato da HTTP. 62 00:02:53,130 --> 00:02:54,830 Allora il cliente può ricevere. 63 00:02:54,830 --> 00:02:56,740 Si può strappare lo distingue e di processo. 64 00:02:56,740 --> 00:03:00,900 E poi si ottiene una pagina web come Google o CS50.net o 65 00:03:00,900 --> 00:03:02,240 tutto ciò che si è andato a. 66 00:03:02,240 --> 00:03:03,100 OK? 67 00:03:03,100 --> 00:03:06,080 >> Quindi questo è l'interazione di base che stiamo andando a che fare con. 68 00:03:06,080 --> 00:03:08,770 E stiamo praticamente andando a essere concentrandosi su questa parte del 69 00:03:08,770 --> 00:03:10,640 interazione, il server. 70 00:03:10,640 --> 00:03:10,990 OK. 71 00:03:10,990 --> 00:03:12,210 Freddo. 72 00:03:12,210 --> 00:03:15,500 Qualcuno ha delle domande finora? 73 00:03:15,500 --> 00:03:17,720 OK. 74 00:03:17,720 --> 00:03:22,430 >> Quindi, come abbiamo detto, il server web riceve questa richiesta HTTP e quindi emette questo 75 00:03:22,430 --> 00:03:24,760 Risposta HTTP. 76 00:03:24,760 --> 00:03:29,100 E come abbiamo parlato prima, il Server web appliance CS50 è Apache. 77 00:03:29,100 --> 00:03:32,490 Così, quando si lavora su ragazzi P impostare sette, si sta andando a lavorare con il 78 00:03:32,490 --> 00:03:34,120 Server web Apache. 79 00:03:34,120 --> 00:03:37,890 Non dovrete mai lavorare molto con Apache direttamente troppo. 80 00:03:37,890 --> 00:03:41,920 È una sorta di configurare Apache un po ' quando si specificano gli host virtuali o 81 00:03:41,920 --> 00:03:44,970 i v padroni di casa, e ci arriveremo a che in un po '. 82 00:03:44,970 --> 00:03:50,620 >> Ma in fondo, il web server Apache istituito a lavorare con il genere PHP 83 00:03:50,620 --> 00:03:51,730 di out of the box. 84 00:03:51,730 --> 00:03:56,170 Quindi, ciò che realmente accade è quando si va a uno dei vostri siti web come, ad esempio, 85 00:03:56,170 --> 00:04:00,360 host locale barra index.php o qualcosa del genere, è il vostro browser invia tale 86 00:04:00,360 --> 00:04:04,330 richiesta, e quindi Apache è seduto lì e figure fuori a che fare con esso. 87 00:04:04,330 --> 00:04:08,840 E l'azione da eseguire che il codice in index.php e 88 00:04:08,840 --> 00:04:11,330 poi inviarlo di nuovo. 89 00:04:11,330 --> 00:04:15,640 Quindi c'è questo. 90 00:04:15,640 --> 00:04:16,980 Così abbiamo una sorta di parlato. 91 00:04:16,980 --> 00:04:21,990 Quindi potrebbe solo servire un file statico o eseguire codice PHP e quindi problema 92 00:04:21,990 --> 00:04:23,510 la risposta. 93 00:04:23,510 --> 00:04:27,670 >> Allora una domanda comune che può venire up è bene, come abbiamo davvero a che fare 94 00:04:27,670 --> 00:04:31,750 di avere più utenti Allo stesso tempo? 95 00:04:31,750 --> 00:04:36,930 Quindi, immaginate se si stesse scrivendo un web server, se si ha un server web che 96 00:04:36,930 --> 00:04:39,900 stavi tentando di scrivere qualcosa come C o qualcosa di simile, 97 00:04:39,900 --> 00:04:45,150 in pratica si può pensare a come ci potrebbe essere una qualche sorta di codice che 98 00:04:45,150 --> 00:04:49,330 avrebbe ricevuto la richiesta, ma poi ha a che fare tutto questo lavoro su di esso. 99 00:04:49,330 --> 00:04:53,060 Può essere necessario, per esempio, contattare l' database o qualcosa di simile. 100 00:04:53,060 --> 00:04:53,300 Giusto? 101 00:04:53,300 --> 00:04:56,010 E poi sarebbe fare questo tipo di lavorazione e poi 102 00:04:56,010 --> 00:04:57,060 rimandato la risposta. 103 00:04:57,060 --> 00:04:58,950 Ecco, questo è come l'alta Panoramica livello. 104 00:04:58,950 --> 00:05:04,210 >> Ma non è immediatamente evidente come si può farlo in modo che due persone o 105 00:05:04,210 --> 00:05:09,040 anche 1.000 persone potrebbero funzionare con il tuo web server nello stesso tempo. 106 00:05:09,040 --> 00:05:14,880 Quindi la soluzione che utilizza Apache è chiamato thread o processi. 107 00:05:14,880 --> 00:05:16,770 Così si può avere sentito parlare di questi termini prima. 108 00:05:16,770 --> 00:05:22,190 E 'OK se non lo avete, ma basta pensare su thread o processi come modi per 109 00:05:22,190 --> 00:05:26,290 un sistema operativo o un programma utente o qualcosa di simile o di un server web 110 00:05:26,290 --> 00:05:28,810 a una sorta di eseguire più cose contemporaneamente. 111 00:05:28,810 --> 00:05:31,760 Così si può avere sentito il termine come thread di esecuzione. 112 00:05:31,760 --> 00:05:34,140 Quindi è un po 'come sei una sorta di multitasking. 113 00:05:34,140 --> 00:05:37,710 >> E se avete visto sulla scatola del laptop, o qualcosa del genere, 114 00:05:37,710 --> 00:05:43,040 multicore, cosa si può fare è che si può eseguire due thread diversi su diversi 115 00:05:43,040 --> 00:05:46,700 parti della CPU in modo che possano effettivamente accadere allo stesso tempo. 116 00:05:46,700 --> 00:05:48,100 Quindi questo è davvero potente. 117 00:05:48,100 --> 00:05:52,270 E questo è una specie di Apache soluzione a questo problema. 118 00:05:52,270 --> 00:05:57,900 >> Quindi ci sono un po 'come tutte le edizioni con questo approccio però? 119 00:05:57,900 --> 00:05:59,870 Quindi credo che tipo di loro scrissi lì. 120 00:05:59,870 --> 00:06:03,440 Ma entrambi sorta di usare un sacco di memoria. 121 00:06:03,440 --> 00:06:07,490 È molto costoso creare un filo o un processo. 122 00:06:07,490 --> 00:06:11,750 >> E parte del ragionamento è che solo come quando si sta eseguendo un programma C 123 00:06:11,750 --> 00:06:15,090 come il vostro principale e poi che le chiamate un'altra funzione, che ha 124 00:06:15,090 --> 00:06:16,520 qualche tipo di pila. 125 00:06:16,520 --> 00:06:19,910 Così discussioni richiedono anche un intero pila separato che 126 00:06:19,910 --> 00:06:21,220 può essere molto grande. 127 00:06:21,220 --> 00:06:25,170 E se si può immaginare di avere tonnellate di gli utenti sul tuo sito, si avrebbe 128 00:06:25,170 --> 00:06:26,280 un sacco di diversi thread. 129 00:06:26,280 --> 00:06:28,230 Questo è un sacco di pile a gestire e mantenere. 130 00:06:28,230 --> 00:06:31,280 Quindi è il consumo di memoria di grandi dimensioni. 131 00:06:31,280 --> 00:06:35,650 >> E poi, anche, diciamo che hai solo una CPU, o diciamo che hai 132 00:06:35,650 --> 00:06:38,460 più thread di quello che hai tali multicore. 133 00:06:38,460 --> 00:06:38,730 Giusto? 134 00:06:38,730 --> 00:06:43,280 Quindi diciamo che trovassi 10 thread e si aveva solo cinque CPU. 135 00:06:43,280 --> 00:06:46,260 È genere di dovete fare questa cosa, dove si passa tra la corrente 136 00:06:46,260 --> 00:06:49,090 uno che è in esecuzione, perché si non è possibile eseguire tutti e 10 in una volta. 137 00:06:49,090 --> 00:06:50,980 E questo si chiama un cambio di contesto. 138 00:06:50,980 --> 00:06:54,260 E questo termine ha in realtà un paio di contesti diversi, ma facciamo solo 139 00:06:54,260 --> 00:06:56,620 pensare ad esso come di commutazione tra due thread. 140 00:06:56,620 --> 00:06:59,730 Che può essere piuttosto costoso, perché fondamentalmente ciò che dovete fare voi è 141 00:06:59,730 --> 00:07:03,340 dovuto smettere di quello che stai facendo, salvare il stato di quel filo conduttore, e 142 00:07:03,340 --> 00:07:05,440 poi passare a qualche altra parte. 143 00:07:05,440 --> 00:07:09,420 >> Quindi non tutti i tipi di consultare la motivazione del perché thread e 144 00:07:09,420 --> 00:07:12,030 processi potrebbero essere un po 'ingombrante? 145 00:07:12,030 --> 00:07:13,840 E hai avuto una domanda? 146 00:07:13,840 --> 00:07:14,376 OK. 147 00:07:14,376 --> 00:07:15,070 Freddo. 148 00:07:15,070 --> 00:07:18,090 Qualcuno ha delle domande? 149 00:07:18,090 --> 00:07:19,620 OK. 150 00:07:19,620 --> 00:07:26,720 >> Quindi, se facciamo un passo indietro per un secondo, c'è un po 'come un 151 00:07:26,720 --> 00:07:30,350 osservazione che possiamo fare in merito un sacco di applicazioni web. 152 00:07:30,350 --> 00:07:34,810 E questo è davvero che un sacco di loro in realtà non fanno molto utile 153 00:07:34,810 --> 00:07:37,140 lavorare all'interno di un thread. 154 00:07:37,140 --> 00:07:41,170 Così qualcuno ha iniziato il P impostare sette a tutti? 155 00:07:41,170 --> 00:07:45,650 Quindi si vuole descrivere, forse alcune delle parti? 156 00:07:45,650 --> 00:07:47,850 Hai lavorato su login o qualcosa di simile? 157 00:07:47,850 --> 00:07:49,330 >> PUBBLICO: No. 158 00:07:49,330 --> 00:07:49,780 >> KEVIN Schmid: OK. 159 00:07:49,780 --> 00:07:50,150 Si figuri. 160 00:07:50,150 --> 00:07:50,900 Scusi. 161 00:07:50,900 --> 00:07:55,790 Ma in fondo, nella serie P, sei andando a fare un sacco di specie di 162 00:07:55,790 --> 00:07:59,760 query a un database per ottenere qualche informazioni dal database. 163 00:07:59,760 --> 00:08:03,330 E che il codice sta per fare, ciò che di processo Apache o 164 00:08:03,330 --> 00:08:06,030 quel filo Apache sta per essere fare mentre ha per contattare l' 165 00:08:06,030 --> 00:08:08,990 banca dati è che è una sorta di sarà seduto lì e sta andando ad essere 166 00:08:08,990 --> 00:08:12,130 attesa per il database di rispondere. 167 00:08:12,130 --> 00:08:16,290 >> Ora che potrebbe non sembrare un grosso affrontare perché il database è sulla vostra 168 00:08:16,290 --> 00:08:18,240 Apparecchio CS50, giusto? 169 00:08:18,240 --> 00:08:22,930 Ma vi è una sorta di rete latenza lì perché ora il web 170 00:08:22,930 --> 00:08:26,830 server deve emettere la propria richiesta di il database per comunicare con il 171 00:08:26,830 --> 00:08:29,520 database e quindi ottenere che informazioni indietro. 172 00:08:29,520 --> 00:08:33,190 Così ora è come bene attendere per me, io sono intenzione di andare a prendere qualcosa dal 173 00:08:33,190 --> 00:08:35,770 database e poi c'è un molta attesa in corso. 174 00:08:35,770 --> 00:08:36,870 Ritiene che senso? 175 00:08:36,870 --> 00:08:38,580 >> E per alcune cose non è poi così male. 176 00:08:38,580 --> 00:08:41,950 Se deve solo, per esempio, memoria ad accesso, che non è come 177 00:08:41,950 --> 00:08:44,100 orribile latenza di I / O. 178 00:08:44,100 --> 00:08:47,110 E quando dico, ho latenza di I / O, quello che sto riferisco è come qualsiasi tipo di come 179 00:08:47,110 --> 00:08:48,290 input output. 180 00:08:48,290 --> 00:08:52,950 Ma per accedere a un file sul disco, come se volevo servire la statica HTML 181 00:08:52,950 --> 00:08:57,850 file che è stato sulla mia pagina web o qualcosa di simile, io tipo di deve 182 00:08:57,850 --> 00:09:02,310 fermarsi per un po ', leggere il file dalla disco e quindi in 183 00:09:02,310 --> 00:09:04,400 quel processo sto aspettando. 184 00:09:04,400 --> 00:09:06,700 Non sto facendo un lavoro utile. 185 00:09:06,700 --> 00:09:11,270 >> Questo non è vero per tutto, ma è comune in applicazioni come P set 186 00:09:11,270 --> 00:09:13,960 sette e un sacco di applicazioni che non sei 187 00:09:13,960 --> 00:09:15,440 in realtà fare molto pensare. 188 00:09:15,440 --> 00:09:19,090 E quando dico pensare, voglio dire come il lavoro computazionale. 189 00:09:19,090 --> 00:09:23,270 Lavoro in modo computazionale potrebbe essere qualcosa come, ad esempio, si voleva 190 00:09:23,270 --> 00:09:26,590 scrivere un web server che appena calcolato il numero di Fibonacci all'ennesima potenza. 191 00:09:26,590 --> 00:09:29,300 Che non suona come un particolare divertimento server web. 192 00:09:29,300 --> 00:09:34,220 Come non mi aspetto che il sito sia il prossimo Facebook, ma che è un po ' 193 00:09:34,220 --> 00:09:35,610 tipo di lavoro di calcolo. 194 00:09:35,610 --> 00:09:39,570 >> E si può immaginare che la sostituzione con qualche altro tipo di interesse 195 00:09:39,570 --> 00:09:43,070 lavoro di calcolo. 196 00:09:43,070 --> 00:09:46,050 Diciamo che stavi scrivendo qualcosa quello calcolato i gradi di 197 00:09:46,050 --> 00:09:49,170 separazione tra due persone o qualcosa di simile. 198 00:09:49,170 --> 00:09:51,860 Quindi, che cosa comporta un qualche tipo di calcolo, giusto? 199 00:09:51,860 --> 00:09:56,630 E anche allora, per farlo avete ancora per fare un sacco di attesa per forse 200 00:09:56,630 --> 00:09:59,550 si deve interrogare un database per cercare su chi è amico di chi o 201 00:09:59,550 --> 00:10:00,600 qualcosa di simile. 202 00:10:00,600 --> 00:10:03,510 Quindi non è quel tipo di concetto lavoro di calcolo. 203 00:10:03,510 --> 00:10:05,260 Ritiene che senso? 204 00:10:05,260 --> 00:10:08,258 Qualcuno ha delle domande? 205 00:10:08,258 --> 00:10:11,960 >> Oh, e credo che ho messo server di chat c'è poiché i server di chat sono una specie di 206 00:10:11,960 --> 00:10:13,240 un altro buon esempio di questo. 207 00:10:13,240 --> 00:10:15,250 Un server di chat non ha fare molto pensare. 208 00:10:15,250 --> 00:10:18,350 Deve solo aspettare che la gente inviare messaggi e poi quando 209 00:10:18,350 --> 00:10:19,800 lo fanno, li inviano. 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 >> Quindi, solo per ricapitolare di nuovo, Apache e server web simili come quella di un fork 213 00:10:28,180 --> 00:10:31,470 sacco di thread e processi che può essere di tipo uno spreco. 214 00:10:31,470 --> 00:10:37,530 Quindi credo che la domanda che può venire da che è abbiamo bisogno di avere 215 00:10:37,530 --> 00:10:39,610 più thread e processi? 216 00:10:39,610 --> 00:10:41,890 Che cosa succede se abbiamo avuto solo uno? 217 00:10:41,890 --> 00:10:45,710 >> Quindi cerchiamo di specie di dipingere un quadro di ciò che questo sarebbe simile. 218 00:10:45,710 --> 00:10:47,810 Quindi cerchiamo di usare un solo thread. 219 00:10:47,810 --> 00:10:48,660 OK? 220 00:10:48,660 --> 00:10:52,790 Quindi, solo immaginare questo con un solo thread. 221 00:10:52,790 --> 00:10:56,600 >> Supponiamo di non stavamo facendo veramente molto utile - e quando dico 222 00:10:56,600 --> 00:10:59,450 utile, intendo il lavoro computazionale - 223 00:10:59,450 --> 00:11:01,130 in quelle più thread prima. 224 00:11:01,130 --> 00:11:04,180 Quindi cerchiamo di tipo di consolidare tutto in un unico thread. 225 00:11:04,180 --> 00:11:07,780 Così che cosa se avessimo un thread che tipo di va solo intorno nel ciclo e 226 00:11:07,780 --> 00:11:10,880 controlli costantemente fatto qualcosa nuovo accada. 227 00:11:10,880 --> 00:11:15,130 Così, per esempio, qualcosa di nuovo è accaduto potrebbe significare ho qualcosa di nuovo da 228 00:11:15,130 --> 00:11:19,310 il database, o qualcuno mandato me una nuova richiesta HTTP. 229 00:11:19,310 --> 00:11:22,290 Quindi questi sono i tipi di eventi che questo accada, giusto? 230 00:11:22,290 --> 00:11:26,130 >> E poi che cosa posso fare quando quelli nuovi le cose accadono è in questo stesso thread 231 00:11:26,130 --> 00:11:30,120 di esecuzione, questo singolo filo di esecuzione, posso chiamare un codice che 232 00:11:30,120 --> 00:11:32,410 avrebbe gestito quella cosa particolare. 233 00:11:32,410 --> 00:11:36,640 Così, per esempio, se ho qualcosa di nuovo dal database, ho potuto eseguire il mio 234 00:11:36,640 --> 00:11:40,960 piccola parte di esso che computazionale in realtà solo prepara la cosa giusta per 235 00:11:40,960 --> 00:11:42,620 rispedire per l'utente. 236 00:11:42,620 --> 00:11:46,710 Così fa questo tipo di senso? 237 00:11:46,710 --> 00:11:49,940 >> Ma quali sono realmente le implicazioni di questo? 238 00:11:49,940 --> 00:11:50,660 Giusto? 239 00:11:50,660 --> 00:11:53,730 Perché abbiamo scritto un sacco di codice che - 240 00:11:53,730 --> 00:11:58,330 e sto solo andando a saltare avanti nelle diapositive se è OK. 241 00:11:58,330 --> 00:12:00,930 Quindi, se non ti dispiace, io sono solo andando a fare un passo indietro. 242 00:12:00,930 --> 00:12:03,410 Quindi questo genere di cose è chiamato un ciclo di eventi. 243 00:12:03,410 --> 00:12:04,070 OK? 244 00:12:04,070 --> 00:12:07,240 Ed è una specie di base idea dietro Node.js. 245 00:12:07,240 --> 00:12:11,240 >> Così che cosa Node.js sta facendo veramente come web server è c'è un unico filo 246 00:12:11,240 --> 00:12:14,850 che è fondamentalmente andando in giro ad anello come un po 'un tipo di sotto 247 00:12:14,850 --> 00:12:18,510 la cappa di Node.js che è costantemente controllo, abbiamo ricevuto nuove cose? 248 00:12:18,510 --> 00:12:22,720 E poi verrà eseguito gestori che si imposta. 249 00:12:22,720 --> 00:12:26,720 Ma una buona domanda da porsi è, come possiamo rendere questo accada 250 00:12:26,720 --> 00:12:28,090 con le cose esistenti? 251 00:12:28,090 --> 00:12:32,440 >> Così ho messo una riga di codice C qui che sembra praticamente come si sta aprendo un 252 00:12:32,440 --> 00:12:33,060 presentare, giusto? 253 00:12:33,060 --> 00:12:36,090 Mi Ha appena uscito con un album. 254 00:12:36,090 --> 00:12:39,600 Così ho dovuto aprire il suo un nuovo file. 255 00:12:39,600 --> 00:12:43,810 Quindi il modo nostro codice C per il funzionamento - 256 00:12:43,810 --> 00:12:47,890 e credo che il motivo per cui ho scelto file è stato perché questo è una specie di misura 257 00:12:47,890 --> 00:12:52,000 del lavoro di I / O che abbiamo fatto in C in un senso che non c'è input output. 258 00:12:52,000 --> 00:12:55,070 Quindi chiamiamo questo codice fa f aperto. 259 00:12:55,070 --> 00:12:59,370 E poi nella riga successiva del nostro programma, possiamo ora lavorare con f. 260 00:12:59,370 --> 00:13:02,710 >> Quindi questo sarebbe un esempio di qualcosa che è come sincrono o 261 00:13:02,710 --> 00:13:06,850 blocco perché in quella prima linea vi stiamo aspettando fino a quando non 262 00:13:06,850 --> 00:13:08,110 ottenere il file aperto. 263 00:13:08,110 --> 00:13:12,260 Così sulla seconda linea, sappiamo che può funzionare con f, ma questo significa che 264 00:13:12,260 --> 00:13:16,240 che la seconda linea non può davvero correre fino alla prima riga è fatto. 265 00:13:16,240 --> 00:13:17,760 Ritiene che senso? 266 00:13:17,760 --> 00:13:20,890 >> Quindi questo sarebbe male mettere in un gestore eventi. 267 00:13:20,890 --> 00:13:23,920 E la ragione di ciò è che questo tipo di attese, giusto? 268 00:13:23,920 --> 00:13:26,500 Quindi questo ci sarebbe tornare la stessa cosa. 269 00:13:26,500 --> 00:13:29,470 E ora non avremmo nemmeno la vantaggio di più thread o 270 00:13:29,470 --> 00:13:32,390 processi perché abbiamo ottenuto un thread in Node.js. 271 00:13:32,390 --> 00:13:35,496 Questo fa senso per tutti? 272 00:13:35,496 --> 00:13:35,990 >> AUDIENCE: Aspetta. 273 00:13:35,990 --> 00:13:36,980 Quindi qual è la sostituzione? 274 00:13:36,980 --> 00:13:37,840 >> KEVIN SCHMID: Oh, quindi sì. 275 00:13:37,840 --> 00:13:39,560 Quindi ho intenzione di arrivare a la sostituzione. 276 00:13:39,560 --> 00:13:40,430 OK. 277 00:13:40,430 --> 00:13:42,960 Così che cosa se avessimo qualcosa che sembrava come questo? 278 00:13:42,960 --> 00:13:45,730 Quindi, cosa succede se ora ho modificato f aprire un po '? 279 00:13:45,730 --> 00:13:48,370 Così sto passando stesso due argomenti come prima. 280 00:13:48,370 --> 00:13:52,610 Amo ancora la nuova canzone che è venuta fuori con. 281 00:13:52,610 --> 00:13:57,260 Ma io sto passando una terza cosa che è questa variabile chiamata codice. 282 00:13:57,260 --> 00:14:02,280 >> Ma che cosa è in realtà il codice in questo contesto? 283 00:14:02,280 --> 00:14:05,360 E 'come una variabile C regolare? 284 00:14:05,360 --> 00:14:06,740 Si tratta di una funzione, giusto? 285 00:14:06,740 --> 00:14:09,450 E questo può essere un po 'strano perché In realtà sono come ora passare un 286 00:14:09,450 --> 00:14:12,320 funzionamento in un'altra funzione. 287 00:14:12,320 --> 00:14:14,400 >> Quindi un paio di cose da notare su questo. 288 00:14:14,400 --> 00:14:17,145 Uno, non sto effettivamente chiamando la funzione di codice. 289 00:14:17,145 --> 00:14:20,650 Quindi non si vede codice con il parentesi sinistra, parentesi di destra. 290 00:14:20,650 --> 00:14:23,010 Sto solo passando codice. 291 00:14:23,010 --> 00:14:26,990 E in C, ciò che questo sarebbe effettivamente fare mi è dare un puntatore a quella attuale 292 00:14:26,990 --> 00:14:29,740 codice, e quindi questo potrebbe funzionare. 293 00:14:29,740 --> 00:14:33,350 Ma basta pensare a come sei passando il codice da eseguire quando 294 00:14:33,350 --> 00:14:35,150 che il file viene aperto. 295 00:14:35,150 --> 00:14:41,430 >> Ma ciò significa che ora il resto del mio programma che potrebbe fare 296 00:14:41,430 --> 00:14:47,050 altre cose, può continuare a fare altro roba mentre noi, in realtà non aspettare, ma 297 00:14:47,050 --> 00:14:50,890 basta avere nella parte posteriore della testa che quando è aperto, percorso che di file 298 00:14:50,890 --> 00:14:52,130 codice in alto. 299 00:14:52,130 --> 00:14:53,390 Ritiene che senso? 300 00:14:53,390 --> 00:14:58,060 >> E ora l'idea dietro Node.js è che il codice roba do con f 301 00:14:58,060 --> 00:15:04,590 parte dovrebbe essere abbastanza breve e semplice e semplice e non realmente essere 302 00:15:04,590 --> 00:15:06,160 molto computazionalmente intensive. 303 00:15:06,160 --> 00:15:09,390 Può avere per aprire un altro file, ma che dovrebbe anche essere piuttosto veloce 304 00:15:09,390 --> 00:15:14,710 perché dovrebbe dire solo fare un altro f aprire e poi chiamare questo altro codice. 305 00:15:14,710 --> 00:15:19,100 >> Quindi, solo per essere completamente chiari, f aprite che fa la nuova canzone di Katy Perry 306 00:15:19,100 --> 00:15:23,060 mp3 fatto, che sta andando verso la bella molto tornare immediatamente. 307 00:15:23,060 --> 00:15:27,820 E allora possiamo solo continuare a fare altre cose perché tutto ciò che ora f 308 00:15:27,820 --> 00:15:33,410 invito aperto non si dice fondamentalmente la sottostante f codice aperto aprire questo file 309 00:15:33,410 --> 00:15:36,020 e quando hai finito di aprire questo file o quando si ottiene indietro, 310 00:15:36,020 --> 00:15:37,480 quindi eseguire il codice. 311 00:15:37,480 --> 00:15:39,540 Ma in realtà non esegue tale codice. 312 00:15:39,540 --> 00:15:41,815 E hai avuto una domanda? 313 00:15:41,815 --> 00:15:46,180 >> AUDIENCE: Lei sembrava implicare alcuni volte che l'aggiunta computazionalmente 314 00:15:46,180 --> 00:15:50,545 codice intensiva sorta di rompere il [Incomprensibile] sistema guidato. 315 00:15:50,545 --> 00:15:51,795 [Incomprensibile]? 316 00:15:51,795 --> 00:15:54,450 317 00:15:54,450 --> 00:15:55,290 >> KEVIN Schmid: Questa è una grande domanda. 318 00:15:55,290 --> 00:15:59,280 Quindi io in realtà sono un esempio di come è possibile integrare computazionalmente 319 00:15:59,280 --> 00:16:01,090 intensive codice in un po '. 320 00:16:01,090 --> 00:16:03,620 Così, quando si arriva a esempi di codice, Sarò sicuro di tirare quella. 321 00:16:03,620 --> 00:16:04,700 Che è OK? 322 00:16:04,700 --> 00:16:05,950 Grazie. 323 00:16:05,950 --> 00:16:07,690 324 00:16:07,690 --> 00:16:08,750 >> Qual è il tuo nome? 325 00:16:08,750 --> 00:16:10,620 >> AUDIENCE: Aaron. 326 00:16:10,620 --> 00:16:14,830 >> KEVIN Schmid: Aaron porta in primo piano un buon punto, cioè che se avessi 327 00:16:14,830 --> 00:16:18,560 codice computazionalmente intensive in la roba che fare con la parte F, il resto della 328 00:16:18,560 --> 00:16:22,880 il mio programma non può funzionare e non può ascoltare per le nuove richieste o nulla fino a quando tutti 329 00:16:22,880 --> 00:16:24,270 che roba è finito. 330 00:16:24,270 --> 00:16:27,390 Quindi, se sto scrivendo il codice Nodo in generale se non facciamo qualcosa come sto andando 331 00:16:27,390 --> 00:16:33,060 di suggerire più tardi, quando guardiamo la esempi di codice, devo essere sicuro che 332 00:16:33,060 --> 00:16:36,060 il mio codice non legare questo ciclo di eventi. 333 00:16:36,060 --> 00:16:38,120 Ritiene che senso? 334 00:16:38,120 --> 00:16:38,350 OK. 335 00:16:38,350 --> 00:16:40,040 Freddo. 336 00:16:40,040 --> 00:16:47,090 >> Quindi Node.js offre questo contesto che è possibile costruire questi event-driven 337 00:16:47,090 --> 00:16:48,210 server con. 338 00:16:48,210 --> 00:16:53,460 Così ha questo tipo di asincrona non-blocking I / O biblioteche, che 339 00:16:53,460 --> 00:16:56,800 le librerie standard C che siamo stati lavorando, come se solo 340 00:16:56,800 --> 00:16:59,500 usarli nello stesso modo che abbiamo stato il loro utilizzo con F apre e 341 00:16:59,500 --> 00:17:03,000 roba, quelli che stanno bloccando perché in realtà si deve aspettare per 342 00:17:03,000 --> 00:17:04,470 il file da aprire. 343 00:17:04,470 --> 00:17:09,290 >> Ma Node.js che ti dà e lega sostanzialmente in Google V8 344 00:17:09,290 --> 00:17:14,030 Motore JavaScript che è la ragione che Chrome è così veloce in lavorazione 345 00:17:14,030 --> 00:17:17,040 JavaScript perché ha questo motore V8. 346 00:17:17,040 --> 00:17:22,460 Quindi so che suona come una di quelle WWDC conferenze per gli sviluppatori cosa 347 00:17:22,460 --> 00:17:25,390 dove hanno appena gettare un mazzo di numero di lettera di cose per i processori 348 00:17:25,390 --> 00:17:26,910 e dire questo è così cool. 349 00:17:26,910 --> 00:17:34,200 Ma è bello che hanno fatto questo perché JavaScript - 350 00:17:34,200 --> 00:17:37,010 o forse se non hai familiarità con JavaScript ma perché non abbiamo avuto 351 00:17:37,010 --> 00:17:38,180 le lezioni su di esso - 352 00:17:38,180 --> 00:17:40,770 ma JavaScript è interpretato lingua. 353 00:17:40,770 --> 00:17:41,970 >> E questo è un punto importante. 354 00:17:41,970 --> 00:17:45,790 Quindi è importante per la nostra web server per essere veloce, giusto? 355 00:17:45,790 --> 00:17:49,970 E se fossimo solo in esecuzione di JavaScript codice che è stato interpretato con solo 356 00:17:49,970 --> 00:17:52,130 qualsiasi vecchio interprete potrebbe essere lenta. 357 00:17:52,130 --> 00:17:55,980 Quindi i benefici del nodo di avere questo interprete super veloce V8. 358 00:17:55,980 --> 00:17:59,580 E io non so se hanno chiamato perché lo schiaffo V8 in fronte 359 00:17:59,580 --> 00:18:01,110 cosa, ma OK. 360 00:18:01,110 --> 00:18:07,070 >> Così ho preparato alcuni esempi a questo URL. 361 00:18:07,070 --> 00:18:10,490 Dopo il seminario, sto sorta di andare a parlare di come è possibile ottenere insieme Node 362 00:18:10,490 --> 00:18:13,570 up, ma per ora, ho solo una sorta di voglia a piedi attraverso alcuni esempi di codice. 363 00:18:13,570 --> 00:18:17,250 Quindi, se si vuole seguire, tutte le il codice sorgente è disponibile qui. 364 00:18:17,250 --> 00:18:18,720 OK? 365 00:18:18,720 --> 00:18:22,280 >> Quindi lascio questo URL per un po '. 366 00:18:22,280 --> 00:18:24,440 E poi io sto solo andando a passare nel terminale. 367 00:18:24,440 --> 00:18:29,670 368 00:18:29,670 --> 00:18:34,400 Sono tutti bene con questo URL? 369 00:18:34,400 --> 00:18:37,990 Quindi ho intenzione di passare a mio terminale qui. 370 00:18:37,990 --> 00:18:42,030 >> Quindi, ecco il codice che Ho per oggi. 371 00:18:42,030 --> 00:18:43,960 Perché non cominciamo con simpler.js file? 372 00:18:43,960 --> 00:18:49,110 373 00:18:49,110 --> 00:18:52,100 L'altra cosa è che tutto questo codice sta per essere scritta in 374 00:18:52,100 --> 00:18:56,660 JavaScript che si può o potrebbe non essere a conoscenza. 375 00:18:56,660 --> 00:19:00,170 Credo che un paio di cose è che un sacco di codice JavaScript è il tipo di 376 00:19:00,170 --> 00:19:04,000 sintassi e la struttura è molto simile a C, in modo da poter sorta di prenderlo come 377 00:19:04,000 --> 00:19:05,020 si va avanti. 378 00:19:05,020 --> 00:19:08,750 Ho cercato di scrivere un sacco di codice di partenza di questo in un modo che è 379 00:19:08,750 --> 00:19:11,230 simile a C in modo che sia un po 'più leggibile. 380 00:19:11,230 --> 00:19:15,980 Ma man mano che procediamo, sarò dimostrando alcune delle ulteriori 381 00:19:15,980 --> 00:19:18,980 funzionalità di JavaScript che sono genere di freddo. 382 00:19:18,980 --> 00:19:21,510 >> Ma diamo un'occhiata a questo programma di esempio. 383 00:19:21,510 --> 00:19:24,820 Credo che tutto è tagliato fuori là. 384 00:19:24,820 --> 00:19:28,500 Sto solo andando a riparare quello reale veloce se va bene o no. 385 00:19:28,500 --> 00:19:31,400 Non so cosa sta per fare. 386 00:19:31,400 --> 00:19:34,660 È un po 'meglio? 387 00:19:34,660 --> 00:19:36,510 Riesci a vedere la var e roba? 388 00:19:36,510 --> 00:19:39,320 OK. 389 00:19:39,320 --> 00:19:44,120 >> Quindi, la prima linea è come il JavaScript versione di una variabile 390 00:19:44,120 --> 00:19:44,800 dichiarazione. 391 00:19:44,800 --> 00:19:49,870 Quindi, solo per evidenziare ciò che questo sarebbe sembra in C. Quindi questo è proprio come 392 00:19:49,870 --> 00:19:52,620 Indice di me dicendo uguale a tre o qualcosa di simile. 393 00:19:52,620 --> 00:19:55,740 Quindi non ha specificato che tipo. 394 00:19:55,740 --> 00:20:00,780 JavaScript ha i tipi, ma è molto dinamicamente tipizzati in natura, quindi 395 00:20:00,780 --> 00:20:02,580 non ha fornito alcun tipo di tipo su di esso. 396 00:20:02,580 --> 00:20:03,670 Così ha appena var. 397 00:20:03,670 --> 00:20:05,320 Ecco come variabile. 398 00:20:05,320 --> 00:20:05,920 OK? 399 00:20:05,920 --> 00:20:08,340 >> E sto chiamando questo HTTP variabile. 400 00:20:08,340 --> 00:20:12,480 E alla mia destra, ho l' espressione che voglio mettere in HTTP. 401 00:20:12,480 --> 00:20:14,960 E questo dice richiedono HTTP. 402 00:20:14,960 --> 00:20:18,500 Quindi questo è una specie di simile da includere. 403 00:20:18,500 --> 00:20:22,940 E 'un po' più come potente di includere nel senso che includono 404 00:20:22,940 --> 00:20:26,100 sarebbe solo copiare e incollare l'intestazione file per i prototipi di funzione o 405 00:20:26,100 --> 00:20:27,930 qualunque sia con le definizioni del tipo. 406 00:20:27,930 --> 00:20:30,590 Ma richiedono che sta realmente accadendo per farci il codice. 407 00:20:30,590 --> 00:20:33,280 >> Così si può pensare ad esso come l'importazione del codice. 408 00:20:33,280 --> 00:20:37,960 Quindi, in qualche parte del modulo Node.js sistema o qualsiasi altra cosa, hanno tutto questo 409 00:20:37,960 --> 00:20:40,790 Codice server HTTP, quindi sono solo recupero per la mia 410 00:20:40,790 --> 00:20:43,130 uso personale in questo programma. 411 00:20:43,130 --> 00:20:44,260 OK? 412 00:20:44,260 --> 00:20:46,930 >> Allora ho questa funzione che ho scritto. 413 00:20:46,930 --> 00:20:50,330 E notare non ho dovuto specificare il tipo restituito o il tipo di 414 00:20:50,330 --> 00:20:51,140 argomenti ancora. 415 00:20:51,140 --> 00:20:54,440 Così tipo di loose digitato che tipo di senso. 416 00:20:54,440 --> 00:20:57,290 Due argomenti che prende in, la richiesta e la risposta. 417 00:20:57,290 --> 00:21:02,080 Ecco, questo è concettualmente un po 'come familiare dalla foto che avevamo 418 00:21:02,080 --> 00:21:05,280 sullo schermo prima perché otteniamo questa richiesta che noi 419 00:21:05,280 --> 00:21:06,410 avere dall'utente. 420 00:21:06,410 --> 00:21:09,170 E poi abbiamo una risposta che possiamo scrivere cose. 421 00:21:09,170 --> 00:21:15,060 >> Quindi la prima linea di questa fa res.writeHead 200 e poi questo 422 00:21:15,060 --> 00:21:17,070 tipo di contenuto plain text. 423 00:21:17,070 --> 00:21:19,300 Quindi cerchiamo di questo pezzo a parte un po '. 424 00:21:19,300 --> 00:21:22,340 Quindi cerchiamo di concentrarsi solo su res.write per un po '. 425 00:21:22,340 --> 00:21:28,420 Così scrittura è, fondamentalmente, e scrivere la testa, sono solo modi per una sorta di scrivere 426 00:21:28,420 --> 00:21:29,960 le cose alla risposta. 427 00:21:29,960 --> 00:21:30,770 OK? 428 00:21:30,770 --> 00:21:36,230 Così scrittura testa, se qualcuno ricorda dalla lezione HTTP, fare voi ragazzi 429 00:21:36,230 --> 00:21:39,940 ricordare le intestazioni al top della cosa HTTP? 430 00:21:39,940 --> 00:21:43,580 Allora perché non faccio solo Demo intestazioni vero rapidi. 431 00:21:43,580 --> 00:21:44,640 Vorrei che essere stata utile? 432 00:21:44,640 --> 00:21:45,500 O dovremmo appena sorta di - 433 00:21:45,500 --> 00:21:46,070 OK. 434 00:21:46,070 --> 00:21:46,740 Certo. 435 00:21:46,740 --> 00:21:52,340 >> Così, quando il browser va a google.com o qualcosa di simile, 436 00:21:52,340 --> 00:21:54,250 In realtà c'è un po 'di più - 437 00:21:54,250 --> 00:21:55,380 questo è come un segreto - 438 00:21:55,380 --> 00:21:58,340 c'è come un po 'più di informazioni che passa attraverso il tubo di una semplice 439 00:21:58,340 --> 00:22:00,180 la piccola ricerca e tutto. 440 00:22:00,180 --> 00:22:03,550 Quindi, per mostrarvi questo, sto andando di utilizzare un programma chiamato Curl. 441 00:22:03,550 --> 00:22:04,260 OK? 442 00:22:04,260 --> 00:22:08,020 Quindi questo è qualcosa che si può eseguire in la riga di comando di Mac OSX o in 443 00:22:08,020 --> 00:22:09,830 elettrodomestico o qualsiasi altra cosa. 444 00:22:09,830 --> 00:22:17,050 E così, se io Curl HTTP google.com, Vado a vedere l'HTML. 445 00:22:17,050 --> 00:22:21,230 E questo è, in verità, solo la HTML che tipo di voi dice di 446 00:22:21,230 --> 00:22:24,695 reindirizzare www se il tuo browser non lo fa gestire automaticamente l' 447 00:22:24,695 --> 00:22:27,110 reindirizzamento. 448 00:22:27,110 --> 00:22:33,390 >> Quindi questo è solo HTML, ma ho intenzione da aggiungere a Curl questo trattino I bandiera. 449 00:22:33,390 --> 00:22:33,600 OK? 450 00:22:33,600 --> 00:22:35,600 E questo sta a dimostrare me le intestazioni. 451 00:22:35,600 --> 00:22:40,640 Quindi questo è anche informazione che viene attraverso quando ottengo questa risposta. 452 00:22:40,640 --> 00:22:41,260 OK? 453 00:22:41,260 --> 00:22:45,320 >> Così in alto, si vede questo HTTP 301 trasferirsi definitivamente. 454 00:22:45,320 --> 00:22:49,470 E questo è una specie di importante perché questo si riferisce al codice di stato. 455 00:22:49,470 --> 00:22:53,750 Così il 301 ecco il codice di stato, che è fondamentalmente solo un numero intero 456 00:22:53,750 --> 00:22:57,750 che racconta il browser o chiunque sia la lettura di questo, se si fa finta che 457 00:22:57,750 --> 00:23:01,460 sei un browser e si sta vedendo questo, in pratica ora se si guardano 458 00:23:01,460 --> 00:23:04,960 che e si vede un 301, sai che ho fare qualcosa di speciale basato su 459 00:23:04,960 --> 00:23:08,810 301, o qualcosa di speciale è accaduto basato sul 301. 460 00:23:08,810 --> 00:23:12,640 Così dice trasferì definitivamente. 461 00:23:12,640 --> 00:23:17,700 >> E poi, in fondo, abbiamo un gruppo di coppie di valori chiave. 462 00:23:17,700 --> 00:23:22,100 Così otteniamo la posizione è www.google.com. 463 00:23:22,100 --> 00:23:25,190 E poi genere di tutta questa roba, ma in fondo, ciò che la posizione è 464 00:23:25,190 --> 00:23:29,662 detto è la nuova posizione è a www.google.com. 465 00:23:29,662 --> 00:23:33,800 Così ora se si va a google.com, ti sorta di vedere il tipo di browser che lampeggiano 466 00:23:33,800 --> 00:23:38,770 per un secondo e poi si reindirizzare destra di nuovo a www.google.com. 467 00:23:38,770 --> 00:23:41,840 Quindi, le risposte possono contenere queste intestazioni. 468 00:23:41,840 --> 00:23:43,330 >> E un paio di cose da sottolineare. 469 00:23:43,330 --> 00:23:46,890 Quindi diciamo che eravamo in realtà di successo a visitare una pagina web. 470 00:23:46,890 --> 00:23:49,040 Allora lasciami andare su - 471 00:23:49,040 --> 00:23:51,080 che cosa è un buon sito web? 472 00:23:51,080 --> 00:23:53,285 Sto male al pensiero di buona siti in loco. 473 00:23:53,285 --> 00:23:53,640 >> AUDIENCE: Wikipedia. 474 00:23:53,640 --> 00:23:54,160 >> KEVIN Schmid: OK. 475 00:23:54,160 --> 00:23:56,040 Facciamo Wikipedia. 476 00:23:56,040 --> 00:23:58,680 Così qui mi sono commosso. 477 00:23:58,680 --> 00:23:59,240 Oh aspettare. 478 00:23:59,240 --> 00:24:00,160 Ero? 479 00:24:00,160 --> 00:24:00,890 Sì, ero. 480 00:24:00,890 --> 00:24:01,100 OK. 481 00:24:01,100 --> 00:24:03,005 Così ho avuto modo di fare www. 482 00:24:03,005 --> 00:24:06,006 Quindi ho intenzione di fare www. 483 00:24:06,006 --> 00:24:09,680 E come potete vedere, qui è tutto il codice HTML che il browser sarebbe processo 484 00:24:09,680 --> 00:24:10,910 per Wikipedia. 485 00:24:10,910 --> 00:24:14,055 >> Ma se continuo a scorrimento qui, quello che vedrò in cima - 486 00:24:14,055 --> 00:24:17,800 wow, c'è un sacco di HTML su Wikipedia - 487 00:24:17,800 --> 00:24:22,550 ma quello che posso vedere in alto: ecco questo codice di stato 200 come opposto al 488 00:24:22,550 --> 00:24:24,570 301 che ho visto in precedenza. 489 00:24:24,570 --> 00:24:27,100 E notare che ha una bella OK amichevole accanto ad essa. 490 00:24:27,100 --> 00:24:29,470 Quindi questo è come il buon codice di stato. 491 00:24:29,470 --> 00:24:31,160 >> Ritiene che il numero 200 sembra familiare? 492 00:24:31,160 --> 00:24:34,120 493 00:24:34,120 --> 00:24:39,880 Sì, perché quando l'ho fatto simpler.js, Ho scritto una 200 lì. 494 00:24:39,880 --> 00:24:43,290 Ecco, questo è fondamentalmente dicendo raccontare la del browser o chi sta cercando di arrivare a 495 00:24:43,290 --> 00:24:45,440 ciò che essi hanno avuto successo. 496 00:24:45,440 --> 00:24:49,040 O che un po 'come noi erano troppo successo. 497 00:24:49,040 --> 00:24:54,320 >> E c'è questo tipo di sintassi speciale in Javascript per dichiarare una 498 00:24:54,320 --> 00:24:59,870 Mappa di questi tasti come tipo di contenuto e questi valori come testo normale. 499 00:24:59,870 --> 00:25:03,780 Quindi, se si guarda alla risposta che abbiamo tornato da Wikipedia prima, - 500 00:25:03,780 --> 00:25:06,200 Ho intenzione di provare a scorrere un po 'più veloce - 501 00:25:06,200 --> 00:25:09,900 avete questi tasti come server di e questi valori Apache. 502 00:25:09,900 --> 00:25:12,120 Quindi hai chiavi e valori. 503 00:25:12,120 --> 00:25:15,930 Ed è possibile specificare questo Nodo cosa mandare indietro. 504 00:25:15,930 --> 00:25:19,380 >> Quindi questo è effettivamente tipo di, in qualche modi, e per certi versi non è 505 00:25:19,380 --> 00:25:23,170 davvero, ma è un livello di poco inferiore che il codice PHP che si può essere 506 00:25:23,170 --> 00:25:26,980 scrivere per P impostare sette perché PHP e Apache sorta di prendersi cura di alcuni 507 00:25:26,980 --> 00:25:28,150 di queste cose per voi. 508 00:25:28,150 --> 00:25:32,520 In PHP, è possibile ignorare l'impostazione predefinita comportamento scrivendo le proprie intestazioni. 509 00:25:32,520 --> 00:25:35,520 Ma ai fini di questa, otteniamo di scrivere le nostre intestazioni. 510 00:25:35,520 --> 00:25:38,210 511 00:25:38,210 --> 00:25:41,105 >> Così fa quella linea senso tutti, la linea testina di scrittura? 512 00:25:41,105 --> 00:25:41,380 OK. 513 00:25:41,380 --> 00:25:42,280 Impressionante. 514 00:25:42,280 --> 00:25:45,870 >> Allora quello che faccio io finisco la risposta dicendo ciao mondo. 515 00:25:45,870 --> 00:25:47,040 OK. 516 00:25:47,040 --> 00:25:49,920 Ma questo è solo una funzione chiamato richiesta handler. 517 00:25:49,920 --> 00:25:53,510 Così ora io in realtà devo genere di fare qualcosa con questa funzione, giusto? 518 00:25:53,510 --> 00:25:59,170 >> Quindi, ecco quello che faccio c'è è questo linea che fa eguali server di var 519 00:25:59,170 --> 00:26:03,530 HTTP.create server, quindi ho passare nel gestore richiesta. 520 00:26:03,530 --> 00:26:06,080 Quindi questo è una specie di nodo modo di creare un server. 521 00:26:06,080 --> 00:26:08,790 E accorgo che sto passando nel gestore richiesta. 522 00:26:08,790 --> 00:26:12,290 Quindi questo sta dicendo la createServer funzione che voglio che tu mi faccia una 523 00:26:12,290 --> 00:26:16,270 server e quando il server riceve una risposta, ho bisogno che tu chiami 524 00:26:16,270 --> 00:26:18,680 chiedere funzione del gestore. 525 00:26:18,680 --> 00:26:18,990 OK? 526 00:26:18,990 --> 00:26:22,290 >> In modo che la linea più o meno finisce subito. 527 00:26:22,290 --> 00:26:28,780 Così la linea di server var è fatto bene dopo aver fatto che praticamente. 528 00:26:28,780 --> 00:26:31,770 Voglio dire, si deve impostare alcune interna Stato di sapere che si dovrà 529 00:26:31,770 --> 00:26:35,400 chiamare tale funzione richiesta del gestore, ma non sta andando a sedersi lì e 530 00:26:35,400 --> 00:26:37,730 per esempio ha l'utente inviato me ancora una richiesta? 531 00:26:37,730 --> 00:26:39,270 È l'utente mi ha mandato ancora una richiesta? 532 00:26:39,270 --> 00:26:40,780 Quindi non blocca. 533 00:26:40,780 --> 00:26:41,650 OK? 534 00:26:41,650 --> 00:26:46,120 >> Così che cosa farà è fondamentalmente ora memorizza un puntatore a questo codice, 535 00:26:46,120 --> 00:26:49,670 questa funzione di gestione richiesta, e quindi verrà eseguito il codice quando qualcuno 536 00:26:49,670 --> 00:26:52,170 presenta una domanda. 537 00:26:52,170 --> 00:26:54,120 E poi facciamo server.listen. 538 00:26:54,120 --> 00:26:56,950 539 00:26:56,950 --> 00:26:59,960 >> Il 1337 non è abbastanza arbitrario. 540 00:26:59,960 --> 00:27:02,285 Non avevo motivo particolare per scegliere quel numero. 541 00:27:02,285 --> 00:27:03,860 E 'stato del tutto casuale. 542 00:27:03,860 --> 00:27:07,010 Ma che specifica solo la porta. 543 00:27:07,010 --> 00:27:10,640 Così la maggior parte dei server web vedrai che utilizzare la porta 80 perché è gentile 544 00:27:10,640 --> 00:27:11,810 di come la convention. 545 00:27:11,810 --> 00:27:16,170 Quindi se vado a qualcosa di simile, Non lo so, Wikipedia.org, 546 00:27:16,170 --> 00:27:17,700 e ho messo colon 8 - 547 00:27:17,700 --> 00:27:18,610 oh wow, non si può vedere che. 548 00:27:18,610 --> 00:27:19,370 Mi dispiace. 549 00:27:19,370 --> 00:27:21,820 Ma se faccio Wikipedia - 550 00:27:21,820 --> 00:27:24,810 Io scrivo qui solo in modo che è chiaro sulla fotocamera. 551 00:27:24,810 --> 00:27:29,150 Ma se prendo questo in un browser con due punti 80, che specifica andare a 552 00:27:29,150 --> 00:27:31,430 Wikipedia.org sulla porta 80. 553 00:27:31,430 --> 00:27:36,200 Così è come come gli Stati Uniti hanno più porte come dove potete spedire 554 00:27:36,200 --> 00:27:37,440 cose da tipo di. 555 00:27:37,440 --> 00:27:40,730 Così è come andare a questa particolare collocare su questo server. 556 00:27:40,730 --> 00:27:40,990 OK. 557 00:27:40,990 --> 00:27:45,730 >> Così ho scelto 1337. 558 00:27:45,730 --> 00:27:47,910 C'è tutta una serie di numeri che si possono raccogliere. 559 00:27:47,910 --> 00:27:50,390 Non era del tutto speciale. 560 00:27:50,390 --> 00:27:54,560 >> Ma che cosa ho intenzione di fare adesso è ho intenzione di correre Node. 561 00:27:54,560 --> 00:27:59,730 Lasciami entrare effettivamente che una coppia linee verso il basso in modo che si può vedere. 562 00:27:59,730 --> 00:28:03,130 Io vado a fare il nodo, e sono andando a correre simpler.js. 563 00:28:03,130 --> 00:28:06,880 E parleremo di come arrivare Nodo istituito in un po '. 564 00:28:06,880 --> 00:28:09,350 Ma ora è solo in esecuzione il server. 565 00:28:09,350 --> 00:28:14,360 >> Quindi una cosa che possiamo provare che non possono essere eccitante è che possiamo effettivamente 566 00:28:14,360 --> 00:28:16,300 provare ad accedere in Curl. 567 00:28:16,300 --> 00:28:20,680 Così posso fare Curl, e la mia macchina host locale. 568 00:28:20,680 --> 00:28:24,600 Vedrete anche questa scritta come questo a volte. 569 00:28:24,600 --> 00:28:29,810 Host locale e 127.0.0.1 sono gentili di come il vostro computer di casa. 570 00:28:29,810 --> 00:28:33,180 Quindi è come parlare a proprio computer. 571 00:28:33,180 --> 00:28:33,760 OK. 572 00:28:33,760 --> 00:28:36,030 >> E poi posso dire 1337. 573 00:28:36,030 --> 00:28:39,630 Quindi, se io eseguo questa riga di codice, si dice ciao mondo. 574 00:28:39,630 --> 00:28:44,050 E se volevo vedere quella roba che avuto testo tipo di contenuto semplice o 575 00:28:44,050 --> 00:28:46,560 qualunque cosa, potrei anche mettere questa qui. 576 00:28:46,560 --> 00:28:48,810 E notare che non dice OK. 577 00:28:48,810 --> 00:28:50,810 E io ho solo testo. 578 00:28:50,810 --> 00:28:53,140 E poi c'è una specie di tutto questo altro roba che Nodo aggiungerà in 579 00:28:53,140 --> 00:28:54,440 lì per me. 580 00:28:54,440 --> 00:28:55,700 Questo non è super importante. 581 00:28:55,700 --> 00:28:58,230 >> Voglio dire, ci sono una sorta di tecnica aspetti di quel tipo sono 582 00:28:58,230 --> 00:29:02,280 di fresco per parlare, ma solo per mostrare si, ho anche il potere di 583 00:29:02,280 --> 00:29:03,070 cambiare questi circa. 584 00:29:03,070 --> 00:29:06,280 Quindi posso solo aggiungere un po ' di cose del genere. 585 00:29:06,280 --> 00:29:11,780 E poi adesso, se guardo nel mio uscita, sarà che. 586 00:29:11,780 --> 00:29:19,740 Quindi queste intestazioni significano certe cose ai browser e cose del genere. 587 00:29:19,740 --> 00:29:23,040 >> E intestazioni può sostanzialmente dire un browser come rispondere a qualcosa. 588 00:29:23,040 --> 00:29:26,280 Se hai mai sentito parlare di biscotti prima, o se sei mai stato infastidito 589 00:29:26,280 --> 00:29:29,330 da una pagina web modificando i cookies, o girato sul blocco dei cookie o 590 00:29:29,330 --> 00:29:30,320 qualcosa di simile. 591 00:29:30,320 --> 00:29:33,040 Si può effettivamente impostare i cookie in queste intestazioni. 592 00:29:33,040 --> 00:29:36,990 Così raccontano un browser come comportamento in alcuni casi. 593 00:29:36,990 --> 00:29:37,750 OK. 594 00:29:37,750 --> 00:29:40,310 >> Quindi era simpler.js. 595 00:29:40,310 --> 00:29:42,780 Qualcuno ha domande su tale file di codice sorgente? 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 Freddo. 599 00:29:46,490 --> 00:29:50,780 >> Quindi cerchiamo di togliere la r da quella e guardare simple.js. 600 00:29:50,780 --> 00:29:53,010 Quindi questo è più o meno lo stesso programma. 601 00:29:53,010 --> 00:29:56,030 Ho appena scritto un po 'diverso perché volevo ordinare di evidenziare 602 00:29:56,030 --> 00:29:57,850 alcune caratteristiche di JavaScript. 603 00:29:57,850 --> 00:30:03,880 >> Quindi notare che il gestore di richieste funzione è totalmente scomparso. 604 00:30:03,880 --> 00:30:05,800 Oh sì, hai avuto una domanda? 605 00:30:05,800 --> 00:30:08,200 >> PUBBLICO: Sì, gli argomenti che sono passati a quella 606 00:30:08,200 --> 00:30:10,120 funzione, che cosa sono? 607 00:30:10,120 --> 00:30:12,050 >> KEVIN Schmid: Così quelli sono Oggetti JavaScript. 608 00:30:12,050 --> 00:30:15,230 Nella documentazione Node.js, essa fondamentalmente dice quali metodi sono 609 00:30:15,230 --> 00:30:15,910 contenuti in essi. 610 00:30:15,910 --> 00:30:19,602 Abbiamo appena capita di avere l'accesso al questo metodo chiamato testina di scrittura e di fine 611 00:30:19,602 --> 00:30:20,730 e cose del genere. 612 00:30:20,730 --> 00:30:22,590 Ma c'è un intero gruppo più metodi. 613 00:30:22,590 --> 00:30:27,670 >> E, per esempio, come uno di loro in particolare sulla rec, si può fare 614 00:30:27,670 --> 00:30:34,540 qualcosa come rec.method che sarà dirà se si tratta di un HTTP get o 615 00:30:34,540 --> 00:30:36,780 Richieste HTTP POST e cose del genere. 616 00:30:36,780 --> 00:30:39,100 Quindi ci sono tutti i tipi di diversi proprietà, ma sono entrambi 617 00:30:39,100 --> 00:30:42,560 Oggetti JavaScript e hanno solo funzioni ad essi che si 618 00:30:42,560 --> 00:30:43,850 può scrivere cose. 619 00:30:43,850 --> 00:30:45,520 OK? 620 00:30:45,520 --> 00:30:49,030 >> Quindi notare che gestore di richiesta è totalmente andato. 621 00:30:49,030 --> 00:30:52,650 Ma il codice che ho avuto a richiesta gestore è ancora lì. 622 00:30:52,650 --> 00:30:56,520 Ho ancora questo res.writeHead e ho ancora questo res.end. 623 00:30:56,520 --> 00:31:00,270 E che questo è un esempio di un JavaScript è questa idea di un 624 00:31:00,270 --> 00:31:01,460 funzione anonima. 625 00:31:01,460 --> 00:31:04,180 e anonimo è come un nome adatto per perché non letteralmente 626 00:31:04,180 --> 00:31:05,180 avere un nome. 627 00:31:05,180 --> 00:31:07,900 Non c'è nessuna richiesta funzione gestore in là. 628 00:31:07,900 --> 00:31:10,110 >> Non ha nome, ma ancora è prendere un argomento. 629 00:31:10,110 --> 00:31:12,250 Così ho ancora rec e res. 630 00:31:12,250 --> 00:31:16,180 E ho ancora il codice. 631 00:31:16,180 --> 00:31:18,930 Questo è perfettamente bene Codice JavaScript. 632 00:31:18,930 --> 00:31:22,540 Così posso dichiarare una funzione senza esplicitamente dandogli un nome. 633 00:31:22,540 --> 00:31:24,250 E 'un po' di confusione in un primo momento. 634 00:31:24,250 --> 00:31:26,230 Ci sono alcune cose utili come che si può fare con 635 00:31:26,230 --> 00:31:28,450 queste funzioni anonime. 636 00:31:28,450 --> 00:31:32,100 Qualcuno ha domande su questo, o è OK solo, per ora, 637 00:31:32,100 --> 00:31:34,130 sorta di appena accettare che farà la stessa cosa? 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 >> AUDIENCE: sono funzioni prima classe in JavaScript? 641 00:31:38,680 --> 00:31:41,020 >> KEVIN SCHMID: Sono in primo luogo classe in JavaScript. 642 00:31:41,020 --> 00:31:45,490 E proprio sapere che questi concetti di passando una funzione anonima come 643 00:31:45,490 --> 00:31:49,600 Questo vale anche per il codice JavaScript che si possono scrivere nel tuo progetto finale per 644 00:31:49,600 --> 00:31:51,260 il browser web troppo. 645 00:31:51,260 --> 00:31:56,700 Così, per esempio, nel JavaScript il browser, è anche un po 'evento 646 00:31:56,700 --> 00:32:00,680 guidato nel senso che quello che ti avere è quando l'utente fa clic su questo 647 00:32:00,680 --> 00:32:02,640 Pulsante, voglio che eseguire questo codice. 648 00:32:02,640 --> 00:32:07,070 >> Quindi è lo stesso tipo di idee del lato client quando un clic del mouse oppure 649 00:32:07,070 --> 00:32:09,870 mouse sopra qualche immagine sul vostro pagina Web, eseguire questo codice. 650 00:32:09,870 --> 00:32:11,350 Che si possono applicare ai server. 651 00:32:11,350 --> 00:32:16,380 Ecco, questo è un po 'come l'emozionante motivo per cui JavaScript è davvero un 652 00:32:16,380 --> 00:32:19,810 adeguate o alcune persone pensano che sia un linguaggio adatto per questo tipo di 653 00:32:19,810 --> 00:32:22,530 server di autista evento perché avete queste funzioni anonime. 654 00:32:22,530 --> 00:32:26,150 Avete l'idea di questo codice asincrono. 655 00:32:26,150 --> 00:32:27,060 OK. 656 00:32:27,060 --> 00:32:30,360 Qualcuno ha delle domande? 657 00:32:30,360 --> 00:32:30,470 >> OK. 658 00:32:30,470 --> 00:32:33,440 Quindi era simple.js. 659 00:32:33,440 --> 00:32:38,070 Quindi diamo un'occhiata a un altro o una coppia più. 660 00:32:38,070 --> 00:32:42,040 Quindi questo è sleep.js. 661 00:32:42,040 --> 00:32:47,160 Così è chiunque ha familiarità con la funzione sleep C? 662 00:32:47,160 --> 00:32:50,936 Da forse una delle lezioni precedenti o qualcosa di simile? 663 00:32:50,936 --> 00:32:54,650 >> Quindi, in pratica è possibile passare penso che un numero di secondi o se si sta utilizzando U 664 00:32:54,650 --> 00:32:57,080 dormire un numero di millisecondi o nanosecondi. 665 00:32:57,080 --> 00:33:00,450 E in fondo il programma sarà solo smettere esecuzione per tale periodo di tempo. 666 00:33:00,450 --> 00:33:01,280 Giusto? 667 00:33:01,280 --> 00:33:06,970 E poi si sveglierà alla fine e poi sarà solo continuare a correre 668 00:33:06,970 --> 00:33:08,340 il programma. 669 00:33:08,340 --> 00:33:12,740 >> Quindi questo server sorta di dà l'impressione di dormire. 670 00:33:12,740 --> 00:33:17,580 Quindi notare che abbiamo la stessa res.writeHead 200 con l'intestazione 671 00:33:17,580 --> 00:33:22,130 prima, ma poi stiamo chiamando questa funzione chiamata set timeout. 672 00:33:22,130 --> 00:33:26,170 Impostare il timeout è disponibile anche in il browser web Google Chrome 673 00:33:26,170 --> 00:33:28,000 o Safari o qualsiasi altra cosa. 674 00:33:28,000 --> 00:33:31,720 E in fondo quello che sta facendo qui si è tenuto in una funzione. 675 00:33:31,720 --> 00:33:33,360 Notate, ancora una volta, si tratta di un funzione anonima. 676 00:33:33,360 --> 00:33:36,310 Ecco, questo è genere di freddo perché siamo utilizzando una funzione anonima in un 677 00:33:36,310 --> 00:33:38,950 funzione anonima che può essere un po 'strano. 678 00:33:38,950 --> 00:33:42,270 >> Ma è in corso quella funzione, che è fondamentalmente dicendo - e il modo in cui questo 679 00:33:42,270 --> 00:33:47,430 le opere è in 5000 millisecondi, voglio di eseguire quella funzione che 680 00:33:47,430 --> 00:33:50,830 appena finisce la risposta e scrive hey. 681 00:33:50,830 --> 00:33:56,730 Quindi questo dà l'impressione di come dormire, ma il modo in cui questa realtà 682 00:33:56,730 --> 00:33:59,780 Works è faremo correre attraverso questa linea molto rapidamente. 683 00:33:59,780 --> 00:34:01,190 Stiamo solo scrivere qualcosa. 684 00:34:01,190 --> 00:34:03,780 E poi ci sarà anche correre attraverso questa linea molto rapidamente. 685 00:34:03,780 --> 00:34:08,620 Quindi non stiamo effettivamente andando aspettare cinque secondi. 686 00:34:08,620 --> 00:34:11,370 Stiamo solo andando a correre questo codice all'istante. 687 00:34:11,370 --> 00:34:14,219 >> E poi c'è, ancora una volta, questo piccolo ciclo di eventi che ha ora questa cosa 688 00:34:14,219 --> 00:34:17,570 registri che, in fondo è solo costantemente andando in giro in un cerchio 689 00:34:17,570 --> 00:34:21,620 e guardando l'orologio in un unico filo e detto, ha cinque secondi 690 00:34:21,620 --> 00:34:22,360 passato ancora? 691 00:34:22,360 --> 00:34:26,409 E poi quando vede che la seconda mano si è mossa come cinque secondi o 692 00:34:26,409 --> 00:34:29,190 qualunque cosa, poi si sveglia e dice: oh, cosa devo fare? 693 00:34:29,190 --> 00:34:30,350 Oh, devo eseguire questo codice. 694 00:34:30,350 --> 00:34:33,110 E poi sta andando a eseguire res.end hey. 695 00:34:33,110 --> 00:34:35,360 >> Così ancora una volta, stiamo mai aspettando qui. 696 00:34:35,360 --> 00:34:38,590 Quindi non è che questo codice all'interno di questa funzione sta andando a prendere cinque 697 00:34:38,590 --> 00:34:39,900 secondi per l'esecuzione. 698 00:34:39,900 --> 00:34:43,090 Questo codice verrà eseguito praticamente istantaneamente, almeno rispetto a 699 00:34:43,090 --> 00:34:46,139 i cinque secondi che stavamo parlando in precedenza prima. 700 00:34:46,139 --> 00:34:52,100 >> Quindi, solo per mostrare in azione, Posso fare Node.sleep.js. 701 00:34:52,100 --> 00:34:55,159 E ho fatto rovinare qualcosa? 702 00:34:55,159 --> 00:34:56,310 Forse. 703 00:34:56,310 --> 00:34:57,410 Scusi. 704 00:34:57,410 --> 00:34:59,530 Vediamo cosa possiamo fare per risolvere questo problema. 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 Quindi sicuramente utilizzare Node.js. 709 00:35:17,464 --> 00:35:19,440 Sto solo scherzando. 710 00:35:19,440 --> 00:35:19,570 OK. 711 00:35:19,570 --> 00:35:20,820 Solo un secondo. 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 So di cosa si tratta. 715 00:35:29,130 --> 00:35:34,440 >> Quindi il problema è che nella mia altra scheda qui, stavo correndo nodo già 716 00:35:34,440 --> 00:35:36,590 che stesso indirizzo, 1337. 717 00:35:36,590 --> 00:35:43,370 Quindi l'errore che questo ha gettato, se guardiamo al reale da vicino, è l'indirizzo in 718 00:35:43,370 --> 00:35:45,180 utilizzare, EADDRINUSE. 719 00:35:45,180 --> 00:35:47,970 Quindi ero già usando 1337 qui. 720 00:35:47,970 --> 00:35:52,210 Quindi, se chiudo questa via, e poi ho adesso provate a eseguire questo, si spera, tutto 721 00:35:52,210 --> 00:35:53,210 andrà bene. 722 00:35:53,210 --> 00:35:53,440 OK. 723 00:35:53,440 --> 00:35:57,020 Così si può avere solo una cosa tipo di ascolto su una porta in una volta. 724 00:35:57,020 --> 00:35:59,660 Un'altra soluzione sarebbe stata per me per modificare solo quel programma e fare 725 00:35:59,660 --> 00:36:02,370 che sia come il 1338 o qualcosa del genere così. 726 00:36:02,370 --> 00:36:04,100 >> Ma ora il sonno è in esecuzione. 727 00:36:04,100 --> 00:36:06,400 Quindi cerchiamo di realmente provare in Browser questa volta perché è un 728 00:36:06,400 --> 00:36:09,080 poco commovente vedere in un terminale. 729 00:36:09,080 --> 00:36:13,560 Così sto solo andando per andare a quella 127 indirizzo di nuovo a 1337. 730 00:36:13,560 --> 00:36:14,850 E se si può vedere - 731 00:36:14,850 --> 00:36:18,050 Non so se è possibile - ma il mio browser di prendere una molto, molto lunga 732 00:36:18,050 --> 00:36:20,600 tempo per caricare o come cinque secondi. 733 00:36:20,600 --> 00:36:23,460 >> E poi, dopo che, finalmente conclusa la risposta. 734 00:36:23,460 --> 00:36:29,070 E non si vede perché la cosa viene spostato su un po ', ma se faccio 735 00:36:29,070 --> 00:36:32,500 questo un po 'più piccola, è può vedere che dice hey. 736 00:36:32,500 --> 00:36:35,130 Così ho preso il hey, ma dopo cinque secondi. 737 00:36:35,130 --> 00:36:38,510 E potrebbe essere un po 'più pulita da vedere qui sul terminale, quindi sono 738 00:36:38,510 --> 00:36:40,980 intenzione di fare un - 739 00:36:40,980 --> 00:36:43,540 facciamolo qui - 740 00:36:43,540 --> 00:36:48,370 facciamolo Curl tale indirizzo nuovamente con il 1337. 741 00:36:48,370 --> 00:36:50,820 E ho appena genere di dover sedersi qui per cinque secondi. 742 00:36:50,820 --> 00:36:53,760 Ma si noti che il server può accettare nuove risposte. 743 00:36:53,760 --> 00:36:54,940 Così la stampa hey. 744 00:36:54,940 --> 00:36:58,720 >> E per questo demo, fondamentalmente quello che Posso fare in questa altra scheda - 745 00:36:58,720 --> 00:37:02,640 quindi diciamo che faccio questo in un'altra scheda, Io vado a fare Curl e lo stesso 746 00:37:02,640 --> 00:37:03,780 cosa di nuovo. 747 00:37:03,780 --> 00:37:06,600 E ho intenzione di provare a calciare questi ragazzi fuori allo stesso tempo. 748 00:37:06,600 --> 00:37:08,260 Quindi ho intenzione di fare questo, e sono andando a correre qui e io sono 749 00:37:08,260 --> 00:37:09,650 intenzione di farlo di nuovo. 750 00:37:09,650 --> 00:37:14,030 >> E facciamo in modo che si può vedere entrambi. 751 00:37:14,030 --> 00:37:20,250 Quello stampato hey e quello stampato hey tutto il modo a - 752 00:37:20,250 --> 00:37:22,550 facciamolo di nuovo l'esperimento. 753 00:37:22,550 --> 00:37:25,100 In realtà, usiamo questo ingannare, se va bene. 754 00:37:25,100 --> 00:37:30,520 >> Quindi ho intenzione di usare una shell che cosa mi permette di correre fondamentalmente due copie 755 00:37:30,520 --> 00:37:32,630 di questo programma in parallelo. 756 00:37:32,630 --> 00:37:36,070 Quindi sarà eseguito il primo programma e il secondo programma in parallelo. 757 00:37:36,070 --> 00:37:39,060 Così ora se premo Invio, sta andando a fare tale richiesta più o meno 758 00:37:39,060 --> 00:37:40,570 istantaneamente allo stesso tempo. 759 00:37:40,570 --> 00:37:42,620 Quindi cerchiamo di dare a questo un colpo. 760 00:37:42,620 --> 00:37:44,950 >> Così ora notare che dice due processi. 761 00:37:44,950 --> 00:37:50,630 E se siete curiosi, che 27.000 numero è fondamentalmente l'ID di processo. 762 00:37:50,630 --> 00:37:52,940 E poi notare, hanno stampato hey allo stesso tempo. 763 00:37:52,940 --> 00:37:56,820 Non era come abbiamo dovuto aspettare cinque secondi per uno e poi, dopo che, 764 00:37:56,820 --> 00:37:59,640 cinque secondi dopo ottenere la seconda. 765 00:37:59,640 --> 00:38:03,300 Ecco, questo è una specie di, in qualche modo, è non proprio la prova, ma è 766 00:38:03,300 --> 00:38:07,390 evidenza intuitiva che non è solo come aspettare cinque secondi e il blocco 767 00:38:07,390 --> 00:38:08,960 l'intero thread. 768 00:38:08,960 --> 00:38:10,720 OK fresco. 769 00:38:10,720 --> 00:38:17,850 >> Così Aaron ha fatto una domanda in precedenza che era, beh, cosa se non facciamo qualcosa - 770 00:38:17,850 --> 00:38:18,735 Yep? 771 00:38:18,735 --> 00:38:19,051 >> AUDIENCE: Aspetta. 772 00:38:19,051 --> 00:38:21,585 Come è diverso da buffer di printf, però? 773 00:38:21,585 --> 00:38:23,010 Non si fa automaticamente? 774 00:38:23,010 --> 00:38:25,390 Perché dobbiamo preoccupare? 775 00:38:25,390 --> 00:38:26,555 >> KEVIN SCHMID: Oh, hai potuto dire che più una volta? 776 00:38:26,555 --> 00:38:29,510 >> AUDIENCE: Non gli piace buffer di printf fare la stessa cosa? 777 00:38:29,510 --> 00:38:31,280 >> KEVIN Schmid: Il buffer printf? 778 00:38:31,280 --> 00:38:32,753 >> AUDIENCE: Già. 779 00:38:32,753 --> 00:38:33,244 OK. 780 00:38:33,244 --> 00:38:40,609 Non era in uno dei quiz erano parlando di come se a destra printf 781 00:38:40,609 --> 00:38:42,899 qualcosa e poi lo hanno in pausa una secondo, e poi avete ciclo di dieci 782 00:38:42,899 --> 00:38:46,530 tempi, sarà attendere dieci secondi e poi printf tutto insieme? 783 00:38:46,530 --> 00:38:47,460 >> KEVIN Schmid: Oh, OK. 784 00:38:47,460 --> 00:38:49,170 >> AUDIENCE: Sta facendo la stessa cosa allora in questo caso? 785 00:38:49,170 --> 00:38:52,630 >> KEVIN Schmid: Quindi la domanda era sostanzialmente in uno degli ex quiz 786 00:38:52,630 --> 00:38:57,200 o qualcosa del genere, c'era una domanda che in sostanza se dici di stampa f 10 787 00:38:57,200 --> 00:39:01,490 cose alla volta e poi dormito come in il processo di stampa quelli fuori, 788 00:39:01,490 --> 00:39:04,850 alla fine per qualche motivo, sarebbe basta scaricare quelli tutti fuori sullo schermo. 789 00:39:04,850 --> 00:39:06,740 Quindi c'è una specie di due diversi concetti qui. 790 00:39:06,740 --> 00:39:10,400 >> Quindi credo che una cosa è che, in questo caso, abbiamo a che fare con due diversi 791 00:39:10,400 --> 00:39:13,510 sorta di gente che chiede server per le cose allo stesso tempo. 792 00:39:13,510 --> 00:39:17,455 E la ragione che il tipo di printf attende così e discariche fuori tutto 793 00:39:17,455 --> 00:39:21,760 allo stesso tempo è più legata al come printf tipo di - 794 00:39:21,760 --> 00:39:25,100 quindi il modo printf è in realtà implementato è che ha sostanzialmente quella di 795 00:39:25,100 --> 00:39:28,850 parlare con il sistema operativo di scrivere che roba alla console. 796 00:39:28,850 --> 00:39:33,460 Quindi non vuole fare tutto questo roba subito quando si dice printf 797 00:39:33,460 --> 00:39:36,260 alcune stringhe perché questo potrebbe ottenere costoso se deve 798 00:39:36,260 --> 00:39:37,340 farlo ogni volta. 799 00:39:37,340 --> 00:39:41,530 >> Quindi, se si fa printf hey, il programma Non potrebbe effettivamente stampare tale 800 00:39:41,530 --> 00:39:43,040 immediatamente alla console. 801 00:39:43,040 --> 00:39:46,080 Si potrebbe dire, ok, l'ho scritto. 802 00:39:46,080 --> 00:39:49,570 E poi tipo di aspettare per voi di dare un po 'più prima realmente 803 00:39:49,570 --> 00:39:51,380 scrivendolo nella console. 804 00:39:51,380 --> 00:39:54,040 >> Quindi la ragione che quello era il caso - 805 00:39:54,040 --> 00:39:56,450 ed è una specie di estraneo al sonno - 806 00:39:56,450 --> 00:40:00,060 è che il sonno è stato una sorta di appena iniettato in là per dimostrare l' 807 00:40:00,060 --> 00:40:02,480 fatto che non scrive esso sincrono. 808 00:40:02,480 --> 00:40:06,210 Ma la ragione di ciò è solo prestazioni in modo che non c'è bisogno di 809 00:40:06,210 --> 00:40:08,920 fanno si che molti contatti il sistema operativo. 810 00:40:08,920 --> 00:40:12,300 >> Ma qui, quello che stiamo realmente cercando di fare con questa cosa il sonno è solo spettacolo 811 00:40:12,300 --> 00:40:17,730 che quando abbiamo due persone che visitano questo sito, non sta andando a mettere 812 00:40:17,730 --> 00:40:22,310 loro in una linea dove sta andando a dire Devo aiutare, e poi quando sono 813 00:40:22,310 --> 00:40:25,350 completamente finito aiutandovi dopo che queste cinque secondi, quindi ho intenzione di 814 00:40:25,350 --> 00:40:26,750 passare alla persona successiva. 815 00:40:26,750 --> 00:40:29,515 Così richiesta della prima persona non legare tale ciclo di eventi 816 00:40:29,515 --> 00:40:31,610 se questo ha un senso. 817 00:40:31,610 --> 00:40:34,980 >> Ma qui è in realtà un esempio di qualcosa che legherà 818 00:40:34,980 --> 00:40:36,090 il ciclo degli eventi. 819 00:40:36,090 --> 00:40:39,130 Quindi, ecco una funzione orribile calcolare l'ennesima Fibonacci. 820 00:40:39,130 --> 00:40:43,510 E 'letteralmente il modo peggiore possibile calcolare il numero di Fibonacci all'ennesima potenza. 821 00:40:43,510 --> 00:40:48,480 E questo è in realtà solo di riconoscere dove questo è venuto da, 822 00:40:48,480 --> 00:40:49,330 c'è in realtà - 823 00:40:49,330 --> 00:40:53,230 Voglio dire, si può provare ad andare a trovare - ma c'è come una lunga blog 824 00:40:53,230 --> 00:40:54,130 post che qualcuno ha scritto. 825 00:40:54,130 --> 00:40:55,660 E 'come una di quelle cose Reddit. 826 00:40:55,660 --> 00:40:59,650 Ma qualcuno ha criticato Node.js, e hanno usato questo come esempio. 827 00:40:59,650 --> 00:41:03,700 Così ho sorta di voluto mostrare solo due diverse prospettive solo per ottenere 828 00:41:03,700 --> 00:41:07,320 una conoscenza generale dei concetti dietro queste due cose. 829 00:41:07,320 --> 00:41:13,050 >> Ma questa è scelto come solo un orribile, computazionalmente terribilmente inefficiente 830 00:41:13,050 --> 00:41:15,940 modo intensivo per calcolare la numero di Fibonacci all'ennesima potenza. 831 00:41:15,940 --> 00:41:21,180 Così come nota a margine, perché è orribile come in un modo? 832 00:41:21,180 --> 00:41:23,210 Yep? 833 00:41:23,210 --> 00:41:25,130 >> AUDIENCE: Diciamo che iniziare con 1.000. 834 00:41:25,130 --> 00:41:27,050 1.000 divide in 999 e 998. 835 00:41:27,050 --> 00:41:28,970 Ognuno di questo si divide in due cose. 836 00:41:28,970 --> 00:41:30,890 Ognuno di questo si divide in due cose. 837 00:41:30,890 --> 00:41:31,355 >> KEVIN SCHMID: Giusto. 838 00:41:31,355 --> 00:41:32,400 >> PUBBLICO: Per tutto il tragitto verso il basso. 839 00:41:32,400 --> 00:41:32,840 >> KEVIN SCHMID: Esattamente. 840 00:41:32,840 --> 00:41:37,330 Quindi, solo per ripetere per la fotocamera, se chiamare fib su come 1.000 o qualcosa del genere 841 00:41:37,330 --> 00:41:41,810 così, ovviamente non è inferiore a o uguale a uno, quindi ho intenzione di 842 00:41:41,810 --> 00:41:46,040 Vado a questo altro caso, e poi vado chiamare fib 999 più fib 998. 843 00:41:46,040 --> 00:41:50,290 E poi praticamente tutto di quel lavoro che fib 999 fa è 844 00:41:50,290 --> 00:41:52,950 tipo di a questo livello. 845 00:41:52,950 --> 00:41:55,620 Se si va giù, è ancora più ridondante Oltre a questo, ma se avete solo 846 00:41:55,620 --> 00:42:01,390 Ritieni calcolo fib 998 ottiene noi abbastanza vicino a fib 999. 847 00:42:01,390 --> 00:42:05,860 Quindi dovremmo davvero essere un po 'più intelligente su come tipo di riuso 848 00:42:05,860 --> 00:42:07,580 questi, ma non stiamo riutilizzando queste cose a tutti. 849 00:42:07,580 --> 00:42:11,860 Quindi potete immaginare questo gigantesco, gigantesco albero che è semplicemente orribile. 850 00:42:11,860 --> 00:42:12,940 >> Ma comunque, OK. 851 00:42:12,940 --> 00:42:14,040 Quindi era fib. 852 00:42:14,040 --> 00:42:15,530 Ci vuole solo un po 'a correre. 853 00:42:15,530 --> 00:42:16,510 Yep? 854 00:42:16,510 --> 00:42:17,760 >> AUDIENCE: [incomprensibile]. 855 00:42:17,760 --> 00:42:20,430 856 00:42:20,430 --> 00:42:22,481 >> KEVIN SCHMID: Oh, hai potuto ripetere la domanda? 857 00:42:22,481 --> 00:42:23,731 >> AUDIENCE: [incomprensibile]. 858 00:42:23,731 --> 00:42:30,840 859 00:42:30,840 --> 00:42:33,990 >> KEVIN Schmid: Oh, quindi questo è solo codice che sta per essere una sorta di sul 860 00:42:33,990 --> 00:42:34,850 lato server. 861 00:42:34,850 --> 00:42:38,100 Quindi questo non sta per essere trovato nel browser o nulla. 862 00:42:38,100 --> 00:42:42,160 E 'fondamentalmente quello che abbiamo è che quando l'utente qui praticamente marche 863 00:42:42,160 --> 00:42:45,300 loro richiesta di nuovo, quando abbiamo una sorta di fare una richiesta, stiamo andando a chiamare 864 00:42:45,300 --> 00:42:47,040 questa funzione sul lato server. 865 00:42:47,040 --> 00:42:50,480 E poi avremo il risultato di nuovo di chiamare tale funzione. 866 00:42:50,480 --> 00:42:52,460 E poi ci limiteremo a stamperemo all'utente. 867 00:42:52,460 --> 00:42:54,580 Così l'utente in realtà non si occupa con questa funzione troppo. 868 00:42:54,580 --> 00:42:57,270 >> Problemi che la questione? 869 00:42:57,270 --> 00:42:58,470 Ritiene che senso? 870 00:42:58,470 --> 00:42:58,810 OK. 871 00:42:58,810 --> 00:43:00,930 Freddo. 872 00:43:00,930 --> 00:43:04,240 >> Così ancora una volta, facciamo tutta questa res.writeHead cosa in cui stampiamo 873 00:43:04,240 --> 00:43:05,150 l'intestazione. 874 00:43:05,150 --> 00:43:09,730 E poi finisco la risposta facendo il numero magico è fib 45. 875 00:43:09,730 --> 00:43:12,100 Così facciamo solo eseguire questo server. 876 00:43:12,100 --> 00:43:15,190 Quindi ho intenzione di fare un nodo fib.js. 877 00:43:15,190 --> 00:43:17,340 Così ora il mio server fib è in esecuzione. 878 00:43:17,340 --> 00:43:21,790 >> E poi qui, vado di fare uno di questi. 879 00:43:21,790 --> 00:43:22,200 OK? 880 00:43:22,200 --> 00:43:24,960 Così sto solo andando a dire, Curl. 881 00:43:24,960 --> 00:43:32,226 Così sta andando a prendere un po 'di tempo, ma speriamo presto finirà e 882 00:43:32,226 --> 00:43:35,660 stamperà che 45a Fibonacci numero. 883 00:43:35,660 --> 00:43:36,910 >> AUDIENCE: [incomprensibile]. 884 00:43:36,910 --> 00:43:40,720 885 00:43:40,720 --> 00:43:42,050 >> KEVIN SCHMID: dovrebbe avere fatto abbastanza presto. 886 00:43:42,050 --> 00:43:43,780 Così dovrebbe prendere 5-6 secondi. 887 00:43:43,780 --> 00:43:48,570 Non so che è solo V8 essere super veloce, ma in ogni caso, si tratta di un 888 00:43:48,570 --> 00:43:52,700 molto breve esempio e volutamente inelegant di un non banale 889 00:43:52,700 --> 00:43:54,200 calcolo. 890 00:43:54,200 --> 00:43:56,700 Così dopo un po ', fa arrivare questo. 891 00:43:56,700 --> 00:44:02,130 >> Ma ora, cosa succede se faccio lo stesso tipo di esperimento come prima dove faccio 892 00:44:02,130 --> 00:44:04,010 due richieste allo stesso tempo? 893 00:44:04,010 --> 00:44:06,990 Così qui ho intenzione di una Curl su tale indirizzo, e io vado 894 00:44:06,990 --> 00:44:08,260 per fare un altro Curl. 895 00:44:08,260 --> 00:44:12,070 E ricordate, quando abbiamo fatto questo per la Dormire di server, quando abbiamo praticamente avuto lo 896 00:44:12,070 --> 00:44:15,320 dopo cinque secondi, hanno praticamente molto sia tornato a destra 897 00:44:15,320 --> 00:44:16,380 intorno allo stesso tempo. 898 00:44:16,380 --> 00:44:18,650 Quindi non era particolarmente legato. 899 00:44:18,650 --> 00:44:20,290 >> Ma proviamo ora. 900 00:44:20,290 --> 00:44:22,370 Ok, quindi abbiamo ottenuto i nostri due processi. 901 00:44:22,370 --> 00:44:24,210 Ricordate quelli che sono gli ID di processo. 902 00:44:24,210 --> 00:44:25,900 Ciò sta andando essere un po ' imbarazzante mentre stallo. 903 00:44:25,900 --> 00:44:31,340 904 00:44:31,340 --> 00:44:35,360 Quindi cerchiamo di restare qui e aspettare. 905 00:44:35,360 --> 00:44:37,090 >> Così uno di loro dovrebbe venire indietro dopo come - 906 00:44:37,090 --> 00:44:39,190 OK, così è tornato. 907 00:44:39,190 --> 00:44:43,570 Ma allora perché non ha fatto il secondo uno tornare appena ancora? 908 00:44:43,570 --> 00:44:44,389 Yep? 909 00:44:44,389 --> 00:44:49,280 >> PUBBLICO: Il server non può fare nulla mentre è il calcolo così grande numero. 910 00:44:49,280 --> 00:44:51,620 >> KEVIN SCHMID: Giusto. 911 00:44:51,620 --> 00:44:55,395 Quindi la risposta è stata semplicemente che il server davvero non si può fare nulla, mentre 912 00:44:55,395 --> 00:44:57,460 è calcolare il numero di Fibonacci. 913 00:44:57,460 --> 00:44:59,360 Così ora ho appena ricevuto i miei due cose indietro. 914 00:44:59,360 --> 00:45:03,210 Ma credo che solo a pensare al codice un po 'di più, come sta funzionando 915 00:45:03,210 --> 00:45:05,030 e tutto. 916 00:45:05,030 --> 00:45:11,750 >> Quindi questa funzione ecco il codice che Ho detto che questo server per eseguire quando 917 00:45:11,750 --> 00:45:14,100 riceve una nuova richiesta in arrivo. 918 00:45:14,100 --> 00:45:17,940 Quindi è solo andare a correre attraverso questo intero codice, e poi sta andando andare 919 00:45:17,940 --> 00:45:21,120 ritornare al ciclo degli eventi e poi continuare verifica di nuovi eventi. 920 00:45:21,120 --> 00:45:23,670 Quindi, in pratica quello che abbiamo accadendo è il server è 921 00:45:23,670 --> 00:45:25,080 ascolto di cose nuove. 922 00:45:25,080 --> 00:45:28,070 La prima persona chiede cosa 45 è. 923 00:45:28,070 --> 00:45:30,490 Corriamo questo codice per calcolarlo. 924 00:45:30,490 --> 00:45:33,420 Questo codice richiede circa cinque per sei secondi per l'esecuzione. 925 00:45:33,420 --> 00:45:36,990 Poi torniamo al ciclo degli eventi e verificare la presenza di nuove richieste. 926 00:45:36,990 --> 00:45:42,700 >> Quindi questo è un esempio di come, se si avere cose che sono cosiddetto calcolo 927 00:45:42,700 --> 00:45:48,140 legato, o usare un sacco di calcolo, non il potere, ma come sono 928 00:45:48,140 --> 00:45:50,260 computazionalmente intensive - 929 00:45:50,260 --> 00:45:54,080 Credo che una cosa da dire su questo è che questa funzione fa totalmente, 930 00:45:54,080 --> 00:45:56,310 per la maggior parte, piuttosto utile proprio lavoro. 931 00:45:56,310 --> 00:45:59,970 Per tutto il tempo che tale callback funzione era in esecuzione, era abbastanza 932 00:45:59,970 --> 00:46:03,670 molto trascorrendo la maggior parte del suo tempo solo informatica numero di Fibonacci all'ennesima potenza. 933 00:46:03,670 --> 00:46:05,930 >> Ma abbiamo avuto un solo thread da affrontare. 934 00:46:05,930 --> 00:46:10,270 Nel modello Apache, quando due persone presentato la domanda per ottenere fib 45, si 935 00:46:10,270 --> 00:46:11,610 avrebbe avuto due thread differenti. 936 00:46:11,610 --> 00:46:15,060 E poi il lavoro del sistema operativo sarebbe stato, o il livello utente 937 00:46:15,060 --> 00:46:18,660 codice che gestisce i fili, avrei stato di affettare che sul 938 00:46:18,660 --> 00:46:23,060 CPU, o anche se hai avuto più CPU, distribuirli in modo uniforme in tutta la CPU 939 00:46:23,060 --> 00:46:26,130 in modo che fossero entrambi finitura all'incirca allo stesso tempo. 940 00:46:26,130 --> 00:46:31,120 >> Quindi, solo per mostrare come si può ordinare di - e questo non è un perfetto totale 941 00:46:31,120 --> 00:46:34,280 soluzione, ma una sorta di come possiamo fare tornare qui e fare 942 00:46:34,280 --> 00:46:35,880 un po 'meglio. 943 00:46:35,880 --> 00:46:41,540 Quindi quello che ho qui è un programma chiamato Fib C. E questo utilizza fondamentalmente 944 00:46:41,540 --> 00:46:45,690 un altro dei moduli di nodo denominato Il Modulo processo figlio. 945 00:46:45,690 --> 00:46:49,210 Così ho incluso che in genere superiore di come vorrei fare una libbra includere 946 00:46:49,210 --> 00:46:51,230 process.h bambino o qualcosa del genere. 947 00:46:51,230 --> 00:46:56,210 Ora ho accesso a questa variabile CP che ha tutta la mia funzionalità. 948 00:46:56,210 --> 00:47:01,810 >> Così ora quello che sto facendo in questa risposta gestore è sto correndo questo programma 949 00:47:01,810 --> 00:47:04,100 dot ridurre drasticamente fib 45. 950 00:47:04,100 --> 00:47:06,820 Quindi quello che ho fatto - e sto solo andando per uscire da questo programma per un 951 00:47:06,820 --> 00:47:07,620 po '- 952 00:47:07,620 --> 00:47:11,060 è ho scritto un programma in C che fondamentalmente calcola la 953 00:47:11,060 --> 00:47:12,630 numero di Fibonacci all'ennesima potenza. 954 00:47:12,630 --> 00:47:15,960 Così qui è solo un programma che ho scritto in C che calcola questo. 955 00:47:15,960 --> 00:47:19,040 Posso compilarlo, e posso correre esso dalla riga di comando. 956 00:47:19,040 --> 00:47:22,150 E sta andando a calcolare il Numero 45th Fibonacci. 957 00:47:22,150 --> 00:47:24,510 >> Quindi notare ci vuole solo più o meno a lungo. 958 00:47:24,510 --> 00:47:28,240 Probabilmente potuto usare dash 03 per ottimizzarlo o qualcosa di simile, 959 00:47:28,240 --> 00:47:31,050 ma ho appena fatto come regolare impostazioni del compilatore. 960 00:47:31,050 --> 00:47:33,260 E si stampa fuori. 961 00:47:33,260 --> 00:47:36,830 >> Ma ora, cosa sto tipo di fatto? 962 00:47:36,830 --> 00:47:39,800 Oh scusate, file errato. 963 00:47:39,800 --> 00:47:42,800 Così faccio la stessa roba con l'intestazione come prima. 964 00:47:42,800 --> 00:47:45,780 Allora faccio questo cp.exec. 965 00:47:45,780 --> 00:47:49,460 Così che cosa sta andando a fare è che è andando a eseguire questo programma. 966 00:47:49,460 --> 00:47:51,960 Ma il modo in cui funziona è che non sta andando ad aspettare 967 00:47:51,960 --> 00:47:53,400 che il programma per terminare. 968 00:47:53,400 --> 00:47:56,000 Dice solo in fondo eseguire questo programma. 969 00:47:56,000 --> 00:47:58,700 Quindi, fondamentalmente digitare questo nel prompt dei comandi tipo. 970 00:47:58,700 --> 00:48:02,350 >> E poi, quando hai finito con essa, eseguire questa funzione. 971 00:48:02,350 --> 00:48:04,800 Così ora abbiamo genere di ottenere questo cosa tutta restaurata 972 00:48:04,800 --> 00:48:06,750 come non stiamo aspettando. 973 00:48:06,750 --> 00:48:08,530 Fa quel tipo di senso? 974 00:48:08,530 --> 00:48:08,990 Yep? 975 00:48:08,990 --> 00:48:11,060 >> AUDIENCE: [incomprensibile]? 976 00:48:11,060 --> 00:48:13,610 >> KEVIN Schmid: Quindi questo sarà effettivamente aprire un nuovo processo per farlo. 977 00:48:13,610 --> 00:48:19,310 Quindi, questo è in realtà, in qualche modo, male, non super male, ma è 978 00:48:19,310 --> 00:48:22,990 importante dire che questo è una specie di tornare a, da un lato, l'Apache 979 00:48:22,990 --> 00:48:26,450 modello in cui facciamo thread e processi per ogni richiesta o 980 00:48:26,450 --> 00:48:29,280 processi per ogni richiesta. 981 00:48:29,280 --> 00:48:32,090 Quindi questo è una specie di analogo a quello che fa Apache. 982 00:48:32,090 --> 00:48:35,110 In alcuni casi, sarà sufficiente utilizzare un nuovo filo, che è un po 'più di luce 983 00:48:35,110 --> 00:48:39,040 il peso di un processo, ma Apache potrebbe finire sborsare un nuovo processo 984 00:48:39,040 --> 00:48:43,370 che è una specie di quello che facciamo qui implicitamente facendo dot barra fib 45. 985 00:48:43,370 --> 00:48:48,690 >> E allora in quel caso, ci genere di incorrere le stesse spese dei processi. 986 00:48:48,690 --> 00:48:50,710 Quindi questo è solo una cosa che puoi fare. 987 00:48:50,710 --> 00:48:52,600 Ma solo per mostrare questo tipo di esecuzione. 988 00:48:52,600 --> 00:48:57,120 E questo discorso è solo in realtà mira a presentando questo tipo di programmi come 989 00:48:57,120 --> 00:49:00,710 modo per mostrare diverse prospettive come progettare i server del genere. 990 00:49:00,710 --> 00:49:08,300 Quindi questo è in esecuzione, e quindi ora se faccio questa volta, ho avuto due ID di processo. 991 00:49:08,300 --> 00:49:10,320 >> Diciamo solo parlare cose da sottolineare. 992 00:49:10,320 --> 00:49:11,980 Così accorgono che sono incrementale. 993 00:49:11,980 --> 00:49:12,700 Che figata. 994 00:49:12,700 --> 00:49:15,140 Perché era 27.122 prima. 995 00:49:15,140 --> 00:49:18,580 Ma ora bando, sono tornati più o meno allo stesso tempo. 996 00:49:18,580 --> 00:49:23,960 >> E ora, una buona domanda per chiedere di perché era che il caso è, il cui compito 997 00:49:23,960 --> 00:49:27,590 Era ora di una sorta di fare queste cose sorta di fair play con l' 998 00:49:27,590 --> 00:49:31,350 altri, queste due istanze di dot barra fib 45 che mi sono imbattuto 999 00:49:31,350 --> 00:49:32,880 o che il Nodo Ran? 1000 00:49:32,880 --> 00:49:36,940 Chi sorta di rende giusto che sia ottenere tipo di equilibrato fase di esecuzione? 1001 00:49:36,940 --> 00:49:42,900 1002 00:49:42,900 --> 00:49:44,220 >> AUDIENCE: [incomprensibile]. 1003 00:49:44,220 --> 00:49:44,620 >> KEVIN Schmid: Già. 1004 00:49:44,620 --> 00:49:49,740 Quindi, fondamentalmente, quando faccio dot barra fib 45 o qualcosa del genere, ora è 1005 00:49:49,740 --> 00:49:53,750 genere fino al sistema operativo di gestire l'esecuzione di tali programmi. 1006 00:49:53,750 --> 00:49:56,920 E ora li può programmare su CPU diverse o 1007 00:49:56,920 --> 00:49:58,330 li può pianificare. 1008 00:49:58,330 --> 00:50:01,870 Si può tagliare il tempo che uno CPU ottiene o che ottengono 1009 00:50:01,870 --> 00:50:03,330 per funzionare su una CPU. 1010 00:50:03,330 --> 00:50:05,620 Quindi questa è l'idea che dietro. 1011 00:50:05,620 --> 00:50:07,220 Questo fa senso per tutti? 1012 00:50:07,220 --> 00:50:10,950 Così ora il nodo non è realmente giocando un parte a dividere questi compiti. 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 >> Ecco, questo è quasi per esempi. 1016 00:50:17,840 --> 00:50:23,370 Volevo solo dimostrare una cosa perché un sacco di questo finora è stato 1017 00:50:23,370 --> 00:50:27,350 non del tutto super-pratico in alcuni casi. 1018 00:50:27,350 --> 00:50:30,970 Posso immaginare di tornare a casa dopo questo parlare e qualcosa e dire come, 1019 00:50:30,970 --> 00:50:35,710 bene io tipo di uscito di quel discorso che Posso fare un server Fibonacci per 1020 00:50:35,710 --> 00:50:37,360 il mio progetto finale. 1021 00:50:37,360 --> 00:50:40,770 Così qui è solo una sorta di un altro esempio che si spera sarà - 1022 00:50:40,770 --> 00:50:44,620 forse no, ma forse - un po 'di più sorta di rilevanti progetti definitivi e 1023 00:50:44,620 --> 00:50:46,440 pensare in anticipo per cose del genere. 1024 00:50:46,440 --> 00:50:48,870 >> Quindi questo è chat.js. 1025 00:50:48,870 --> 00:50:52,290 Quindi questo è una specie di un certo campione il codice lato server che si potrebbe usare per 1026 00:50:52,290 --> 00:50:55,700 configurare un piccolo server di chat come si può avere visto sul 1027 00:50:55,700 --> 00:50:56,630 Facebook Chat o qualsiasi altra cosa. 1028 00:50:56,630 --> 00:50:59,990 Quindi non sto dicendo che questo è come Facebook Chat, ma questo è una specie di 1029 00:50:59,990 --> 00:51:06,230 come una buona - forse non bene, ma forse punto di partenza per una chiacchierata - buona 1030 00:51:06,230 --> 00:51:08,560 server per il tuo sito web per un progetto finale. 1031 00:51:08,560 --> 00:51:11,040 Quindi diamo un'occhiata a quello che sta facendo. 1032 00:51:11,040 --> 00:51:15,500 >> Quindi stiamo ricevendo questa cosa speciale in alto, questo Var SIO 1033 00:51:15,500 --> 00:51:17,050 equivale a richiedere Socket.IO. 1034 00:51:17,050 --> 00:51:20,280 Quindi questa è un'altra cosa che non è così effettivamente venire in bundle con 1035 00:51:20,280 --> 00:51:22,300 Nodo ma è possibile installarlo. 1036 00:51:22,300 --> 00:51:23,480 E 'un modulo Node. 1037 00:51:23,480 --> 00:51:25,670 Quindi è proprio come alcuni estensione al nodo. 1038 00:51:25,670 --> 00:51:29,220 >> SocketIO è in realtà molto genere di freddo. 1039 00:51:29,220 --> 00:51:32,550 E 'un'astrazione che, in fondo ciò che che fa è è che ti permette di 1040 00:51:32,550 --> 00:51:35,770 avere questo flusso di comunicazione tra un web 1041 00:51:35,770 --> 00:51:39,430 browser e un server web. 1042 00:51:39,430 --> 00:51:45,250 Così, per la maggior parte finora, abbiamo avuto questi molto pratica un secondo o due 1043 00:51:45,250 --> 00:51:48,790 secondo le comunicazioni tra un web browser e il server web. 1044 00:51:48,790 --> 00:51:53,310 Quindi è fondamentalmente andare a google.com, get la roba, mandare indietro, e poi 1045 00:51:53,310 --> 00:51:53,770 abbiamo finito. 1046 00:51:53,770 --> 00:51:56,560 Stiamo parlando mai di nuovo fino al tipi di utente in qualcosa d'altro. 1047 00:51:56,560 --> 00:52:01,090 >> Ma ciò che Socket.IO e simile tipo di le cose - e SocketIO è in realtà uno 1048 00:52:01,090 --> 00:52:03,940 delle cose che è costruito come WebSocket che è una sorta di disponibile 1049 00:52:03,940 --> 00:52:06,440 come parte di HTML5 - 1050 00:52:06,440 --> 00:52:09,620 che ti permette di avere questo continuo dialogo. 1051 00:52:09,620 --> 00:52:13,990 E questo è molto utile in un server di chat genere di cose, perché è 1052 00:52:13,990 --> 00:52:17,390 un po 'come un dialogo continuo in per certi versi, perché se stai chattando 1053 00:52:17,390 --> 00:52:21,540 con qualcuno, ora è possibile solo inviare un messaggio lungo il tubo, e poi l' 1054 00:52:21,540 --> 00:52:23,940 server può inviare un messaggio per tubo per l'altra persona che sei 1055 00:52:23,940 --> 00:52:24,520 chiacchierando con. 1056 00:52:24,520 --> 00:52:26,903 E allora si può avere questo scambiare così. 1057 00:52:26,903 --> 00:52:30,590 1058 00:52:30,590 --> 00:52:32,850 >> Ecco, questo è ciò che tipo di SocketIO è buono per. 1059 00:52:32,850 --> 00:52:38,400 La ragione per cui SocketIO utilizza WebSockets come una cosa è che in 1060 00:52:38,400 --> 00:52:43,980 Oltre a semplicemente vecchi WebSockets, lo fa anche alcuni trucchi per fondo 1061 00:52:43,980 --> 00:52:45,610 rendere compatibile lo browser. 1062 00:52:45,610 --> 00:52:50,040 Così browser come Internet Explorer purtroppo non supportano WebSockets 1063 00:52:50,040 --> 00:52:50,810 a destra, fuori dalla scatola. 1064 00:52:50,810 --> 00:52:55,290 Quindi usa un altro tipo di fresco pulito cose con Adobe Flash per consentire 1065 00:52:55,290 --> 00:52:57,170 di avere il supporto cross browser. 1066 00:52:57,170 --> 00:52:58,800 Ecco, questo è veramente utile. 1067 00:52:58,800 --> 00:53:02,440 >> E in realtà, so che sto tipo di esecuzione sul tempo qui, ma CS50 1068 00:53:02,440 --> 00:53:08,490 Discutere, avete mai visto qualcosa come, non so, in bianco così e così è 1069 00:53:08,490 --> 00:53:11,030 rispondendo a questo post o qualcosa del genere così, questa caratteristica? 1070 00:53:11,030 --> 00:53:12,250 Questo è SocketIO. 1071 00:53:12,250 --> 00:53:15,580 Così, quando qualcuno inizia a digitare nel discutere box per effettuare una replica o 1072 00:53:15,580 --> 00:53:20,040 qualcosa, il browser che cos'è chiamato in SocketIO emette una sorta di 1073 00:53:20,040 --> 00:53:22,660 evento che dice qualcuno è rispondere a questo post. 1074 00:53:22,660 --> 00:53:26,110 >> Poi il server dice: OK, cosa devo fare? 1075 00:53:26,110 --> 00:53:29,270 Bene, ora devo dire quegli altri ragazzi che sono in CS50 Discuti cercando 1076 00:53:29,270 --> 00:53:31,170 in questo post che qualcuno sta rispondendo. 1077 00:53:31,170 --> 00:53:34,190 Ecco, questo è ciò che tipo di SocketIO è bene per questo tipo continuo di 1078 00:53:34,190 --> 00:53:35,930 flusso di dialogo. 1079 00:53:35,930 --> 00:53:37,250 OK. 1080 00:53:37,250 --> 00:53:40,060 >> Quindi quello che ho qui - e siamo appena intenzione di ignorare la matrice di connessioni 1081 00:53:40,060 --> 00:53:41,390 per un po '- 1082 00:53:41,390 --> 00:53:43,080 quello che faccio è faccio un altro ascolto. 1083 00:53:43,080 --> 00:53:46,880 Ecco, questo è proprio il modo in Socket.IO è dicendo che ascoltiamo su questa porta. 1084 00:53:46,880 --> 00:53:50,060 E poi faccio questo su connessione. 1085 00:53:50,060 --> 00:53:53,360 Ecco, questo è solo fondamentalmente Socket IO modo di dire, quando riceviamo un 1086 00:53:53,360 --> 00:53:55,840 connessione, ti voglio per eseguire questo codice. 1087 00:53:55,840 --> 00:53:59,870 >> E notare che invece di avere rec e res passati lì mi hanno Socket. 1088 00:53:59,870 --> 00:54:03,260 E questa idea Socket è fondamentalmente questo cosa che si può scrivere e leggere 1089 00:54:03,260 --> 00:54:05,750 dal che ha l'utente del messaggi possibilmente. 1090 00:54:05,750 --> 00:54:10,700 E i messaggi che si desidera inviare può passare attraverso quella Socket. 1091 00:54:10,700 --> 00:54:12,140 Ritiene che senso? 1092 00:54:12,140 --> 00:54:14,490 Quindi è questa cosa continua. 1093 00:54:14,490 --> 00:54:17,820 >> Quindi quello che faccio è che io chiamo Socket.emit. 1094 00:54:17,820 --> 00:54:20,330 Ed emettere prende abbastanza tanto due argomenti. 1095 00:54:20,330 --> 00:54:24,100 Il primo argomento è una stringa solo rappresenta il tipo di 1096 00:54:24,100 --> 00:54:25,270 cosa si sta emettendo. 1097 00:54:25,270 --> 00:54:28,120 Quindi, in questo caso, ho l'uso questa stringa messaggio nuovo. 1098 00:54:28,120 --> 00:54:32,670 E questo è solo fondamentalmente dicendo che il tipo di questa cosa, quello che sto 1099 00:54:32,670 --> 00:54:34,750 invio, è un nuovo messaggio. 1100 00:54:34,750 --> 00:54:38,460 Così si può ascoltare per tipi specifici come nuovo messaggio o qualsiasi altra cosa 1101 00:54:38,460 --> 00:54:39,960 utilizzando dot su. 1102 00:54:39,960 --> 00:54:44,570 >> Così connessione e utente inviato lì, se si guarda a dove noi chiamiamo punto su, 1103 00:54:44,570 --> 00:54:48,150 quelli sono altre stringhe che rappresentano tipi di messaggi utente. 1104 00:54:48,150 --> 00:54:52,060 Quindi è fondamentalmente si può avere questo emettono uno di questi tipi di messaggi, e 1105 00:54:52,060 --> 00:54:55,520 poi fare qualcosa in risposta a uno di questi tipi di messaggi 1106 00:54:55,520 --> 00:54:57,640 >> Così sto emettendo questo nuovo messaggio. 1107 00:54:57,640 --> 00:55:00,540 Stiamo andando a ignorare connections.push per un secondo. 1108 00:55:00,540 --> 00:55:03,360 Ma poi io dico, l'utente Socket.on inviato. 1109 00:55:03,360 --> 00:55:07,540 Così ora è un po 'come quando l' utente mi manda un messaggio, voglio 1110 00:55:07,540 --> 00:55:09,240 di eseguire questo codice. 1111 00:55:09,240 --> 00:55:12,080 E notare che tale funzione anonima sta prendendo in questa variabile 1112 00:55:12,080 --> 00:55:16,300 chiamata dati che è fondamentalmente andando avere il messaggio di utente. 1113 00:55:16,300 --> 00:55:20,700 >> Così ora andiamo sorta di parlare la matrice connessioni. 1114 00:55:20,700 --> 00:55:24,590 Quindi questo è progettato per un client di chat dove praticamente tutti sono in genere di 1115 00:55:24,590 --> 00:55:25,950 la stessa chat room. 1116 00:55:25,950 --> 00:55:29,640 Quindi, fondamentalmente, quello che dobbiamo continuare a intorno è certa matrice che, in fondo 1117 00:55:29,640 --> 00:55:33,170 rappresenta tutte le persone in chat in per certi versi, se questo ha un senso. 1118 00:55:33,170 --> 00:55:33,340 Giusto? 1119 00:55:33,340 --> 00:55:37,190 Perché abbiamo bisogno di sapere chi quei ragazzi siamo in modo che possiamo inviare loro messaggi 1120 00:55:37,190 --> 00:55:39,140 che altre persone inviano a noi. 1121 00:55:39,140 --> 00:55:44,440 >> Così che cosa fa questo codice è quando l'utente invia un messaggio - che è il tipo di 1122 00:55:44,440 --> 00:55:45,300 l'evento - 1123 00:55:45,300 --> 00:55:47,120 stiamo andando a eseguire questo codice. 1124 00:55:47,120 --> 00:55:51,240 E quello che facciamo è corriamo attraverso questo array che abbiamo chiamato le connessioni. 1125 00:55:51,240 --> 00:55:54,390 E praticamente per ogni connessione tranne quello che è nostro, che è 1126 00:55:54,390 --> 00:55:59,520 quello che dice questo codice, inviamo una nuova messaggio con tale messaggio allegato 1127 00:55:59,520 --> 00:56:01,210 informazioni. 1128 00:56:01,210 --> 00:56:04,880 >> Quindi, se si nota qui, quello che ho fatto quando l'utente in realtà fa un nuovo 1129 00:56:04,880 --> 00:56:08,560 connessione è ho aggiunto con l' Metodo JavaScript.push, questo è 1130 00:56:08,560 --> 00:56:12,100 fondamentalmente solo dicendo come voglio che Socket come un valore in 1131 00:56:12,100 --> 00:56:13,900 la nostra collegamenti array. 1132 00:56:13,900 --> 00:56:20,560 Così ora quando questo codice viene eseguito, sarà inviare le cose da quelle particolari 1133 00:56:20,560 --> 00:56:22,020 connessioni. 1134 00:56:22,020 --> 00:56:26,980 Quindi questo può essere un buon punto di partenza per fare un server di chat 1135 00:56:26,980 --> 00:56:28,250 o qualcosa di simile. 1136 00:56:28,250 --> 00:56:33,315 >> E il genere di cosa interessante è che il codice che vedete qui come su e 1137 00:56:33,315 --> 00:56:36,390 emettono e roba del genere è lo stesso tipo di codice JavaScript che si sarebbe 1138 00:56:36,390 --> 00:56:39,260 scrivere nel browser per interagire con il server. 1139 00:56:39,260 --> 00:56:42,480 Ecco perché SocketIO è una specie di ordinato e utile in questo modo. 1140 00:56:42,480 --> 00:56:45,680 1141 00:56:45,680 --> 00:56:49,250 >> Oh, e solo una cosa più reale veloce. 1142 00:56:49,250 --> 00:56:55,970 C'era un progetto finale CS50 scorso anno che in fondo attuato una chat 1143 00:56:55,970 --> 00:56:57,840 server Node.js. 1144 00:56:57,840 --> 00:57:01,350 Penso che sia Harvardchats.org ma io non sono - 1145 00:57:01,350 --> 00:57:02,940 OK. 1146 00:57:02,940 --> 00:57:06,190 Io non sono sicuro di quello che l'URL sia, ma Posso trasmettere quello fuori in seguito. 1147 00:57:06,190 --> 00:57:09,260 Ma è una specie di raffreddare ciò che si può fare con Node.js. 1148 00:57:09,260 --> 00:57:14,680 >> Quindi spero che, in generale, voi ragazzi avete una buon senso di ciò che Node.js è utile 1149 00:57:14,680 --> 00:57:17,870 e come si potrebbe forse applicare per il progetto finale. 1150 00:57:17,870 --> 00:57:21,050 Sarò mando fuori ancora un po ' risorse con questo. 1151 00:57:21,050 --> 00:57:23,170 E grazie per essere venuti. 1152 00:57:23,170 --> 00:57:23,610 Grazie. 1153 00:57:23,610 --> 00:57:27,168 >> [Applausi]