1 00:00:00,000 --> 00:00:08,350 2 00:00:08,350 --> 00:00:09,710 >> KEVIN SCHMID: Hola a todos. 3 00:00:09,710 --> 00:00:12,640 Bienvenido al seminario CS50 en Node.js. 4 00:00:12,640 --> 00:00:13,955 Mi nombre es Kevin. 5 00:00:13,955 --> 00:00:15,580 Soy TF CS50. 6 00:00:15,580 --> 00:00:17,650 Y yo soy una especie de muy emocionado acerca de este seminario. 7 00:00:17,650 --> 00:00:20,430 Creo Node.js es muy cool. 8 00:00:20,430 --> 00:00:24,200 Espero que este seminario se puede utilizar como un bien, supongo, trampolín para 9 00:00:24,200 --> 00:00:26,380 algunos de sus proyectos de final si usted está interesado en el uso de 10 00:00:26,380 --> 00:00:27,630 algo así como Node.js. 11 00:00:27,630 --> 00:00:29,770 12 00:00:29,770 --> 00:00:33,320 >> Tendremos suerte de comenzar el seminario fuera por hablando sólo de un poco de la 13 00:00:33,320 --> 00:00:36,970 tipo de fondo escalabilidad perspectivas de Node.js, a continuación, 14 00:00:36,970 --> 00:00:39,240 vamos a pasar a algunos ejemplos de código. 15 00:00:39,240 --> 00:00:42,340 Y voy a tener el código en un sitio web, y se puede ver en el código. 16 00:00:42,340 --> 00:00:45,475 Y después del seminario, voy a clase de discurso acerca de cómo se puede configurar Node.js 17 00:00:45,475 --> 00:00:48,220 en su ordenador. 18 00:00:48,220 --> 00:00:48,710 >> Aceptar. 19 00:00:48,710 --> 00:00:49,760 Así que vamos a empezar. 20 00:00:49,760 --> 00:00:53,700 Así que supongo que sólo quería hablar de servidores web, de verdad, en primer lugar. 21 00:00:53,700 --> 00:00:59,730 Y para empezar esta discusión, básicamente, tienen un diagrama que es de 22 00:00:59,730 --> 00:01:04,269 el libro de texto utilizado para CS61, que básicamente muestra la interacción 23 00:01:04,269 --> 00:01:08,510 entre un proceso de cliente, al igual que su web explorador o como su cliente objetivo o 24 00:01:08,510 --> 00:01:11,340 algo por el estilo, y un servidor web. 25 00:01:11,340 --> 00:01:15,150 Así que este tipo de apariencia similar a la imagen que se vio en conferencia sobre 26 00:01:15,150 --> 00:01:19,270 Miércoles donde básicamente tenemos un poco de proceso del cliente como Google Chrome. 27 00:01:19,270 --> 00:01:22,980 >> Y luego, el paso uno es el cliente envía una solicitud. 28 00:01:22,980 --> 00:01:27,510 Así que puede ser algo como bueno vamos a visitar, no sé, CS50.net. 29 00:01:27,510 --> 00:01:29,320 Así que emitimos esa solicitud. 30 00:01:29,320 --> 00:01:34,280 Y ¿alguien recuerda el nombre de el protocolo que especifica cómo 31 00:01:34,280 --> 00:01:35,610 solicitud debe estar estructurado? 32 00:01:35,610 --> 00:01:36,382 Sip. 33 00:01:36,382 --> 00:01:37,650 >> AUDIENCIA: [inaudible]. 34 00:01:37,650 --> 00:01:38,150 >> KEVIN SCHMID: Exactamente. 35 00:01:38,150 --> 00:01:40,100 Así que es como HTTP, ¿verdad? 36 00:01:40,100 --> 00:01:44,720 Así que, básicamente, la especificación de la forma esa solicitud en realidad deben establecerse 37 00:01:44,720 --> 00:01:47,450 hacia fuera, porque al final del día, dicha solicitud se realmente como un 38 00:01:47,450 --> 00:01:50,240 cadena que básicamente dice que quiero esto. 39 00:01:50,240 --> 00:01:53,580 Y la especificación para que es HTTP. 40 00:01:53,580 --> 00:01:55,270 Así que eso es como un protocolo. 41 00:01:55,270 --> 00:01:57,920 >> Entonces el servidor recibe esa solicitud. 42 00:01:57,920 --> 00:02:01,610 Así que ustedes tienen un servidor web instalado en el aparato CS50. 43 00:02:01,610 --> 00:02:02,460 Es Apache. 44 00:02:02,460 --> 00:02:06,230 Y esta semana, cuando se trabaja en un problema establecer siete, en realidad se va a trabajar 45 00:02:06,230 --> 00:02:08,160 con ese servidor web. 46 00:02:08,160 --> 00:02:12,380 Así que el servidor recibe esta solicitud, y entonces tiene que tipo de rayar su 47 00:02:12,380 --> 00:02:15,090 cabeza y decir, como bien lo Qué hago con esto? 48 00:02:15,090 --> 00:02:20,060 >> Así que en base a lo que decida hacer, entonces puede que tenga que ponerse en contacto con algún tipo 49 00:02:20,060 --> 00:02:20,730 de recursos. 50 00:02:20,730 --> 00:02:23,700 Y ese recurso podría ser un montón de cosas diferentes. 51 00:02:23,700 --> 00:02:26,810 Por un lado, podría ser sólo como un archivo HTML estático. 52 00:02:26,810 --> 00:02:29,820 Así que podría ser simplemente como un HTML que es como para 53 00:02:29,820 --> 00:02:31,100 su sitio web personal. 54 00:02:31,100 --> 00:02:35,360 Podría ser un archivo estático como una imagen o como una película que tiene. 55 00:02:35,360 --> 00:02:37,660 Incluso podría tener que hablar a algún tipo de base de datos 56 00:02:37,660 --> 00:02:39,530 como una base de datos MySQL. 57 00:02:39,530 --> 00:02:43,910 Así que no siempre tiene que comunicar con un recurso, pero en 58 00:02:43,910 --> 00:02:45,700 algunos casos, es posible. 59 00:02:45,700 --> 00:02:47,800 >> Entonces, ¿qué va a hacer después de eso es que va a 60 00:02:47,800 --> 00:02:49,430 devolver la respuesta. 61 00:02:49,430 --> 00:02:53,130 Y la respuesta de esto es También especifica HTTP. 62 00:02:53,130 --> 00:02:54,830 Con esto, el cliente puede recibirlo. 63 00:02:54,830 --> 00:02:56,740 Se puede destrozarlo y procesarla. 64 00:02:56,740 --> 00:03:00,900 Y entonces usted consigue una página web como Google o CS50.net o 65 00:03:00,900 --> 00:03:02,240 lo que fuiste a. 66 00:03:02,240 --> 00:03:03,100 ¿De acuerdo? 67 00:03:03,100 --> 00:03:06,080 >> Por lo tanto esta es la interacción básica que vamos a estar tratando con. 68 00:03:06,080 --> 00:03:08,770 Y estamos más o menos vamos a ser centrándose en esta parte de la 69 00:03:08,770 --> 00:03:10,640 interacción, el servidor. 70 00:03:10,640 --> 00:03:10,990 Aceptar. 71 00:03:10,990 --> 00:03:12,210 Genial. 72 00:03:12,210 --> 00:03:15,500 ¿Alguien tiene alguna pregunta hasta ahora? 73 00:03:15,500 --> 00:03:17,720 Aceptar. 74 00:03:17,720 --> 00:03:22,430 >> Así como hemos dicho, el servidor web recibe esta petición HTTP y luego emite este 75 00:03:22,430 --> 00:03:24,760 Respuesta HTTP. 76 00:03:24,760 --> 00:03:29,100 Y como hablamos antes, la Servidor web aparato CS50 es Apache. 77 00:03:29,100 --> 00:03:32,490 Así que cuando ustedes trabaja en P fijó siete, usted va a estar trabajando con el 78 00:03:32,490 --> 00:03:34,120 Servidor web Apache. 79 00:03:34,120 --> 00:03:37,890 Usted nunca tendrá que trabajar muy con Apache directamente demasiado. 80 00:03:37,890 --> 00:03:41,920 Usted especie de configurar Apache un poco al especificar los hosts virtuales o 81 00:03:41,920 --> 00:03:44,970 v los anfitriones, y nos pondremos en contacto para que dentro de un rato. 82 00:03:44,970 --> 00:03:50,620 >> Pero, básicamente, el servidor web Apache creado para trabajar con PHP tipo 83 00:03:50,620 --> 00:03:51,730 de fuera de la caja. 84 00:03:51,730 --> 00:03:56,170 Así que lo que realmente sucede es cuando se va a uno de sus sitios web como, por ejemplo, 85 00:03:56,170 --> 00:04:00,360 anfitrión index.php barra local o algo, es el navegador envía esa 86 00:04:00,360 --> 00:04:04,330 solicitud, y después de Apache está sentado allí y se da cuenta de que hacer con él. 87 00:04:04,330 --> 00:04:08,840 Y la acción es ejecutar ese código en index.php y 88 00:04:08,840 --> 00:04:11,330 a continuación, lo envía fuera de nuevo. 89 00:04:11,330 --> 00:04:15,640 Así que hay que. 90 00:04:15,640 --> 00:04:16,980 Así que tipo de hablado de esto. 91 00:04:16,980 --> 00:04:21,990 Por lo tanto, sólo podría servir a un archivo estático o ejecutar algún código PHP y luego tema 92 00:04:21,990 --> 00:04:23,510 la respuesta. 93 00:04:23,510 --> 00:04:27,670 >> Así que una pregunta común que puede venir up es así, ¿cómo podemos realmente ocupamos 94 00:04:27,670 --> 00:04:31,750 con tener múltiples usuarios al mismo tiempo? 95 00:04:31,750 --> 00:04:36,930 Así que imagínate si estuviera escribiendo una web servidor, si tuvieras un servidor web que 96 00:04:36,930 --> 00:04:39,900 que estaba tratando de escribir en algo como C o algo por el estilo, 97 00:04:39,900 --> 00:04:45,150 básicamente se puede pensar en cómo hay podría ser algún tipo de código que 98 00:04:45,150 --> 00:04:49,330 recibiría la solicitud, pero luego lo que tiene que hacer todo este trabajo en él. 99 00:04:49,330 --> 00:04:53,060 Puede que, por ejemplo, en contacto con el base de datos o algo por el estilo. 100 00:04:53,060 --> 00:04:53,300 ¿Cierto? 101 00:04:53,300 --> 00:04:56,010 Y entonces sería hacer ese tipo de procesamiento y luego 102 00:04:56,010 --> 00:04:57,060 enviado de vuelta la respuesta. 103 00:04:57,060 --> 00:04:58,950 Así que eso es como el alto visión general de nivel. 104 00:04:58,950 --> 00:05:04,210 >> Pero no es inmediatamente obvio cómo puede hacer eso para que dos personas o 105 00:05:04,210 --> 00:05:09,040 incluso 1.000 personas podrían trabajar con su servidor web al mismo tiempo. 106 00:05:09,040 --> 00:05:14,880 Así que la solución que utiliza Apache se llama hilos o procesos. 107 00:05:14,880 --> 00:05:16,770 Así que usted puede haber oído hablar de estos términos antes. 108 00:05:16,770 --> 00:05:22,190 Está bien si usted no tiene, pero sólo pensar sobre temas o procesos como medios para 109 00:05:22,190 --> 00:05:26,290 un sistema operativo o un programa de usuario o algo así o un servidor web 110 00:05:26,290 --> 00:05:28,810 para ejecutar especie de múltiples cosas a la vez. 111 00:05:28,810 --> 00:05:31,760 Así que usted puede haber oído el término como hilos de ejecución. 112 00:05:31,760 --> 00:05:34,140 Así que es un poco como si estuvieras tipo de multitarea. 113 00:05:34,140 --> 00:05:37,710 >> Y si te he visto en la caja de su portátil, o algo así, 114 00:05:37,710 --> 00:05:43,040 multinúcleo, lo que puede hacer es que se puede ejecutar dos hilos diferentes en diferentes 115 00:05:43,040 --> 00:05:46,700 partes de la CPU para que puedan de hecho ocurrir al mismo tiempo. 116 00:05:46,700 --> 00:05:48,100 Así que esto es realmente de gran alcance. 117 00:05:48,100 --> 00:05:52,270 Y esto es una especie de Apache de solución a este problema. 118 00:05:52,270 --> 00:05:57,900 >> Así que hay algo así como todas las cuestiones con este enfoque, aunque? 119 00:05:57,900 --> 00:05:59,870 Así que supongo que tipo de las escribí allí. 120 00:05:59,870 --> 00:06:03,440 Pero los dos tipo de utilizar una gran cantidad de memoria. 121 00:06:03,440 --> 00:06:07,490 Es muy caro para crear un hilo o un proceso. 122 00:06:07,490 --> 00:06:11,750 >> Y parte de la razón es que sólo como cuando se está ejecutando un programa de C 123 00:06:11,750 --> 00:06:15,090 como su principal y luego de que las llamadas otra función, que tiene 124 00:06:15,090 --> 00:06:16,520 algún tipo de pila. 125 00:06:16,520 --> 00:06:19,910 Así hilos también requieren un completamente pila separada que 126 00:06:19,910 --> 00:06:21,220 pueden ser bastante grandes. 127 00:06:21,220 --> 00:06:25,170 Y si usted puede imaginar tener toneladas de los usuarios de su sitio web, usted tendría 128 00:06:25,170 --> 00:06:26,280 un montón de diferentes temas. 129 00:06:26,280 --> 00:06:28,230 Eso es un montón de pilas de gestionar y mantener. 130 00:06:28,230 --> 00:06:31,280 Así que es el consumo de memoria de gran tamaño. 131 00:06:31,280 --> 00:06:35,650 >> Y luego, también, digamos que usted tiene solamente una CPU, o digamos que usted tiene 132 00:06:35,650 --> 00:06:38,460 más subprocesos que usted tenga esos multicores. 133 00:06:38,460 --> 00:06:38,730 ¿Cierto? 134 00:06:38,730 --> 00:06:43,280 Así que vamos a decir que tenía 10 temas y que sólo tenía cinco CPUs. 135 00:06:43,280 --> 00:06:46,260 De alguna manera tienes que hacer esta cosa donde cambiar entre la corriente 136 00:06:46,260 --> 00:06:49,090 uno que está en marcha, ya que no se puede ejecutar en los 10 a la vez. 137 00:06:49,090 --> 00:06:50,980 Y eso se llama un cambio de contexto. 138 00:06:50,980 --> 00:06:54,260 Y ese término en realidad tiene un par de diferentes contextos, pero vamos a 139 00:06:54,260 --> 00:06:56,620 pensar en él como el cambio entre dos hilos. 140 00:06:56,620 --> 00:06:59,730 Eso puede ser bastante caro, porque básicamente lo que tiene que hacer usted es 141 00:06:59,730 --> 00:07:03,340 tiene que dejar de hacer lo que estás haciendo, guardar el estado de ese hilo conductor, y 142 00:07:03,340 --> 00:07:05,440 luego cambiar a otro lugar. 143 00:07:05,440 --> 00:07:09,420 >> Así que no todo el mundo ve la clase de la motivación de por qué las discusiones y 144 00:07:09,420 --> 00:07:12,030 procesos podrían ser un poco voluminoso? 145 00:07:12,030 --> 00:07:13,840 ¿Y usted tiene una pregunta? 146 00:07:13,840 --> 00:07:14,376 Aceptar. 147 00:07:14,376 --> 00:07:15,070 Genial. 148 00:07:15,070 --> 00:07:18,090 ¿Alguien tiene alguna pregunta? 149 00:07:18,090 --> 00:07:19,620 Aceptar. 150 00:07:19,620 --> 00:07:26,720 >> Así que si damos un paso atrás por un segundo, hay como una especie de 151 00:07:26,720 --> 00:07:30,350 observación que podemos hacer acerca de una gran cantidad de aplicaciones web. 152 00:07:30,350 --> 00:07:34,810 Y eso es realmente de que muchos de ellos en realidad no lo hagas mucho útil 153 00:07:34,810 --> 00:07:37,140 trabajar en el interior de un hilo. 154 00:07:37,140 --> 00:07:41,170 Así que ¿alguien se ha iniciado en P fijó siete en absoluto? 155 00:07:41,170 --> 00:07:45,650 Así que es lo que quieres para describir tal vez algunas de las partes? 156 00:07:45,650 --> 00:07:47,850 ¿Ha trabajado al iniciar sesión o algo por el estilo? 157 00:07:47,850 --> 00:07:49,330 >> AUDIENCIA: No. 158 00:07:49,330 --> 00:07:49,780 >> KEVIN SCHMID: OK. 159 00:07:49,780 --> 00:07:50,150 No importa. 160 00:07:50,150 --> 00:07:50,900 Lo siento. 161 00:07:50,900 --> 00:07:55,790 Pero, básicamente, en el conjunto P, eres va a estar haciendo un montón de tipo de 162 00:07:55,790 --> 00:07:59,760 consultas a una base de datos para obtener alguna la información de que la base de datos. 163 00:07:59,760 --> 00:08:03,330 Y lo que tu código va a estar haciendo, lo que ese proceso Apache o 164 00:08:03,330 --> 00:08:06,030 ese hilo Apache va a estar haciendo mientras que tiene que ponerse en contacto con el 165 00:08:06,030 --> 00:08:08,990 base de datos es que es algo así va a ser sentado allí y que va a ser 166 00:08:08,990 --> 00:08:12,130 a la espera de la base de datos para responder. 167 00:08:12,130 --> 00:08:16,290 >> Ahora que puede no parecer tan grande la tratar debido a que la base de datos está en su 168 00:08:16,290 --> 00:08:18,240 Aparato CS50, ¿verdad? 169 00:08:18,240 --> 00:08:22,930 Pero hay una especie de red latencia allí porque ahora la web 170 00:08:22,930 --> 00:08:26,830 servidor tiene que emitir su propia petición al la base de datos para comunicarse con el 171 00:08:26,830 --> 00:08:29,520 base de datos y luego conseguir que la información de nuevo. 172 00:08:29,520 --> 00:08:33,190 Así que ahora es como bien espérame, yo soy va a ir a buscar algo de la 173 00:08:33,190 --> 00:08:35,770 base de datos y luego hay un mucha espera pasando. 174 00:08:35,770 --> 00:08:36,870 ¿Eso tiene sentido? 175 00:08:36,870 --> 00:08:38,580 >> Y para algunas cosas no es tan malo. 176 00:08:38,580 --> 00:08:41,950 Si sólo tiene que, por ejemplo, memoria de acceso, que no es como 177 00:08:41,950 --> 00:08:44,100 latencia de E / S horrible. 178 00:08:44,100 --> 00:08:47,110 Y cuando digo, oh latencia / I, lo estoy refiriendo es como cualquier especie de 179 00:08:47,110 --> 00:08:48,290 de entrada y salida. 180 00:08:48,290 --> 00:08:52,950 Sin embargo, para acceder a un archivo en el disco, al igual que si quería servir a la estática HTML 181 00:08:52,950 --> 00:08:57,850 archivo que estaba en mi página web o algo así, como que tiene que 182 00:08:57,850 --> 00:09:02,310 parar un poco, leer ese archivo en desde el disco y, a continuación, en 183 00:09:02,310 --> 00:09:04,400 ese proceso estoy esperando. 184 00:09:04,400 --> 00:09:06,700 No estoy haciendo un trabajo útil. 185 00:09:06,700 --> 00:09:11,270 >> Esto no es cierto del todo, pero es es común en aplicaciones como P set 186 00:09:11,270 --> 00:09:13,960 siete y un montón de aplicaciones que no eres 187 00:09:13,960 --> 00:09:15,440 realmente haciendo mucho pensamiento. 188 00:09:15,440 --> 00:09:19,090 Y cuando digo que el pensamiento, quiero decir como el trabajo computacional. 189 00:09:19,090 --> 00:09:23,270 Así que el trabajo computacional podría ser algo como, por ejemplo, que quería 190 00:09:23,270 --> 00:09:26,590 escribir un servidor web que sólo computará el enésimo número de Fibonacci. 191 00:09:26,590 --> 00:09:29,300 Eso no suena como un todo servidor web diversión. 192 00:09:29,300 --> 00:09:34,220 Al igual que yo no esperaría que el sitio sea el próximo Facebook, pero eso es un poco de 193 00:09:34,220 --> 00:09:35,610 tipo de trabajo computacional. 194 00:09:35,610 --> 00:09:39,570 >> Y usted puede imaginar que con la sustitución de algún otro tipo de interés 195 00:09:39,570 --> 00:09:43,070 trabajo computacional. 196 00:09:43,070 --> 00:09:46,050 Digamos que estás escribiendo algo que calculan los grados de 197 00:09:46,050 --> 00:09:49,170 la separación entre dos personas o algo por el estilo. 198 00:09:49,170 --> 00:09:51,860 Así que sí involucra algún tipo de cálculo, ¿verdad? 199 00:09:51,860 --> 00:09:56,630 Y aun así, hacer que usted todavía tiene que hacer un montón de espera para tal 200 00:09:56,630 --> 00:09:59,550 usted tiene que consultar una base de datos para buscar hasta quién es amigo de quién o 201 00:09:59,550 --> 00:10:00,600 algo así. 202 00:10:00,600 --> 00:10:03,510 Así que no es ese tipo de noción el trabajo de cálculo. 203 00:10:03,510 --> 00:10:05,260 ¿Eso tiene sentido? 204 00:10:05,260 --> 00:10:08,258 ¿Alguien tiene alguna pregunta? 205 00:10:08,258 --> 00:10:11,960 >> Ah, y supongo que me puse los servidores de chat que hay porque los servidores de chat son una especie de 206 00:10:11,960 --> 00:10:13,240 otro buen ejemplo de esto. 207 00:10:13,240 --> 00:10:15,250 Un servidor de chat no tiene hacer mucho pensamiento. 208 00:10:15,250 --> 00:10:18,350 Sólo tiene que esperar para que la gente enviar mensajes y luego cuando 209 00:10:18,350 --> 00:10:19,800 ellos, los envían. 210 00:10:19,800 --> 00:10:21,050 ¿De acuerdo? 211 00:10:21,050 --> 00:10:23,410 212 00:10:23,410 --> 00:10:28,180 >> Así que para recapitular de nuevo, Apache y servidores web similares, como que un tenedor 213 00:10:28,180 --> 00:10:31,470 gran cantidad de temas y procesos que puede ser un poco un desperdicio. 214 00:10:31,470 --> 00:10:37,530 Así que supongo que la pregunta que puede venir de que es qué tenemos que tener 215 00:10:37,530 --> 00:10:39,610 varios subprocesos y procesos? 216 00:10:39,610 --> 00:10:41,890 ¿Qué pasa si sólo teníamos uno? 217 00:10:41,890 --> 00:10:45,710 >> Así que vamos a clase de pintura una imagen de lo que esto se vería así. 218 00:10:45,710 --> 00:10:47,810 Así que vamos a usar sólo un hilo. 219 00:10:47,810 --> 00:10:48,660 ¿De acuerdo? 220 00:10:48,660 --> 00:10:52,790 Así que imagínense esto con un hilo. 221 00:10:52,790 --> 00:10:56,600 >> Supongamos que no estábamos haciendo realmente que gran utilidad - y cuando digo 222 00:10:56,600 --> 00:10:59,450 útil, me refiero al trabajo computacional - 223 00:10:59,450 --> 00:11:01,130 en esos múltiples hilos antes. 224 00:11:01,130 --> 00:11:04,180 Así que vamos a clase de consolidar todo en un solo hilo. 225 00:11:04,180 --> 00:11:07,780 ¿Y qué si teníamos un hilo ese tipo de poco va, en el lazo y 226 00:11:07,780 --> 00:11:10,880 constantemente cheques hicieron algo nuevo suceda. 227 00:11:10,880 --> 00:11:15,130 Así, por ejemplo, algo nuevo sucedió podría significar que tengo algo de vuelta de 228 00:11:15,130 --> 00:11:19,310 la base de datos, o alguien enviado mí una nueva petición HTTP. 229 00:11:19,310 --> 00:11:22,290 Así que estos son tipo de eventos que eso suceda, ¿verdad? 230 00:11:22,290 --> 00:11:26,130 >> Y entonces, ¿qué puedo hacer cuando los nuevos cosas suceden es en este mismo hilo 231 00:11:26,130 --> 00:11:30,120 de la ejecución, este solo hilo de ejecución, puedo llamar a un código que 232 00:11:30,120 --> 00:11:32,410 se ocuparía de esa cosa en particular. 233 00:11:32,410 --> 00:11:36,640 Así por ejemplo, si tengo algo de vuelta de la base de datos, que podía correr mi 234 00:11:36,640 --> 00:11:40,960 pequeña parte de cálculo de la misma que en realidad sólo prepara la cosa para 235 00:11:40,960 --> 00:11:42,620 enviar de vuelta al usuario. 236 00:11:42,620 --> 00:11:46,710 Así que hace ese tipo de sentido? 237 00:11:46,710 --> 00:11:49,940 >> Pero lo que en realidad son la implicaciones de esto? 238 00:11:49,940 --> 00:11:50,660 ¿Cierto? 239 00:11:50,660 --> 00:11:53,730 Debido a que hemos escrito una gran cantidad de código que - 240 00:11:53,730 --> 00:11:58,330 y yo sólo voy a ir por delante en las diapositivas si eso está bien. 241 00:11:58,330 --> 00:12:00,930 Así que si no te importa, estoy va a dar un paso atrás. 242 00:12:00,930 --> 00:12:03,410 Así que este tipo de cosas es llamado un bucle de eventos. 243 00:12:03,410 --> 00:12:04,070 ¿De acuerdo? 244 00:12:04,070 --> 00:12:07,240 Y es algo de lo básico idea detrás Node.js. 245 00:12:07,240 --> 00:12:11,240 >> Entonces, ¿qué está haciendo realmente Node.js como una red servidor es que hay un solo hilo 246 00:12:11,240 --> 00:12:14,850 es decir, básicamente, dar vueltas en un bucle como un tiempo un tipo de bajo 247 00:12:14,850 --> 00:12:18,510 el capó de Node.js que está constantemente cheques, ¿Recibimos cosas nuevas? 248 00:12:18,510 --> 00:12:22,720 Y entonces se ejecutará manipuladores que ha configurado. 249 00:12:22,720 --> 00:12:26,720 Pero una buena pregunta que debemos hacernos es, ¿cómo podemos hacer que esto suceda 250 00:12:26,720 --> 00:12:28,090 con las cosas existentes? 251 00:12:28,090 --> 00:12:32,440 >> Así que puse una línea de código C que aquí básicamente parece que se está abriendo una 252 00:12:32,440 --> 00:12:33,060 presentar, ¿verdad? 253 00:12:33,060 --> 00:12:36,090 Ella sólo me salió con un álbum. 254 00:12:36,090 --> 00:12:39,600 Así que tuve que abrir su archivo nuevo. 255 00:12:39,600 --> 00:12:43,810 Así que la forma en que nuestro código C para el funcionamiento - 256 00:12:43,810 --> 00:12:47,890 y creo que la razón por la que elegí era archivos porque esto es una especie de la extensión 257 00:12:47,890 --> 00:12:52,000 del trabajo de E / S que hemos hecho en C en una sensación de que no hay salida de entrada. 258 00:12:52,000 --> 00:12:55,070 Así que llamamos a este código que hace f abierta. 259 00:12:55,070 --> 00:12:59,370 Y luego en la línea siguiente de nuestra programa, ahora podemos trabajar con f. 260 00:12:59,370 --> 00:13:02,710 >> Así que este sería un ejemplo de algo eso es como síncrono o 261 00:13:02,710 --> 00:13:06,850 bloqueo porque en esa primera línea no estamos a la espera hasta que 262 00:13:06,850 --> 00:13:08,110 obtener el archivo abierto. 263 00:13:08,110 --> 00:13:12,260 Así que en la segunda línea, sabemos que puede trabajar con F, pero esto significa que 264 00:13:12,260 --> 00:13:16,240 esa segunda línea no puede realmente funcionar hasta que la primera línea se lleva a cabo. 265 00:13:16,240 --> 00:13:17,760 ¿Eso tiene sentido? 266 00:13:17,760 --> 00:13:20,890 >> Así que esto sería malo para poner en un controlador de eventos. 267 00:13:20,890 --> 00:13:23,920 Y la razón de ello es que este tipo de espera, ¿no? 268 00:13:23,920 --> 00:13:26,500 Así que esto se revertiría de nuevo con nosotros a la misma cosa. 269 00:13:26,500 --> 00:13:29,470 Y ahora no podríamos incluso tener el beneficio de múltiples hilos o 270 00:13:29,470 --> 00:13:32,390 procesos porque tenemos un hilo en Node.js. 271 00:13:32,390 --> 00:13:35,496 ¿Eso tiene sentido para todo el mundo? 272 00:13:35,496 --> 00:13:35,990 >> AUDIENCIA: Espere. 273 00:13:35,990 --> 00:13:36,980 Así que ¿cuál es el reemplazo? 274 00:13:36,980 --> 00:13:37,840 >> KEVIN SCHMID: Oh, así que sí. 275 00:13:37,840 --> 00:13:39,560 Así que voy a llegar a la sustitución. 276 00:13:39,560 --> 00:13:40,430 Aceptar. 277 00:13:40,430 --> 00:13:42,960 ¿Y qué si teníamos algo que se parecía a esto? 278 00:13:42,960 --> 00:13:45,730 ¿Y qué si ahora he editado f abrir un poco? 279 00:13:45,730 --> 00:13:48,370 Así que estoy pasando en el mismo dos argumentos que antes. 280 00:13:48,370 --> 00:13:52,610 Todavía me encanta la nueva canción que ella salió con. 281 00:13:52,610 --> 00:13:57,260 Pero yo estoy pasando una tercera cosa que esta variable se denomina código. 282 00:13:57,260 --> 00:14:02,280 >> Pero, ¿qué es en realidad código en este contexto? 283 00:14:02,280 --> 00:14:05,360 ¿Es como una variable C regular? 284 00:14:05,360 --> 00:14:06,740 Es una función, ¿no? 285 00:14:06,740 --> 00:14:09,450 Y eso puede ser un poco raro porque En realidad soy como ahora pasando una 286 00:14:09,450 --> 00:14:12,320 funcionar en otra función. 287 00:14:12,320 --> 00:14:14,400 >> Así que un par de cosas a tener en cuenta sobre esta. 288 00:14:14,400 --> 00:14:17,145 Uno, no estoy realmente llamar la función de código. 289 00:14:17,145 --> 00:14:20,650 Así que usted no ve el código con el paren paren izquierda, derecha. 290 00:14:20,650 --> 00:14:23,010 Estoy de paso en código. 291 00:14:23,010 --> 00:14:26,990 Y en C, lo que esto realmente hacer me es darle un puntero a la real 292 00:14:26,990 --> 00:14:29,740 código, y entonces esto podría ejecutarlo. 293 00:14:29,740 --> 00:14:33,350 Pero sólo pensar en ello como eres pasando el código que se ejecutará cuando 294 00:14:33,350 --> 00:14:35,150 se abre ese archivo. 295 00:14:35,150 --> 00:14:41,430 >> Pero lo que esto significa es que ahora el resto de mi programa que podría hacer 296 00:14:41,430 --> 00:14:47,050 otras cosas, puede continuar haciendo otras cosas mientras que, en realidad no esperamos, pero 297 00:14:47,050 --> 00:14:50,890 sólo hay en la parte posterior de la cabeza que cuando está abierto, la carrera de ese archivo que 298 00:14:50,890 --> 00:14:52,130 código en la parte superior. 299 00:14:52,130 --> 00:14:53,390 ¿Eso tiene sentido? 300 00:14:53,390 --> 00:14:58,060 >> Y ahora, la idea detrás de Node.js es que el código en la materia do con f 301 00:14:58,060 --> 00:15:04,590 parte debe ser bastante corto y simple y directo y no ser realmente 302 00:15:04,590 --> 00:15:06,160 muy computacionalmente intensivas. 303 00:15:06,160 --> 00:15:09,390 Es posible que tenga que abrir otro archivo, pero que también debería ser bastante rápido 304 00:15:09,390 --> 00:15:14,710 porque simplemente debe decir hacer otra f abrir y luego llamar a este otro código. 305 00:15:14,710 --> 00:15:19,100 >> Así que para ser totalmente claro, la f abrir que funciona la nueva canción de Katy Perry 306 00:15:19,100 --> 00:15:23,060 done mp3, eso va a bastante mucho regresar de inmediato. 307 00:15:23,060 --> 00:15:27,820 Y entonces podemos simplemente seguir haciendo otras cosas, porque todo lo que ahora f 308 00:15:27,820 --> 00:15:33,410 convocatoria abierta no se diga básicamente el código abierto f subyacente abrir este archivo 309 00:15:33,410 --> 00:15:36,020 y cuando haya terminado de abrir este presentar o cuando te lo devuelve, 310 00:15:36,020 --> 00:15:37,480 a continuación, ejecute el código. 311 00:15:37,480 --> 00:15:39,540 Pero en realidad no ejecutar ese código. 312 00:15:39,540 --> 00:15:41,815 Y tenías una pregunta? 313 00:15:41,815 --> 00:15:46,180 >> AUDIENCIA: Usted parece dar a entender algunos veces que la adición de computacionalmente 314 00:15:46,180 --> 00:15:50,545 Código intensiva especie de romper el [Inaudible] sistema impulsado. 315 00:15:50,545 --> 00:15:51,795 [Inaudible]? 316 00:15:51,795 --> 00:15:54,450 317 00:15:54,450 --> 00:15:55,290 >> KEVIN SCHMID: Esa es una gran pregunta. 318 00:15:55,290 --> 00:15:59,280 Así que en realidad tienen un ejemplo de cómo usted podría integrar computacionalmente 319 00:15:59,280 --> 00:16:01,090 Código intensiva en un poquito. 320 00:16:01,090 --> 00:16:03,620 Así que cuando llegamos a los ejemplos de código, Voy a estar seguro para tirar esa. 321 00:16:03,620 --> 00:16:04,700 ¿Está bien? 322 00:16:04,700 --> 00:16:05,950 Gracias. 323 00:16:05,950 --> 00:16:07,690 324 00:16:07,690 --> 00:16:08,750 >> ¿Cuál era su nombre? 325 00:16:08,750 --> 00:16:10,620 >> AUDIENCIA: Aaron. 326 00:16:10,620 --> 00:16:14,830 >> KEVIN SCHMID: Aaron nos lleva a una muy buen punto, que es que si tuviera 327 00:16:14,830 --> 00:16:18,560 un código de cómputo intensivo en las cosas que ver con la parte f, el resto de 328 00:16:18,560 --> 00:16:22,880 mi programa no se puede ejecutar y no se puede escuchar para nuevas solicitudes ni nada hasta que todos 329 00:16:22,880 --> 00:16:24,270 eso ha terminado. 330 00:16:24,270 --> 00:16:27,390 Así que si estoy escribiendo código de nodo en general a menos que hagamos algo que voy 331 00:16:27,390 --> 00:16:33,060 sugerir más tarde, cuando nos fijamos en la ejemplos de código, tengo que estar seguro de que 332 00:16:33,060 --> 00:16:36,060 mi código no ocupa este bucle de eventos. 333 00:16:36,060 --> 00:16:38,120 ¿Eso tiene sentido? 334 00:16:38,120 --> 00:16:38,350 Aceptar. 335 00:16:38,350 --> 00:16:40,040 Genial. 336 00:16:40,040 --> 00:16:47,090 >> Así Node.js ofrece este marco que también puede crearlos por eventos 337 00:16:47,090 --> 00:16:48,210 servidores con. 338 00:16:48,210 --> 00:16:53,460 Por lo que tiene este tipo de asíncrono sin bloqueo de E / S bibliotecas, mientras que 339 00:16:53,460 --> 00:16:56,800 las bibliotecas estándar de C que hemos estado trabajando, como si sólo 340 00:16:56,800 --> 00:16:59,500 utilizarlos de la misma forma que hemos estado utilizando con F abre y 341 00:16:59,500 --> 00:17:03,000 cosas, los que están bloqueando porque usted realmente tiene que esperar a que 342 00:17:03,000 --> 00:17:04,470 ese archivo para abrir. 343 00:17:04,470 --> 00:17:09,290 >> Pero Node.js te da eso y básicamente corbatas en V8 de Google 344 00:17:09,290 --> 00:17:14,030 Motor de JavaScript que es la razón que Chrome es tan rápido en el procesamiento 345 00:17:14,030 --> 00:17:17,040 JavaScript porque tiene este motor V8. 346 00:17:17,040 --> 00:17:22,460 Así que sé que suena como uno de esos Conferencias de desarrolladores WWDC cosa 347 00:17:22,460 --> 00:17:25,390 donde se acaba de lanzar un manojo de la número de carta cosas para procesadores 348 00:17:25,390 --> 00:17:26,910 y decir que esto es tan genial. 349 00:17:26,910 --> 00:17:34,200 Pero es genial que lo hicieron esto porque Javascript - 350 00:17:34,200 --> 00:17:37,010 o tal vez si usted no está familiarizado con JavaScript todavía porque no hemos tenido 351 00:17:37,010 --> 00:17:38,180 las conferencias sobre el mismo - 352 00:17:38,180 --> 00:17:40,770 pero JavaScript es una interpreta idioma. 353 00:17:40,770 --> 00:17:41,970 >> Y este es un punto importante también. 354 00:17:41,970 --> 00:17:45,790 Así que es importante para nuestra web servidores para ser rápido, ¿verdad? 355 00:17:45,790 --> 00:17:49,970 Y si sólo estábamos corriendo JavaScript código que se interpretó con sólo 356 00:17:49,970 --> 00:17:52,130 cualquier edad intérprete podría ser lento. 357 00:17:52,130 --> 00:17:55,980 Así que los beneficios de tener este nodo intérprete V8 súper rápido. 358 00:17:55,980 --> 00:17:59,580 Y yo no sé si lo nombraron porque la bofetada V8 en la frente 359 00:17:59,580 --> 00:18:01,110 cosa, pero está bien. 360 00:18:01,110 --> 00:18:07,070 >> Así que me he preparado algunos ejemplos en esta dirección URL. 361 00:18:07,070 --> 00:18:10,490 Después del seminario, yo soy una especie de ir a hablar de cómo usted puede conseguir conjunto de nodos 362 00:18:10,490 --> 00:18:13,570 , pero por ahora, sólo una especie de deseo caminar a través de algunos ejemplos de código. 363 00:18:13,570 --> 00:18:17,250 Así que si quieres seguir a lo largo de todo el código fuente está disponible allí. 364 00:18:17,250 --> 00:18:18,720 ¿De acuerdo? 365 00:18:18,720 --> 00:18:22,280 >> Así que voy a dejar esta URL para un poco. 366 00:18:22,280 --> 00:18:24,440 Y entonces yo sólo voy a cambiar en el terminal. 367 00:18:24,440 --> 00:18:29,670 368 00:18:29,670 --> 00:18:34,400 ¿Están todos bien con esta URL? 369 00:18:34,400 --> 00:18:37,990 Así que voy a cambiar al a mi terminal aquí. 370 00:18:37,990 --> 00:18:42,030 >> Así que aquí está el código que Que tengo para hoy. 371 00:18:42,030 --> 00:18:43,960 ¿Por qué no empezamos por file simpler.js? 372 00:18:43,960 --> 00:18:49,110 373 00:18:49,110 --> 00:18:52,100 La otra cosa es que todo esto código va a ser escrito en 374 00:18:52,100 --> 00:18:56,660 Que JavaScript usted puede o pueden no estar familiarizados con. 375 00:18:56,660 --> 00:19:00,170 Supongo que un par de cosas es que muchos de código JavaScript es el tipo de 376 00:19:00,170 --> 00:19:04,000 sintaxis y la estructura es muy similar a C, para que puedas tipo de recogerlo como 377 00:19:04,000 --> 00:19:05,020 que avanza. 378 00:19:05,020 --> 00:19:08,750 He tratado de escribir un montón de la código de partida para esto de una manera que es 379 00:19:08,750 --> 00:19:11,230 similar a C, de modo que es un poco más legible. 380 00:19:11,230 --> 00:19:15,980 Pero a medida que avanzamos, estaré demostrando algunos de los adicionales 381 00:19:15,980 --> 00:19:18,980 características de JavaScript que son una especie de fresco. 382 00:19:18,980 --> 00:19:21,510 >> Pero echemos un vistazo a este programa de ejemplo. 383 00:19:21,510 --> 00:19:24,820 Supongo que todo está cortado allí. 384 00:19:24,820 --> 00:19:28,500 Yo sólo voy a arreglar eso de verdad rápida si eso está bien o no. 385 00:19:28,500 --> 00:19:31,400 No sé lo que esto va a hacer. 386 00:19:31,400 --> 00:19:34,660 ¿Es eso un poco mejor? 387 00:19:34,660 --> 00:19:36,510 ¿Puedes ver la var y esas cosas? 388 00:19:36,510 --> 00:19:39,320 Aceptar. 389 00:19:39,320 --> 00:19:44,120 >> Así que la primera línea es como el código JavaScript versión de una variable 390 00:19:44,120 --> 00:19:44,800 declaración. 391 00:19:44,800 --> 00:19:49,870 Así que para poner de relieve lo que esto haría parece en C. Así que esto es igual que 392 00:19:49,870 --> 00:19:52,620 índice de mí diciendo igual a tres o algo por el estilo. 393 00:19:52,620 --> 00:19:55,740 Así que yo no especifiqué el tipo. 394 00:19:55,740 --> 00:20:00,780 JavaScript tiene tipos, pero es muy dinámicamente mecanografiado en la naturaleza, por lo que 395 00:20:00,780 --> 00:20:02,580 no proporcionó ningún tipo de tipo sobre el mismo. 396 00:20:02,580 --> 00:20:03,670 Por lo que sólo tiene var. 397 00:20:03,670 --> 00:20:05,320 Eso es como variable. 398 00:20:05,320 --> 00:20:05,920 ¿De acuerdo? 399 00:20:05,920 --> 00:20:08,340 >> Y estoy llamando esta HTTP variable. 400 00:20:08,340 --> 00:20:12,480 Y en mi mano derecha, tengo el expresión que quiero poner en HTTP. 401 00:20:12,480 --> 00:20:14,960 Y esto dice requiere HTTP. 402 00:20:14,960 --> 00:20:18,500 Así que esto es un poco similar a incluir. 403 00:20:18,500 --> 00:20:22,940 Es un poco más como poderoso que incluir en el sentido de que incluye 404 00:20:22,940 --> 00:20:26,100 sería simplemente copiar y pegar la cabecera presentar para los prototipos de funciones o 405 00:20:26,100 --> 00:20:27,930 lo que sea con las definiciones de tipos. 406 00:20:27,930 --> 00:20:30,590 Pero requerirá que realmente está sucediendo para sacarnos el código. 407 00:20:30,590 --> 00:20:33,280 >> Así que usted puede pensar en ella como importar algo de código. 408 00:20:33,280 --> 00:20:37,960 Así en algún lugar en el módulo de Node.js sistema o lo que sea, tienen todo esto 409 00:20:37,960 --> 00:20:40,790 Código del servidor HTTP así que estoy ir a buscar por mi propio 410 00:20:40,790 --> 00:20:43,130 uso personal en este programa. 411 00:20:43,130 --> 00:20:44,260 ¿De acuerdo? 412 00:20:44,260 --> 00:20:46,930 >> Así que tengo esta función que he escrito. 413 00:20:46,930 --> 00:20:50,330 Y note que no tenía que especificar el tipo de devolución o el tipo de la 414 00:20:50,330 --> 00:20:51,140 argumentos de nuevo. 415 00:20:51,140 --> 00:20:54,440 Así que tipo de suelta escrito en que tipo de sentido. 416 00:20:54,440 --> 00:20:57,290 Dos argumentos que adopte en, la solicitud y la respuesta. 417 00:20:57,290 --> 00:21:02,080 Así que eso es conceptualmente algo así como familiar de la imagen que teníamos 418 00:21:02,080 --> 00:21:05,280 en la pantalla antes porque obtenemos esta solicitud que 419 00:21:05,280 --> 00:21:06,410 tener desde el usuario. 420 00:21:06,410 --> 00:21:09,170 Y luego tenemos una respuesta que podemos escribir cosas que. 421 00:21:09,170 --> 00:21:15,060 >> Así que la primera línea de este hace res.writeHead 200 y luego este 422 00:21:15,060 --> 00:21:17,070 tipo de contenido de texto sin formato. 423 00:21:17,070 --> 00:21:19,300 Así que vamos a pieza Este aparte un poco. 424 00:21:19,300 --> 00:21:22,340 Así que vamos a centrarnos en res.write para un poco. 425 00:21:22,340 --> 00:21:28,420 Así que escribir es, básicamente, y escribir la cabeza, son sólo formas de escribir una especie de cabo 426 00:21:28,420 --> 00:21:29,960 las cosas a la respuesta. 427 00:21:29,960 --> 00:21:30,770 ¿De acuerdo? 428 00:21:30,770 --> 00:21:36,230 Así que escribir la cabeza, si alguien se acuerda de la conferencia de HTTP, es que ustedes 429 00:21:36,230 --> 00:21:39,940 recordar encabezados en la parte superior de la cosa HTTP? 430 00:21:39,940 --> 00:21:43,580 ¿Por qué no puedo simplemente Demo cabeceras rápido. 431 00:21:43,580 --> 00:21:44,640 ¿Sería útil? 432 00:21:44,640 --> 00:21:45,500 ¿O debemos simplemente una especie de - 433 00:21:45,500 --> 00:21:46,070 Aceptar. 434 00:21:46,070 --> 00:21:46,740 Claro. 435 00:21:46,740 --> 00:21:52,340 >> Así que cuando el navegador va a google.com o algo por el estilo, 436 00:21:52,340 --> 00:21:54,250 en realidad hay un poco más - 437 00:21:54,250 --> 00:21:55,380 esto es como un secreto - 438 00:21:55,380 --> 00:21:58,340 hay como un poco más de información que viene a través de la tubería que sólo 439 00:21:58,340 --> 00:22:00,180 el poco de búsqueda y todo. 440 00:22:00,180 --> 00:22:03,550 Así que le muestre esto, me voy utilizar un programa llamado Curl. 441 00:22:03,550 --> 00:22:04,260 ¿De acuerdo? 442 00:22:04,260 --> 00:22:08,020 Así que esto es algo que se puede ejecutar en la línea de comandos de Mac OSX o en el 443 00:22:08,020 --> 00:22:09,830 aparato o lo que sea. 444 00:22:09,830 --> 00:22:17,050 Y por lo que si me rizo HTTP google.com, Voy a ver el código HTML. 445 00:22:17,050 --> 00:22:21,230 Y esto es, para ser justos, sólo el HTML que tipo de te dice que 446 00:22:21,230 --> 00:22:24,695 redirigir a www si tu navegador sí no manejar automáticamente el 447 00:22:24,695 --> 00:22:27,110 redirección. 448 00:22:27,110 --> 00:22:33,390 >> Así que esto es sólo HTML, pero voy añadir a encresparse este guión puedo etiquetar. 449 00:22:33,390 --> 00:22:33,600 ¿De acuerdo? 450 00:22:33,600 --> 00:22:35,600 Y esto va a mostrar me las cabeceras. 451 00:22:35,600 --> 00:22:40,640 Así que esta es también la información que viene a través de cuando llegue esta respuesta. 452 00:22:40,640 --> 00:22:41,260 ¿De acuerdo? 453 00:22:41,260 --> 00:22:45,320 >> Así que en la parte superior, aparece este HTTP 301 se mueven de forma permanente. 454 00:22:45,320 --> 00:22:49,470 Y esto es algo importante porque esto se refiere al código de estado. 455 00:22:49,470 --> 00:22:53,750 De modo que el 301 aquí es el código de estado, que es básicamente sólo un entero 456 00:22:53,750 --> 00:22:57,750 que le dice al navegador o quien esté leyendo esto, si pretendes que 457 00:22:57,750 --> 00:23:01,460 usted es un navegador y que se está viendo esto, básicamente, ahora si nos fijamos en 458 00:23:01,460 --> 00:23:04,960 eso y ves a un 301, usted sabe que tengo hacer algo especial con base en 459 00:23:04,960 --> 00:23:08,810 301, o algo sucedió especial basado en el 301. 460 00:23:08,810 --> 00:23:12,640 Por lo que dice se trasladó permanentemente. 461 00:23:12,640 --> 00:23:17,700 >> Y entonces, en el fondo, tenemos un montón de pares de valores clave. 462 00:23:17,700 --> 00:23:22,100 Así que tenemos la ubicación es www.google.com. 463 00:23:22,100 --> 00:23:25,190 Y luego clase de todas estas otras cosas, pero en el fondo, lo que la ubicación es 464 00:23:25,190 --> 00:23:29,662 dicho es la nueva ubicación es en www.google.com. 465 00:23:29,662 --> 00:23:33,800 Así que ahora si vas a google.com, se le suerte de ver el tipo de navegador parpadeo 466 00:23:33,800 --> 00:23:38,770 por un segundo y luego se le redirigirá de vuelta a www.google.com. 467 00:23:38,770 --> 00:23:41,840 Así las respuestas pueden contener estas cabeceras. 468 00:23:41,840 --> 00:23:43,330 >> Y un par de cosas a destacar. 469 00:23:43,330 --> 00:23:46,890 Así que digamos que en realidad estábamos con éxito al visitar una página web. 470 00:23:46,890 --> 00:23:49,040 Así que déjame ir a - 471 00:23:49,040 --> 00:23:51,080 lo que es un buen sitio web? 472 00:23:51,080 --> 00:23:53,285 Soy malo en el pensamiento de buena sitios web en el acto. 473 00:23:53,285 --> 00:23:53,640 >> AUDIENCIA: Wikipedia. 474 00:23:53,640 --> 00:23:54,160 >> KEVIN SCHMID: OK. 475 00:23:54,160 --> 00:23:56,040 Hagamos Wikipedia. 476 00:23:56,040 --> 00:23:58,680 Así que aquí me conmovió. 477 00:23:58,680 --> 00:23:59,240 Oh, espera. 478 00:23:59,240 --> 00:24:00,160 ¿Era yo? 479 00:24:00,160 --> 00:24:00,890 Sí, lo era. 480 00:24:00,890 --> 00:24:01,100 Aceptar. 481 00:24:01,100 --> 00:24:03,005 Así que tengo que hacer www. 482 00:24:03,005 --> 00:24:06,006 Así que me voy a hacer www. 483 00:24:06,006 --> 00:24:09,680 Y como pueden ver, aquí está todo el HTML que el navegador procesaría 484 00:24:09,680 --> 00:24:10,910 para Wikipedia. 485 00:24:10,910 --> 00:24:14,055 >> Pero si me quedo con el desplazamiento hacia arriba aquí, lo que voy a ver en la parte superior - 486 00:24:14,055 --> 00:24:17,800 wow, hay una gran cantidad de HTML en Wikipedia - 487 00:24:17,800 --> 00:24:22,550 pero lo que puedo ver en la parte superior aquí es el código 200 de estado como opuesto a la 488 00:24:22,550 --> 00:24:24,570 301 que vi antes. 489 00:24:24,570 --> 00:24:27,100 Y cuenta de que tiene un buen Aceptar y junto a ella. 490 00:24:27,100 --> 00:24:29,470 Así que esto es como el buen código de estado. 491 00:24:29,470 --> 00:24:31,160 >> ¿Se parece familiar ese número 200? 492 00:24:31,160 --> 00:24:34,120 493 00:24:34,120 --> 00:24:39,880 Sí, porque cuando lo hice simpler.js, Escribí un 200 allí. 494 00:24:39,880 --> 00:24:43,290 Así que eso es básicamente diciendo decirle al navegador o quien está tratando de llegar a 495 00:24:43,290 --> 00:24:45,440 esto que tuvieron éxito. 496 00:24:45,440 --> 00:24:49,040 O que algo así como que tuvieron éxito también. 497 00:24:49,040 --> 00:24:54,320 >> Y no hay este tipo de sintaxis especial en Javascript para declarar una 498 00:24:54,320 --> 00:24:59,870 mapa de estas teclas como tipo de contenido y estos valores como texto sin formato. 499 00:24:59,870 --> 00:25:03,780 Así que si nos fijamos en la respuesta que regresar de Wikipedia antes, - 500 00:25:03,780 --> 00:25:06,200 Voy a tratar de desplazarse un poco más rápido - 501 00:25:06,200 --> 00:25:09,900 usted tiene estas teclas como servidor y estos valores de Apache. 502 00:25:09,900 --> 00:25:12,120 Así que tienes las claves y valores. 503 00:25:12,120 --> 00:25:15,930 Y usted puede especificarlo en Nodo qué enviar de vuelta. 504 00:25:15,930 --> 00:25:19,380 >> Así que esto es en realidad una especie de, de alguna maneras, y en cierto modo no es 505 00:25:19,380 --> 00:25:23,170 realmente, pero es un poco más bajo nivel que el código PHP que usted puede ser 506 00:25:23,170 --> 00:25:26,980 escribir para P fijó siete porque PHP y Apache especie de cuidar de algunos 507 00:25:26,980 --> 00:25:28,150 de estas cosas para usted. 508 00:25:28,150 --> 00:25:32,520 En PHP, puede reemplazar el valor predeterminado comportamiento por escribir sus propias cabeceras. 509 00:25:32,520 --> 00:25:35,520 Sin embargo, para los fines del presente, obtenemos para escribir nuestras propias cabeceras. 510 00:25:35,520 --> 00:25:38,210 511 00:25:38,210 --> 00:25:41,105 >> Entonces, ¿esa línea tiene sentido todo el mundo, la línea de la cabeza de escritura? 512 00:25:41,105 --> 00:25:41,380 Aceptar. 513 00:25:41,380 --> 00:25:42,280 Impresionante. 514 00:25:42,280 --> 00:25:45,870 >> Así que lo que hago es que termino la respuesta diciendo hola mundo. 515 00:25:45,870 --> 00:25:47,040 Aceptar. 516 00:25:47,040 --> 00:25:49,920 Pero eso es sólo una función llamado controlador de solicitudes. 517 00:25:49,920 --> 00:25:53,510 Así que ahora realmente tengo que tipo de hacer algo con esta función, ¿no? 518 00:25:53,510 --> 00:25:59,170 >> Así que aquí lo que hago es no está presente línea que hace iguales servidor var 519 00:25:59,170 --> 00:26:03,530 HTTP.create servidor, y luego me Aconteció en el controlador de solicitudes. 520 00:26:03,530 --> 00:26:06,080 Así que este es el tipo de nodo manera de crear un servidor. 521 00:26:06,080 --> 00:26:08,790 Y noto que estoy pasando en el controlador de solicitudes. 522 00:26:08,790 --> 00:26:12,290 Así que esto está diciendo la createServer función que quiero que me hagas una 523 00:26:12,290 --> 00:26:16,270 servidor, y cuando el servidor recibe una respuesta, necesito que llames a esta 524 00:26:16,270 --> 00:26:18,680 solicitar función de controlador. 525 00:26:18,680 --> 00:26:18,990 ¿De acuerdo? 526 00:26:18,990 --> 00:26:22,290 >> Para que la línea más o menos termina de inmediato. 527 00:26:22,290 --> 00:26:28,780 De modo que la línea de servidores var se hace bien después de hacer eso más o menos. 528 00:26:28,780 --> 00:26:31,770 Quiero decir, tiene que establecer algún interno estado de saber que tendría que 529 00:26:31,770 --> 00:26:35,400 llamar a esa función controlador de solicitudes, pero que no va a sentarse allí y 530 00:26:35,400 --> 00:26:37,730 por ejemplo tiene el usuario envió me una petición todavía? 531 00:26:37,730 --> 00:26:39,270 Me ha enviado al usuario una petición todavía? 532 00:26:39,270 --> 00:26:40,780 Por lo tanto, no se bloquea. 533 00:26:40,780 --> 00:26:41,650 ¿De acuerdo? 534 00:26:41,650 --> 00:26:46,120 >> Así que lo que esto va a hacer es que, básicamente, ahora almacena un puntero a este código, 535 00:26:46,120 --> 00:26:49,670 esta función controlador de solicitudes, y luego se ejecutará ese código cuando alguien 536 00:26:49,670 --> 00:26:52,170 formule una solicitud. 537 00:26:52,170 --> 00:26:54,120 Y luego hacemos server.listen. 538 00:26:54,120 --> 00:26:56,950 539 00:26:56,950 --> 00:26:59,960 >> El 1337 no es bastante arbitraria. 540 00:26:59,960 --> 00:27:02,285 No tenía ninguna razón en particular para recoger ese número. 541 00:27:02,285 --> 00:27:03,860 Fue totalmente al azar. 542 00:27:03,860 --> 00:27:07,010 Pero eso sólo especifica el puerto. 543 00:27:07,010 --> 00:27:10,640 Así que la mayoría de los servidores web verás que utilizar el puerto 80, ya que es una especie 544 00:27:10,640 --> 00:27:11,810 de como la convención. 545 00:27:11,810 --> 00:27:16,170 Así que si voy a algo así como: No sé, Wikipedia.org, 546 00:27:16,170 --> 00:27:17,700 y puse dos puntos 8 - 547 00:27:17,700 --> 00:27:18,610 oh wow, no se puede ver eso. 548 00:27:18,610 --> 00:27:19,370 Lo siento. 549 00:27:19,370 --> 00:27:21,820 Pero si lo hago Wikipedia - 550 00:27:21,820 --> 00:27:24,810 Voy a escribir aquí sólo para que está claro que en la cámara. 551 00:27:24,810 --> 00:27:29,150 Pero si tomo esto en un navegador dos puntos 80, que especifica ir a 552 00:27:29,150 --> 00:27:31,430 Wikipedia.org en el puerto 80. 553 00:27:31,430 --> 00:27:36,200 Así que es como la forma en que Estados Unidos tiene múltiples puertos como donde se puede enviar 554 00:27:36,200 --> 00:27:37,440 cosas a clase de. 555 00:27:37,440 --> 00:27:40,730 Así que es como ir a este particular, colocar en este servidor. 556 00:27:40,730 --> 00:27:40,990 Aceptar. 557 00:27:40,990 --> 00:27:45,730 >> Así que me decidí 1337. 558 00:27:45,730 --> 00:27:47,910 Hay toda una serie de números que se puede recoger. 559 00:27:47,910 --> 00:27:50,390 Eso no era totalmente especial. 560 00:27:50,390 --> 00:27:54,560 >> Pero, ¿qué voy a hacer ahora es que voy a correr Nodo. 561 00:27:54,560 --> 00:27:59,730 Déjame entrar realmente que una pareja líneas más abajo para que puedas verlo. 562 00:27:59,730 --> 00:28:03,130 Yo voy a hacer Node, y estoy va a correr simpler.js. 563 00:28:03,130 --> 00:28:06,880 Y hablaremos de cómo llegar Nodo creado en un poco. 564 00:28:06,880 --> 00:28:09,350 Pero ahora se acaba de ejecutar el servidor. 565 00:28:09,350 --> 00:28:14,360 >> Así que una cosa que podemos intentar que no podrá los que lo emocionante es que podemos realmente 566 00:28:14,360 --> 00:28:16,300 tratar de acceder a él en Curl. 567 00:28:16,300 --> 00:28:20,680 Así que yo puedo hacer Curl, y mi máquina host local. 568 00:28:20,680 --> 00:28:24,600 También verá este escrito como esto a veces. 569 00:28:24,600 --> 00:28:29,810 Host local y 127.0.0.1 son amables de como el ordenador de casa. 570 00:28:29,810 --> 00:28:33,180 Así que es como hablar con su propio ordenador. 571 00:28:33,180 --> 00:28:33,760 Aceptar. 572 00:28:33,760 --> 00:28:36,030 >> Y entonces puedo decir 1337. 573 00:28:36,030 --> 00:28:39,630 Así que si me quedo esta línea de código, que dice hola mundo. 574 00:28:39,630 --> 00:28:44,050 Y si yo quería ver esas cosas que tenido de texto sin formato o tipo de contenido 575 00:28:44,050 --> 00:28:46,560 lo que sea, yo podría incluso poner esto aquí. 576 00:28:46,560 --> 00:28:48,810 Y note que sí dice en Aceptar. 577 00:28:48,810 --> 00:28:50,810 Y tengo texto sin formato. 578 00:28:50,810 --> 00:28:53,140 Y luego está el tipo de todas estas otras cosas que nodo se sumará en 579 00:28:53,140 --> 00:28:54,440 allí para mí. 580 00:28:54,440 --> 00:28:55,700 Eso no es muy importante. 581 00:28:55,700 --> 00:28:58,230 >> Quiero decir, hay algún tipo de técnica aspectos de por lo que son una especie 582 00:28:58,230 --> 00:29:02,280 de lo cool que hablar, pero sólo para mostrar usted, también tiene el poder de 583 00:29:02,280 --> 00:29:03,070 cambiar estos en todo. 584 00:29:03,070 --> 00:29:06,280 Así que sólo puedo añadir un montón de ese tipo de cosas. 585 00:29:06,280 --> 00:29:11,780 Y entonces ahora, si me veo en mi de salida, será que. 586 00:29:11,780 --> 00:29:19,740 Así pues, estas cabeceras significan ciertas cosas a los navegadores y cosas por el estilo. 587 00:29:19,740 --> 00:29:23,040 >> Y cabeceras, básicamente, puede decirle a un navegador cómo responder a algo. 588 00:29:23,040 --> 00:29:26,280 Si alguna vez has oído hablar de las cookies antes, o si alguna vez has estado molesto 589 00:29:26,280 --> 00:29:29,330 por una página web estableciendo cookies, o se convierte en el bloque de galletas o 590 00:29:29,330 --> 00:29:30,320 algo así. 591 00:29:30,320 --> 00:29:33,040 En realidad se puede establecer cookies en estos encabezados. 592 00:29:33,040 --> 00:29:36,990 Así le dicen a un navegador como el comportamiento en algunos casos. 593 00:29:36,990 --> 00:29:37,750 Aceptar. 594 00:29:37,750 --> 00:29:40,310 >> Así que eso fue simpler.js. 595 00:29:40,310 --> 00:29:42,780 ¿Alguien tiene alguna pregunta en ese archivo de código fuente? 596 00:29:42,780 --> 00:29:45,420 597 00:29:45,420 --> 00:29:45,610 Aceptar. 598 00:29:45,610 --> 00:29:46,490 Genial. 599 00:29:46,490 --> 00:29:50,780 >> Así que vamos a eliminar el r de ese y mirar simple.js. 600 00:29:50,780 --> 00:29:53,010 Así que esto es más o menos el mismo programa. 601 00:29:53,010 --> 00:29:56,030 Acabo de escribir un poco diferente porque quería a una especie de punto culminante 602 00:29:56,030 --> 00:29:57,850 algunas características de JavaScript. 603 00:29:57,850 --> 00:30:03,880 >> Así que darse cuenta de que el controlador de solicitudes función ha desaparecido totalmente. 604 00:30:03,880 --> 00:30:05,800 Oh sí, ¿le hicieron una pregunta? 605 00:30:05,800 --> 00:30:08,200 >> AUDIENCIA: Sí, los argumentos que se pasan a que 606 00:30:08,200 --> 00:30:10,120 función, ¿qué son? 607 00:30:10,120 --> 00:30:12,050 >> KEVIN SCHMID: Así que estos son JavaScript objetos. 608 00:30:12,050 --> 00:30:15,230 En la documentación de Node.js, se básicamente dice qué métodos son 609 00:30:15,230 --> 00:30:15,910 disponible en ellos. 610 00:30:15,910 --> 00:30:19,602 Simplemente sucede que tiene el acceso a la este método llamado cabezal de escritura y al final 611 00:30:19,602 --> 00:30:20,730 y cosas por el estilo. 612 00:30:20,730 --> 00:30:22,590 Pero hay un montón más métodos. 613 00:30:22,590 --> 00:30:27,670 >> Y por ejemplo, como uno de ellos en particular, sobre rec, puede hacerlo 614 00:30:27,670 --> 00:30:34,540 algo así como lo que se rec.method le dirá si es un get de HTTP o 615 00:30:34,540 --> 00:30:36,780 Peticiones HTTP POST y cosas así. 616 00:30:36,780 --> 00:30:39,100 Así que hay todo tipo de diferentes propiedades, pero los dos son 617 00:30:39,100 --> 00:30:42,560 JavaScript objetos, y lo único que tienen existen funciones vinculadas a los que os 618 00:30:42,560 --> 00:30:43,850 puede escribir cosas que. 619 00:30:43,850 --> 00:30:45,520 ¿De acuerdo? 620 00:30:45,520 --> 00:30:49,030 >> Así que darse cuenta de que controlador de solicitudes está totalmente ido. 621 00:30:49,030 --> 00:30:52,650 Pero el código que tenía en la solicitud de manejador sigue ahí. 622 00:30:52,650 --> 00:30:56,520 Todavía tengo esta res.writeHead y todavía tengo este res.end. 623 00:30:56,520 --> 00:31:00,270 Y lo que este es un ejemplo de en JavaScript es esta idea de un 624 00:31:00,270 --> 00:31:01,460 función anónima. 625 00:31:01,460 --> 00:31:04,180 y anónimo es como un nombre apropiado para ello, ya que hace, literalmente, no 626 00:31:04,180 --> 00:31:05,180 tener un nombre. 627 00:31:05,180 --> 00:31:07,900 No hay solicitud función manejador de ahí. 628 00:31:07,900 --> 00:31:10,110 >> No tiene nombre, pero todavía está teniendo una discusión. 629 00:31:10,110 --> 00:31:12,250 Así que todavía tengo rec y res. 630 00:31:12,250 --> 00:31:16,180 Y todavía tengo el código. 631 00:31:16,180 --> 00:31:18,930 Esto es perfectamente normal El código JavaScript. 632 00:31:18,930 --> 00:31:22,540 Así que puedo declarar una función sin dar explícitamente un nombre. 633 00:31:22,540 --> 00:31:24,250 Es un poco confuso al principio. 634 00:31:24,250 --> 00:31:26,230 Hay algunas cosas útiles, como que usted puede hacer con 635 00:31:26,230 --> 00:31:28,450 estas funciones anónimas. 636 00:31:28,450 --> 00:31:32,100 ¿Alguien tiene alguna pregunta sobre esto, o ¿está bien sólo para, por ahora, 637 00:31:32,100 --> 00:31:34,130 especie de simplemente aceptar que va a hacer lo mismo? 638 00:31:34,130 --> 00:31:36,700 639 00:31:36,700 --> 00:31:37,125 Sip? 640 00:31:37,125 --> 00:31:38,680 >> AUDIENCIA: Son funciones de primera clase en JavaScript? 641 00:31:38,680 --> 00:31:41,020 >> KEVIN SCHMID: Ellos son los primeros clase en JavaScript. 642 00:31:41,020 --> 00:31:45,490 Y sólo sé que estos conceptos de que pasa en una función anónima como 643 00:31:45,490 --> 00:31:49,600 aplica el JavaScript que puede escribir en su proyecto final para 644 00:31:49,600 --> 00:31:51,260 el navegador web también. 645 00:31:51,260 --> 00:31:56,700 Así, por ejemplo, en el código JavaScript en su navegador, también es cierto evento 646 00:31:56,700 --> 00:32:00,680 impulsado en el sentido de que lo que vas a tener es cuando el usuario hace clic en este 647 00:32:00,680 --> 00:32:02,640 botón, quiero que ejecutar este código. 648 00:32:02,640 --> 00:32:07,070 >> Así que es el mismo tipo de ideas de la lado del cliente cuando un clic del ratón o 649 00:32:07,070 --> 00:32:09,870 ratón sobre alguna imagen en su página web, ejecuta este código. 650 00:32:09,870 --> 00:32:11,350 Eso puede aplicarse a servidores. 651 00:32:11,350 --> 00:32:16,380 Así que eso es algo así como el apasionante razón por la que JavaScript es un muy 652 00:32:16,380 --> 00:32:19,810 personas idóneas o algunos piensan que es una lenguaje adecuado para este tipo de 653 00:32:19,810 --> 00:32:22,530 servidor de controlador de eventos porque tiene estas funciones anónimas. 654 00:32:22,530 --> 00:32:26,150 Usted tiene toda la idea de este código asíncrono. 655 00:32:26,150 --> 00:32:27,060 Aceptar. 656 00:32:27,060 --> 00:32:30,360 ¿Alguien tiene alguna pregunta? 657 00:32:30,360 --> 00:32:30,470 >> Aceptar. 658 00:32:30,470 --> 00:32:33,440 Así que eso fue simple.js. 659 00:32:33,440 --> 00:32:38,070 Así que echemos un vistazo a una más o un par más. 660 00:32:38,070 --> 00:32:42,040 Así que esto es sleep.js. 661 00:32:42,040 --> 00:32:47,160 Así es que nadie conoce la función de reposo C? 662 00:32:47,160 --> 00:32:50,936 Desde tal vez una de las conferencias anteriores o algo por el estilo? 663 00:32:50,936 --> 00:32:54,650 >> Así que, básicamente, se puede pasar de un pienso número de segundos o si utiliza U 664 00:32:54,650 --> 00:32:57,080 dormir un número de milisegundos o nanosegundos. 665 00:32:57,080 --> 00:33:00,450 Y, básicamente, el programa sólo dejará de corriendo por esa cantidad de tiempo. 666 00:33:00,450 --> 00:33:01,280 ¿Cierto? 667 00:33:01,280 --> 00:33:06,970 Y entonces se despertará con el tiempo y entonces sólo va a seguir funcionando 668 00:33:06,970 --> 00:33:08,340 el programa. 669 00:33:08,340 --> 00:33:12,740 >> Así que este tipo de servidor da la impresión de dormir. 670 00:33:12,740 --> 00:33:17,580 Así que darse cuenta de que tenemos la misma res.writeHead 200 con la cabecera como 671 00:33:17,580 --> 00:33:22,130 antes, pero entonces estamos llamando a este función llama conjunto de tiempo de espera. 672 00:33:22,130 --> 00:33:26,170 Establecer tiempo de espera también está disponible en el navegador web Google Chrome 673 00:33:26,170 --> 00:33:28,000 o Safari o lo que sea. 674 00:33:28,000 --> 00:33:31,720 Y básicamente lo que está haciendo aquí Se trata de tomar en una función. 675 00:33:31,720 --> 00:33:33,360 Nótese, de nuevo, es un función anónima. 676 00:33:33,360 --> 00:33:36,310 Así que es una especie de fresco porque somos utilizando una función anónima dentro de un 677 00:33:36,310 --> 00:33:38,950 función anónima que puede ser un poco raro. 678 00:33:38,950 --> 00:33:42,270 >> Pero está tomando esa función, que es básicamente diciendo - y la forma en que este 679 00:33:42,270 --> 00:33:47,430 obras es de 5000 milisegundos, quiero usted ejecute esa función que 680 00:33:47,430 --> 00:33:50,830 sólo termina la respuesta y escribe oye. 681 00:33:50,830 --> 00:33:56,730 Así que esto da la impresión de como dormir, pero la forma en que esta realidad 682 00:33:56,730 --> 00:33:59,780 Works es vamos a correr a través de esta línea muy rápidamente. 683 00:33:59,780 --> 00:34:01,190 Sólo estamos escribiendo algo. 684 00:34:01,190 --> 00:34:03,780 Y luego también a correr a través de esta línea muy rápidamente. 685 00:34:03,780 --> 00:34:08,620 Así que no estamos realmente va esperar cinco segundos. 686 00:34:08,620 --> 00:34:11,370 Sólo vamos a correr este código al instante. 687 00:34:11,370 --> 00:34:14,219 >> Y luego está, de nuevo, este pequeño ciclo de eventos que tiene ahora esta cosa 688 00:34:14,219 --> 00:34:17,570 registros que, básicamente, es sólo constantemente dando vueltas en un círculo 689 00:34:17,570 --> 00:34:21,620 y mirando el reloj en una sola hilo y refrán, tiene cinco segundos 690 00:34:21,620 --> 00:34:22,360 pero pasó? 691 00:34:22,360 --> 00:34:26,409 Y luego, cuando se ve que el segundo la mano se ha movido como cinco segundos, o 692 00:34:26,409 --> 00:34:29,190 lo que sea, entonces se despierta y dice: oh, ¿qué tengo que hacer? 693 00:34:29,190 --> 00:34:30,350 Oh tengo que ejecutar este código. 694 00:34:30,350 --> 00:34:33,110 Y luego se va a ejecutar res.end bueno. 695 00:34:33,110 --> 00:34:35,360 >> Así que de nuevo, nunca estamos esperando aquí. 696 00:34:35,360 --> 00:34:38,590 Así que no es que este código dentro de esta función se va a tomar cinco 697 00:34:38,590 --> 00:34:39,900 segundos para correr. 698 00:34:39,900 --> 00:34:43,090 Este código se ejecutará más o menos instantáneamente, al menos en relación a 699 00:34:43,090 --> 00:34:46,139 los cinco segundos que estábamos hablando sobre anterior antes. 700 00:34:46,139 --> 00:34:52,100 >> Así que para mostrar esto en acción, Yo puedo hacer Node.sleep.js. 701 00:34:52,100 --> 00:34:55,159 Y lo hizo me equivoco algo? 702 00:34:55,159 --> 00:34:56,310 Es posible. 703 00:34:56,310 --> 00:34:57,410 Lo siento. 704 00:34:57,410 --> 00:34:59,530 Vamos a ver lo que podemos hacer para arreglar esto. 705 00:34:59,530 --> 00:35:10,830 706 00:35:10,830 --> 00:35:12,080 Aceptar. 707 00:35:12,080 --> 00:35:15,460 708 00:35:15,460 --> 00:35:17,464 Así que sin duda utilizar Node.js. 709 00:35:17,464 --> 00:35:19,440 Sólo estoy bromeando. 710 00:35:19,440 --> 00:35:19,570 Aceptar. 711 00:35:19,570 --> 00:35:20,820 Sólo un segundo. 712 00:35:20,820 --> 00:35:27,380 713 00:35:27,380 --> 00:35:27,900 Aceptar. 714 00:35:27,900 --> 00:35:29,130 Yo sé lo que es. 715 00:35:29,130 --> 00:35:34,440 >> Así que la cuestión es que en mi otra pestaña aquí, yo estaba corriendo nodo que ya están en 716 00:35:34,440 --> 00:35:36,590 esa misma dirección, 1337. 717 00:35:36,590 --> 00:35:43,370 Así que el error que este lanzó, si miramos en real de cerca, es la dirección en 718 00:35:43,370 --> 00:35:45,180 utilizar, EADDRINUSE. 719 00:35:45,180 --> 00:35:47,970 Así que ya estaba utilizando 1337 aquí. 720 00:35:47,970 --> 00:35:52,210 Así que si cierro esto adelante, y entonces ahora tratar de ejecutar este, es de esperar, todo 721 00:35:52,210 --> 00:35:53,210 va a estar bien. 722 00:35:53,210 --> 00:35:53,440 Aceptar. 723 00:35:53,440 --> 00:35:57,020 Por lo que sólo se puede tener una cosa tipo de escuchar en un puerto a la vez. 724 00:35:57,020 --> 00:35:59,660 Otra solución hubiera sido para mí simplemente editar ese programa y hacer 725 00:35:59,660 --> 00:36:02,370 que sea como 1338 o algo así así. 726 00:36:02,370 --> 00:36:04,100 >> Pero ahora el sueño se está ejecutando. 727 00:36:04,100 --> 00:36:06,400 Así que vamos a intentarlo en realidad en el navegador esta vez porque es un 728 00:36:06,400 --> 00:36:09,080 poco aburrido para ver en un terminal. 729 00:36:09,080 --> 00:36:13,560 Así que sólo voy a ir a ese 127 dirección otra vez en 1337. 730 00:36:13,560 --> 00:36:14,850 Y si usted puede ver - 731 00:36:14,850 --> 00:36:18,050 No sé si es posible - pero mi el navegador de tomar un tiempo muy, muy largo 732 00:36:18,050 --> 00:36:20,600 tiempo para cargar o como cinco segundos. 733 00:36:20,600 --> 00:36:23,460 >> Y a continuación, después de que, finalmente puso fin a la respuesta. 734 00:36:23,460 --> 00:36:29,070 Y no se puede ver porque la cosa se mueve sobre un poco, pero si hago 735 00:36:29,070 --> 00:36:32,500 esto un poco más pequeño, puede ver que dice hola. 736 00:36:32,500 --> 00:36:35,130 Así que me dio la oye, pero después de cinco segundos. 737 00:36:35,130 --> 00:36:38,510 Y puede que sea un poco más limpio para ver aquí en la terminal, por lo que estoy 738 00:36:38,510 --> 00:36:40,980 vamos a hacer una - 739 00:36:40,980 --> 00:36:43,540 vamos a hacer aquí - 740 00:36:43,540 --> 00:36:48,370 hagámoslo Curl esa dirección de nuevo con el 1337. 741 00:36:48,370 --> 00:36:50,820 Y acabo de clase de que sentarme aquí durante cinco segundos. 742 00:36:50,820 --> 00:36:53,760 Pero nótese que el servidor puede aceptar nuevas respuestas. 743 00:36:53,760 --> 00:36:54,940 Así que imprime bueno. 744 00:36:54,940 --> 00:36:58,720 >> Y para una demostración de esto, básicamente, lo que Que puedo hacer en este otro tab - 745 00:36:58,720 --> 00:37:02,640 así que digamos que hago esto en otra pestaña, Yo voy a hacer Curl y el mismo 746 00:37:02,640 --> 00:37:03,780 algo nuevo. 747 00:37:03,780 --> 00:37:06,600 Y yo voy a tratar de patear estos chicos fuera al mismo tiempo. 748 00:37:06,600 --> 00:37:08,260 Así que voy a hacer esto, y estoy ir a correr por aquí y estoy 749 00:37:08,260 --> 00:37:09,650 va a hacerlo de nuevo. 750 00:37:09,650 --> 00:37:14,030 >> Y vamos a hacerlo de manera que puede ver los dos. 751 00:37:14,030 --> 00:37:20,250 Ese impreso oye y que uno impresa oye todo el camino en - 752 00:37:20,250 --> 00:37:22,550 vamos a hacer ese experimento nuevo. 753 00:37:22,550 --> 00:37:25,100 En realidad, vamos a usar este engañar, si eso está bien. 754 00:37:25,100 --> 00:37:30,520 >> Así que voy a utilizar algo de shell que me permite correr básicamente dos copias 755 00:37:30,520 --> 00:37:32,630 de este programa en paralelo. 756 00:37:32,630 --> 00:37:36,070 Así que va a ejecutar el primer programa y el segundo programa en paralelo. 757 00:37:36,070 --> 00:37:39,060 Así que ahora si presiono Enter, se va para hacer esa petición más o menos 758 00:37:39,060 --> 00:37:40,570 instantáneamente al mismo tiempo. 759 00:37:40,570 --> 00:37:42,620 Así que vamos a darle una oportunidad a esto. 760 00:37:42,620 --> 00:37:44,950 >> Así que ahora lo nota dice dos procesos. 761 00:37:44,950 --> 00:37:50,630 Y si usted es curioso, que 27.000 número es, básicamente, el ID del proceso. 762 00:37:50,630 --> 00:37:52,940 Y luego aviso, imprimieron Hey, al mismo tiempo. 763 00:37:52,940 --> 00:37:56,820 No era como que teníamos que esperar cinco segundos para uno y después de eso, 764 00:37:56,820 --> 00:37:59,640 Cinco segundos después conseguir el segundo. 765 00:37:59,640 --> 00:38:03,300 Así que eso es algo, de alguna manera, es en realidad no prueba, pero es 766 00:38:03,300 --> 00:38:07,390 evidencia intuitiva que no se trata sólo como esperar cinco segundos y el bloqueo 767 00:38:07,390 --> 00:38:08,960 todo el hilo. 768 00:38:08,960 --> 00:38:10,720 Aceptar cool. 769 00:38:10,720 --> 00:38:17,850 >> Y Aarón hizo una pregunta anterior que era, bueno, ¿y si nosotros hacemos algo - 770 00:38:17,850 --> 00:38:18,735 Sip? 771 00:38:18,735 --> 00:38:19,051 >> AUDIENCIA: Espere. 772 00:38:19,051 --> 00:38:21,585 ¿Cómo es diferente de búfer printf, sin embargo? 773 00:38:21,585 --> 00:38:23,010 ¿No es lo que hace automáticamente que? 774 00:38:23,010 --> 00:38:25,390 ¿Por qué tenemos que preocuparse por ello? 775 00:38:25,390 --> 00:38:26,555 >> KEVIN SCHMID: Oh, ¿podrías decir que una vez más? 776 00:38:26,555 --> 00:38:29,510 >> AUDIENCIA: No le gusta búfer printf hacer exactamente lo mismo? 777 00:38:29,510 --> 00:38:31,280 >> KEVIN SCHMID: El buffer printf? 778 00:38:31,280 --> 00:38:32,753 >> AUDIENCIA: Si. 779 00:38:32,753 --> 00:38:33,244 Aceptar. 780 00:38:33,244 --> 00:38:40,609 ¿No fue en una de las pruebas que eran hablando de cómo si hace printf 781 00:38:40,609 --> 00:38:42,899 algo y luego lo han pausar una segundos, y luego lo tienes bucle de diez 782 00:38:42,899 --> 00:38:46,530 tiempos, que va a esperar diez segundos y entonces printf todo junto? 783 00:38:46,530 --> 00:38:47,460 >> KEVIN SCHMID: Oh, está bien. 784 00:38:47,460 --> 00:38:49,170 >> AUDIENCIA: ¿Está haciendo lo mismo cosa, entonces en este caso? 785 00:38:49,170 --> 00:38:52,630 >> KEVIN SCHMID: Así que la pregunta era básicamente, en una de las antiguas pruebas 786 00:38:52,630 --> 00:38:57,200 o algo así, había una pregunta que básicamente, si usted dice print f 10 787 00:38:57,200 --> 00:39:01,490 cosas a la vez y luego dormí como en el proceso de impresión de los cabo, 788 00:39:01,490 --> 00:39:04,850 al final, por alguna razón, lo haría simplemente volcar los todos fuera de la pantalla. 789 00:39:04,850 --> 00:39:06,740 Así que hay una especie de dos diferentes conceptos aquí. 790 00:39:06,740 --> 00:39:10,400 >> Así que supongo que una cosa es que, en este caso, estamos tratando con dos diferentes 791 00:39:10,400 --> 00:39:13,510 clase de gente que pide el servidor cosas al mismo tiempo. 792 00:39:13,510 --> 00:39:17,455 Y la razón de que el tipo de printf espera de esa manera y lo vuelca todo lo alto 793 00:39:17,455 --> 00:39:21,760 a la vez se relaciona más con cómo tipo de printf - 794 00:39:21,760 --> 00:39:25,100 Así que la forma printf es en realidad implementado es que, básicamente, tiene que 795 00:39:25,100 --> 00:39:28,850 hablar con el sistema operativo para escribir esas cosas a la consola. 796 00:39:28,850 --> 00:39:33,460 Por lo que no quiere hacer todo eso cosas inmediatamente cuando dices printf 797 00:39:33,460 --> 00:39:36,260 alguna cadena ya que podrían ser caro si tiene que 798 00:39:36,260 --> 00:39:37,340 hacer eso todo el tiempo. 799 00:39:37,340 --> 00:39:41,530 >> Así que si usted hace printf oye, su programa podría no imprimir realidad que 800 00:39:41,530 --> 00:39:43,040 inmediatamente a la consola. 801 00:39:43,040 --> 00:39:46,080 Se podría decir, OK, lo escribí. 802 00:39:46,080 --> 00:39:49,570 Y entonces especie de esperar a que le des un poco más antes de que realmente 803 00:39:49,570 --> 00:39:51,380 se escriben en la consola. 804 00:39:51,380 --> 00:39:54,040 >> Así que la razón de que ese era el caso - 805 00:39:54,040 --> 00:39:56,450 y es una especie de relación el sueño - 806 00:39:56,450 --> 00:40:00,060 es que el sueño era una especie de justo inyectado allí para demostrar la 807 00:40:00,060 --> 00:40:02,480 hecho de que no escribe sincrónicamente. 808 00:40:02,480 --> 00:40:06,210 Pero la razón de que es sólo rendimiento de modo que usted no tiene que 809 00:40:06,210 --> 00:40:08,920 hacer que muchos contactos a el sistema operativo. 810 00:40:08,920 --> 00:40:12,300 >> Pero aquí, lo que realmente estamos tratando de hacer con esta cosa de sueño es sólo espectáculo 811 00:40:12,300 --> 00:40:17,730 que cuando tenemos dos personas que visitan Este sitio web, que no va a poner 812 00:40:17,730 --> 00:40:22,310 en una línea en la que se va a decir Tengo que ayudar a usted y, a continuación, cuando estoy 813 00:40:22,310 --> 00:40:25,350 totalmente terminado ayudarle después de que éstos cinco segundos y luego me voy a 814 00:40:25,350 --> 00:40:26,750 pasar a la siguiente persona. 815 00:40:26,750 --> 00:40:29,515 Así que la petición de la primera persona no atar ese bucle de eventos 816 00:40:29,515 --> 00:40:31,610 si eso tiene sentido. 817 00:40:31,610 --> 00:40:34,980 >> Pero aquí es en realidad un ejemplo de algo que va a atar 818 00:40:34,980 --> 00:40:36,090 el bucle de eventos. 819 00:40:36,090 --> 00:40:39,130 Así que aquí está una función horrible calcular el n-ésimo de Fibonacci. 820 00:40:39,130 --> 00:40:43,510 Es, literalmente, la peor manera que pueda calcular el enésimo número de Fibonacci. 821 00:40:43,510 --> 00:40:48,480 Y esto es realmente sólo para reconocer de dónde salió, 822 00:40:48,480 --> 00:40:49,330 hay realmente - 823 00:40:49,330 --> 00:40:53,230 Quiero decir, usted puede tratar de ir a buscar a ella - pero hay como un muy largo el blog 824 00:40:53,230 --> 00:40:54,130 Post que alguien escribió. 825 00:40:54,130 --> 00:40:55,660 Es como una de esas cosas de Reddit. 826 00:40:55,660 --> 00:40:59,650 Pero alguien criticó Node.js y usaron esto como un ejemplo. 827 00:40:59,650 --> 00:41:03,700 Así que como que quería que usted acaba de mostrar dos diferentes perspectivas, para simplemente 828 00:41:03,700 --> 00:41:07,320 un conocimiento general de los conceptos detrás de estas dos cosas. 829 00:41:07,320 --> 00:41:13,050 >> Pero esta es elegido como sólo un horrible, computacionalmente horriblemente ineficiente 830 00:41:13,050 --> 00:41:15,940 de forma intensiva para calcular la enésimo número de Fibonacci. 831 00:41:15,940 --> 00:41:21,180 Así como una nota al margen, ¿por qué es es horrible como de una manera? 832 00:41:21,180 --> 00:41:23,210 Sip? 833 00:41:23,210 --> 00:41:25,130 >> AUDIENCIA: Digamos que usted comienza con 1000. 834 00:41:25,130 --> 00:41:27,050 1000 se divide en 999 y 998. 835 00:41:27,050 --> 00:41:28,970 Cada una de esta se divide en dos cosas. 836 00:41:28,970 --> 00:41:30,890 Cada una de esta se divide en dos cosas. 837 00:41:30,890 --> 00:41:31,355 >> KEVIN SCHMID: Así es. 838 00:41:31,355 --> 00:41:32,400 >> AUDIENCIA: Durante todo el camino hacia abajo. 839 00:41:32,400 --> 00:41:32,840 >> KEVIN SCHMID: Exactamente. 840 00:41:32,840 --> 00:41:37,330 Así que para repetir para la cámara, si llamar a fib sobre como 1000 o algo así 841 00:41:37,330 --> 00:41:41,810 así, no es, obviamente, menos de o igual a uno, así que voy a 842 00:41:41,810 --> 00:41:46,040 voy a este caso más, y luego me voy llamar a fib 999 plus fib 998. 843 00:41:46,040 --> 00:41:50,290 Y luego, más o menos todo eso trabajo que Fib 999 hace es 844 00:41:50,290 --> 00:41:52,950 tipo de a este nivel. 845 00:41:52,950 --> 00:41:55,620 Si usted va abajo, es aún más redundante que eso, pero si sólo 846 00:41:55,620 --> 00:42:01,390 creo fib computar 998 consigue nosotros muy cerca de la FIB 999. 847 00:42:01,390 --> 00:42:05,860 Así que realmente deberíamos ser un poco más inteligente acerca de la forma en que tipo de reutilizamos 848 00:42:05,860 --> 00:42:07,580 estos, pero no estamos reutilizando estas cosas en absoluto. 849 00:42:07,580 --> 00:42:11,860 Así que usted puede imaginar esta gigantesca, árbol gigantesco que es simplemente horrible. 850 00:42:11,860 --> 00:42:12,940 >> Pero de todos modos, está bien. 851 00:42:12,940 --> 00:42:14,040 Así que eso era mentira. 852 00:42:14,040 --> 00:42:15,530 Solo se necesita un tiempo para funcionar. 853 00:42:15,530 --> 00:42:16,510 Sip? 854 00:42:16,510 --> 00:42:17,760 >> AUDIENCIA: [inaudible]. 855 00:42:17,760 --> 00:42:20,430 856 00:42:20,430 --> 00:42:22,481 >> KEVIN SCHMID: Oh, ¿podrías repetir la pregunta? 857 00:42:22,481 --> 00:42:23,731 >> AUDIENCIA: [inaudible]. 858 00:42:23,731 --> 00:42:30,840 859 00:42:30,840 --> 00:42:33,990 >> KEVIN SCHMID: Oh así que esto es sólo el código eso va a ser una especie de sobre la 860 00:42:33,990 --> 00:42:34,850 lado del servidor. 861 00:42:34,850 --> 00:42:38,100 Así que esto no va a ser encontrado en el navegador o cualquier cosa. 862 00:42:38,100 --> 00:42:42,160 Es básicamente lo que tenemos es que cuando el usuario aquí más o menos marcas 863 00:42:42,160 --> 00:42:45,300 su petición de nuevo, cuando una especie de hacer una solicitud, vamos a llamar a 864 00:42:45,300 --> 00:42:47,040 esta función en el lado del servidor. 865 00:42:47,040 --> 00:42:50,480 Y luego vamos a llegar el resultado de nuevo de llamar a esa función. 866 00:42:50,480 --> 00:42:52,460 Y entonces sólo tendremos que imprimir al usuario. 867 00:42:52,460 --> 00:42:54,580 De modo que el usuario no tiene realmente tratar con esta función demasiado. 868 00:42:54,580 --> 00:42:57,270 >> No fue esa la pregunta? 869 00:42:57,270 --> 00:42:58,470 ¿Eso tiene sentido? 870 00:42:58,470 --> 00:42:58,810 Aceptar. 871 00:42:58,810 --> 00:43:00,930 Genial. 872 00:43:00,930 --> 00:43:04,240 >> Así que de nuevo, lo hacemos todo este res.writeHead cosa donde imprimimos 873 00:43:04,240 --> 00:43:05,150 la cabecera. 874 00:43:05,150 --> 00:43:09,730 Y entonces termino la respuesta al hacer el número mágico es fib 45. 875 00:43:09,730 --> 00:43:12,100 Así que vamos a ejecutar este servidor. 876 00:43:12,100 --> 00:43:15,190 Así que me voy a hacer un fib.js. Nodo 877 00:43:15,190 --> 00:43:17,340 Así que ahora mi servidor fib se está ejecutando. 878 00:43:17,340 --> 00:43:21,790 >> Y entonces aquí voy hacer una de estas. 879 00:43:21,790 --> 00:43:22,200 ¿De acuerdo? 880 00:43:22,200 --> 00:43:24,960 Así que sólo voy a decir, Curl. 881 00:43:24,960 --> 00:43:32,226 Así que va a tomar un poco de tiempo, pero espero que pronto va a terminar y 882 00:43:32,226 --> 00:43:35,660 se imprimirá que 45a Fibonacci número. 883 00:43:35,660 --> 00:43:36,910 >> AUDIENCIA: [inaudible]. 884 00:43:36,910 --> 00:43:40,720 885 00:43:40,720 --> 00:43:42,050 >> KEVIN SCHMID: debe conseguir hacer muy pronto. 886 00:43:42,050 --> 00:43:43,780 Por lo tanto, debe tomar de cinco a seis segundos. 887 00:43:43,780 --> 00:43:48,570 No sé que es sólo V8 ser super rápido, pero en cualquier caso, se trata de un 888 00:43:48,570 --> 00:43:52,700 ejemplo muy corto y propósito poco elegante de un no-trivial 889 00:43:52,700 --> 00:43:54,200 cálculo. 890 00:43:54,200 --> 00:43:56,700 Así que después de un tiempo, se pone esto. 891 00:43:56,700 --> 00:44:02,130 >> Pero ahora, ¿qué pasa si hago el mismo tipo de experimento como antes donde hago 892 00:44:02,130 --> 00:44:04,010 dos solicitudes al mismo tiempo? 893 00:44:04,010 --> 00:44:06,990 Así que aquí voy a un Curl en esa dirección, y voy 894 00:44:06,990 --> 00:44:08,260 hacer otra Curl. 895 00:44:08,260 --> 00:44:12,070 Y recuerde, cuando hicimos esto para la dormir servidor, al que básicamente teníamos que 896 00:44:12,070 --> 00:44:15,320 después de cinco segundos, que prácticamente tanto ambos regresaron a la derecha 897 00:44:15,320 --> 00:44:16,380 casi al mismo tiempo. 898 00:44:16,380 --> 00:44:18,650 Así que no fue particularmente atado. 899 00:44:18,650 --> 00:44:20,290 >> Pero vamos a intentarlo ahora. 900 00:44:20,290 --> 00:44:22,370 OK, así que nos dieron nuestros dos procesos. 901 00:44:22,370 --> 00:44:24,210 Recuerda esos son los identificadores de proceso. 902 00:44:24,210 --> 00:44:25,900 Esto va a ser un poco torpe, mientras que la parada. 903 00:44:25,900 --> 00:44:31,340 904 00:44:31,340 --> 00:44:35,360 Así que vamos a quedarnos aquí y esperar. 905 00:44:35,360 --> 00:44:37,090 >> Así que uno de ellos debe venir volver después de como - 906 00:44:37,090 --> 00:44:39,190 OK, así que uno regresó. 907 00:44:39,190 --> 00:44:43,570 Pero entonces ¿por qué no lo hizo el segundo uno viene de vuelta todavía? 908 00:44:43,570 --> 00:44:44,389 Sip? 909 00:44:44,389 --> 00:44:49,280 >> AUDIENCIA: El servidor no puede hacer nada mientras se está calculando que gran número. 910 00:44:49,280 --> 00:44:51,620 >> KEVIN SCHMID: Así es. 911 00:44:51,620 --> 00:44:55,395 Así que la respuesta fue simplemente que el servidor Realmente no se puede hacer nada mientras 912 00:44:55,395 --> 00:44:57,460 está calculando que el número de Fibonacci. 913 00:44:57,460 --> 00:44:59,360 Así que ahora acabo de recibir mis dos cosas de nuevo. 914 00:44:59,360 --> 00:45:03,210 Pero creo que sólo de pensar en el código un poco más, la forma en que está funcionando 915 00:45:03,210 --> 00:45:05,030 y todo. 916 00:45:05,030 --> 00:45:11,750 >> Así que esta función aquí es el código que Le he dicho a este servidor para ejecutar cuando se 917 00:45:11,750 --> 00:45:14,100 recibe una nueva petición entrante. 918 00:45:14,100 --> 00:45:17,940 Así que sólo va a correr a través de este Código de todo, y luego se va a ir 919 00:45:17,940 --> 00:45:21,120 atrás para el bucle de eventos y luego continuar la comprobación de nuevos eventos. 920 00:45:21,120 --> 00:45:23,670 Así que básicamente lo que hemos sucediendo es el servidor es 921 00:45:23,670 --> 00:45:25,080 escuchar cosas nuevas. 922 00:45:25,080 --> 00:45:28,070 La primera persona que pide lo 45 es. 923 00:45:28,070 --> 00:45:30,490 Corremos este código para computarla. 924 00:45:30,490 --> 00:45:33,420 Este código toma alrededor de cinco seis segundos para correr. 925 00:45:33,420 --> 00:45:36,990 Entonces volvemos al bucle de eventos y comprobar si hay nuevas solicitudes. 926 00:45:36,990 --> 00:45:42,700 >> Así que este es un ejemplo de cómo, si tienen cosas que son llamados compute 927 00:45:42,700 --> 00:45:48,140 obligado, o utilizar una gran cantidad de cómputo, no el poder, pero como son 928 00:45:48,140 --> 00:45:50,260 computacionalmente intensivas - 929 00:45:50,260 --> 00:45:54,080 Creo que una cosa que decir acerca de esto es que esta función está haciendo totalmente, 930 00:45:54,080 --> 00:45:56,310 en su mayor parte, bastante utilidad derecho del trabajo. 931 00:45:56,310 --> 00:45:59,970 Durante todo el tiempo que dicha devolución de llamada función corría, era bastante 932 00:45:59,970 --> 00:46:03,670 gastar mucho más de su tiempo sólo computing número que Fibonacci nth. 933 00:46:03,670 --> 00:46:05,930 >> Pero sólo teníamos un hilo de tratar. 934 00:46:05,930 --> 00:46:10,270 En el modelo de Apache, cuando dos personas hecho la solicitud para obtener fib 45, es 935 00:46:10,270 --> 00:46:11,610 habría tenido dos temas diferentes. 936 00:46:11,610 --> 00:46:15,060 Y entonces el trabajo del sistema operativo Habría sido, o el nivel de usuario 937 00:46:15,060 --> 00:46:18,660 código que maneja los hilos, hubiera sido la de cortar que hasta en el 938 00:46:18,660 --> 00:46:23,060 CPU, o incluso si usted tenía varias CPU, distribuir de manera uniforme a través de la CPU 939 00:46:23,060 --> 00:46:26,130 por lo que ambos estaban acabados más o menos al mismo tiempo. 940 00:46:26,130 --> 00:46:31,120 >> Así que para mostrar cómo podemos clasificar de - y esto no es un perfecto totales 941 00:46:31,120 --> 00:46:34,280 solución, pero algo de lo que podamos hacer un volver aquí y hacer 942 00:46:34,280 --> 00:46:35,880 un poco mejor. 943 00:46:35,880 --> 00:46:41,540 Así que lo que tenemos aquí es un programa que se llama Fib C. Y esto utiliza básicamente 944 00:46:41,540 --> 00:46:45,690 otro de los módulos de nodo llamado El módulo de proceso hijo. 945 00:46:45,690 --> 00:46:49,210 Así que he incluido en la clase superior de como me gustaría hacer una libra incluir 946 00:46:49,210 --> 00:46:51,230 process.h niño o algo así. 947 00:46:51,230 --> 00:46:56,210 Ahora tengo acceso a esta variable CP que tiene todo mi funcionalidad. 948 00:46:56,210 --> 00:47:01,810 >> Así que ahora lo que estoy haciendo en esta respuesta handler es que estoy corriendo este programa 949 00:47:01,810 --> 00:47:04,100 dot slash fib 45. 950 00:47:04,100 --> 00:47:06,820 Así que lo que he hecho - y yo sólo voy para salir de este programa por un 951 00:47:06,820 --> 00:47:07,620 poco - 952 00:47:07,620 --> 00:47:11,060 es que me he escrito un programa en C que básicamente calcula la 953 00:47:11,060 --> 00:47:12,630 enésimo número de Fibonacci. 954 00:47:12,630 --> 00:47:15,960 Así que aquí es sólo un programa que he escrito en C que calcula esto. 955 00:47:15,960 --> 00:47:19,040 Puedo compilarlo, y puedo correr que en la línea de comandos. 956 00:47:19,040 --> 00:47:22,150 Y se va a calcular el Número 45a Fibonacci. 957 00:47:22,150 --> 00:47:24,510 >> Entonces notó que sólo toma más o menos como siempre. 958 00:47:24,510 --> 00:47:28,240 Probablemente podría haber utilizado el tablero 03 a optimizarlo o algo así, 959 00:47:28,240 --> 00:47:31,050 pero yo sólo hice como normal configuración del compilador. 960 00:47:31,050 --> 00:47:33,260 Y lo imprime. 961 00:47:33,260 --> 00:47:36,830 >> Pero ahora, ¿qué estoy haciendo especie de? 962 00:47:36,830 --> 00:47:39,800 Oh, lo siento, archivo incorrecto. 963 00:47:39,800 --> 00:47:42,800 Así que hago lo mismo con la cabecera como antes. 964 00:47:42,800 --> 00:47:45,780 Entonces hago esto cp.exec. 965 00:47:45,780 --> 00:47:49,460 Así que lo que esto va a hacer es que está va a ejecutar este programa. 966 00:47:49,460 --> 00:47:51,960 Pero la forma en que esto funciona es que que no va a esperar a que 967 00:47:51,960 --> 00:47:53,400 ese programa hasta el final. 968 00:47:53,400 --> 00:47:56,000 Simplemente dice básicamente ejecutar este programa. 969 00:47:56,000 --> 00:47:58,700 Así que, básicamente, escribir lo siguiente en el símbolo del sistema de tipo de. 970 00:47:58,700 --> 00:48:02,350 >> Y luego, cuando hayas terminado con ella, ejecutar esta función. 971 00:48:02,350 --> 00:48:04,800 Así que ahora que tipo de conseguir este Todo restaurado de 972 00:48:04,800 --> 00:48:06,750 como que no estamos esperando. 973 00:48:06,750 --> 00:48:08,530 ¿Ese tipo de sentido? 974 00:48:08,530 --> 00:48:08,990 Sip? 975 00:48:08,990 --> 00:48:11,060 >> AUDIENCIA: [inaudible]? 976 00:48:11,060 --> 00:48:13,610 >> KEVIN SCHMID: Así que esto va a abrir un nuevo proceso para hacerlo. 977 00:48:13,610 --> 00:48:19,310 Así que esto es en realidad, en algunos aspectos, mal, no muy mal, pero es 978 00:48:19,310 --> 00:48:22,990 importante decir que esto es una especie de que se remonta a, por un lado, el Apache 979 00:48:22,990 --> 00:48:26,450 modelo en el que hacemos las discusiones y procesos Para cada solicitud o 980 00:48:26,450 --> 00:48:29,280 procesos para cada solicitud. 981 00:48:29,280 --> 00:48:32,090 Así que esto es una especie de análogo a lo que hace Apache. 982 00:48:32,090 --> 00:48:35,110 En algunos casos, se acaba de utilizar una nueva hilo, que es un poco más de luz 983 00:48:35,110 --> 00:48:39,040 peso que un proceso, pero Apache podría terminar bifurcar un nuevo proceso 984 00:48:39,040 --> 00:48:43,370 que es una especie de lo que hacemos aquí implícitamente haciendo punto fib barra 45. 985 00:48:43,370 --> 00:48:48,690 >> Y entonces en ese caso, que tipo de incurrimos los mismos gastos de procesos. 986 00:48:48,690 --> 00:48:50,710 Así que esto es sólo una cosa que puedes hacer. 987 00:48:50,710 --> 00:48:52,600 Pero sólo para mostrar este tipo de carrera. 988 00:48:52,600 --> 00:48:57,120 Y esta charla es simplemente muy dirigido a presentando este tipo de programas como 989 00:48:57,120 --> 00:49:00,710 manera de mostrar diferentes perspectivas sobre cómo diseñar servidores así. 990 00:49:00,710 --> 00:49:08,300 Así que esto está en marcha, y entonces ahora si lo hago esta vez, tengo dos identificadores de proceso. 991 00:49:08,300 --> 00:49:10,320 >> Vamos a hablar de cosas que señalan. 992 00:49:10,320 --> 00:49:11,980 Así que notan que son de forma incremental. 993 00:49:11,980 --> 00:49:12,700 Eso está bien. 994 00:49:12,700 --> 00:49:15,140 Porque era 27.122 antes. 995 00:49:15,140 --> 00:49:18,580 Pero noten ahora, se volvió más o menos al mismo tiempo. 996 00:49:18,580 --> 00:49:23,960 >> Y ahora, una buena pregunta para preguntar acerca de por eso fue que el caso es, cuyo trabajo 997 00:49:23,960 --> 00:49:27,590 era ahora para hacer una especie de estas cosas tipo de jugar limpio con cada 998 00:49:27,590 --> 00:49:31,350 otras, estas dos instancias de dot fib barra 45 que corrí 999 00:49:31,350 --> 00:49:32,880 o que corrió Nodo? 1000 00:49:32,880 --> 00:49:36,940 Quién especie de hace justo que ambos conseguir especie de equilibrio en tiempo de ejecución? 1001 00:49:36,940 --> 00:49:42,900 1002 00:49:42,900 --> 00:49:44,220 >> AUDIENCIA: [inaudible]. 1003 00:49:44,220 --> 00:49:44,620 >> KEVIN SCHMID: Si. 1004 00:49:44,620 --> 00:49:49,740 Así que, básicamente, cuando lo hago fib slash dot 45 o algo así, ahora es el 1005 00:49:49,740 --> 00:49:53,750 tipo de hasta el sistema operativo para manejar el tiempo de ejecución de dichos programas. 1006 00:49:53,750 --> 00:49:56,920 Y ahora se puede programarlas en diferentes CPUs o 1007 00:49:56,920 --> 00:49:58,330 puede programarlas. 1008 00:49:58,330 --> 00:50:01,870 Se puede cortar a la vez que uno CPU recibe o que reciban 1009 00:50:01,870 --> 00:50:03,330 para ejecutarse en una CPU. 1010 00:50:03,330 --> 00:50:05,620 Así que esa es la idea detrás de eso. 1011 00:50:05,620 --> 00:50:07,220 ¿Eso tiene sentido para todo el mundo? 1012 00:50:07,220 --> 00:50:10,950 Así que ahora nodo no está realmente jugando un participar en dividir estas tareas. 1013 00:50:10,950 --> 00:50:12,200 Aceptar. 1014 00:50:12,200 --> 00:50:14,050 1015 00:50:14,050 --> 00:50:17,840 >> Así que eso es casi lo de ejemplos. 1016 00:50:17,840 --> 00:50:23,370 Sólo quería mostrar una cosa más porque mucho de esto ha sido hasta ahora 1017 00:50:23,370 --> 00:50:27,350 no totalmente práctico estupendo en algunos casos. 1018 00:50:27,350 --> 00:50:30,970 Me puedo imaginar volver a casa después de esta hablar y algo y diciendo como, 1019 00:50:30,970 --> 00:50:35,710 así que tipo de levanté de la que habla de que Puedo hacer que un servidor de Fibonacci 1020 00:50:35,710 --> 00:50:37,360 mi proyecto final. 1021 00:50:37,360 --> 00:50:40,770 Así que aquí es sólo una especie de un ejemplo más que se espera que sea - 1022 00:50:40,770 --> 00:50:44,620 tal vez no, pero a lo mejor - un poco más tipo de interés para proyectos fin de carrera y 1023 00:50:44,620 --> 00:50:46,440 pensando en el futuro de ese tipo de cosas. 1024 00:50:46,440 --> 00:50:48,870 >> Así que esto es chat.js. 1025 00:50:48,870 --> 00:50:52,290 Así que esto es como la clase de alguna muestra código del lado del servidor que se puede utilizar para 1026 00:50:52,290 --> 00:50:55,700 establecer un pequeño servidor de chat como usted pudo haber visto en el 1027 00:50:55,700 --> 00:50:56,630 Facebook Chat o lo que sea. 1028 00:50:56,630 --> 00:50:59,990 Así que no estoy diciendo que esto es como Facebook Chatea, pero esto es una especie de 1029 00:50:59,990 --> 00:51:06,230 como una buena - tal vez no es bueno, pero tal vez punto de partida para una charla - buena 1030 00:51:06,230 --> 00:51:08,560 servidor para su sitio web para un proyecto final. 1031 00:51:08,560 --> 00:51:11,040 Así que echemos un vistazo a lo que está haciendo. 1032 00:51:11,040 --> 00:51:15,500 >> Así que estamos consiguiendo esta cosa especial en la parte superior, esta var SIO 1033 00:51:15,500 --> 00:51:17,050 iguales requiere Socket.IO. 1034 00:51:17,050 --> 00:51:20,280 Así que esto es otra cosa que no es así en realidad vienen incluido con 1035 00:51:20,280 --> 00:51:22,300 Nodo pero puede instalarlo. 1036 00:51:22,300 --> 00:51:23,480 Es un módulo de nodo. 1037 00:51:23,480 --> 00:51:25,670 Así es como algunos extensión a nodo. 1038 00:51:25,670 --> 00:51:29,220 >> SocketIO es realmente muy una especie de fresco. 1039 00:51:29,220 --> 00:51:32,550 Es una abstracción que, básicamente, lo que lo que hace es es lo que permite a 1040 00:51:32,550 --> 00:51:35,770 tener este flujo de comunicación entre una tela 1041 00:51:35,770 --> 00:51:39,430 navegador y un servidor web. 1042 00:51:39,430 --> 00:51:45,250 Así que en su mayor parte hasta ahora, hemos tenido estas muy rápida de un segundo o dos 1043 00:51:45,250 --> 00:51:48,790 segundas comunicaciones entre una red navegador y el servidor web. 1044 00:51:48,790 --> 00:51:53,310 Así que es básicamente ir a google.com, get las cosas, enviarlo de vuelta, y luego 1045 00:51:53,310 --> 00:51:53,770 hemos terminado. 1046 00:51:53,770 --> 00:51:56,560 Nunca vamos a hablar de nuevo hasta que el usuario escribe en otra cosa. 1047 00:51:56,560 --> 00:52:01,090 >> Pero, ¿qué Socket.IO y el mismo tipo de cosas - y SocketIO es en realidad uno 1048 00:52:01,090 --> 00:52:03,940 de las cosas que se construyen sobre como WebSocket que es una especie de disposición 1049 00:52:03,940 --> 00:52:06,440 como parte de HTML5 - 1050 00:52:06,440 --> 00:52:09,620 que le permite tener esta diálogo continuo. 1051 00:52:09,620 --> 00:52:13,990 Y esto es muy útil en un servidor de chat tipo de cosas, ya que es 1052 00:52:13,990 --> 00:52:17,390 algo así como un diálogo continuo en alguna manera, porque si usted está conversando 1053 00:52:17,390 --> 00:52:21,540 con alguien, ahora puede simplemente enviar un mensaje por el tubo, y a continuación, la 1054 00:52:21,540 --> 00:52:23,940 servidor puede enviar un mensaje por la tubería a la otra persona que está 1055 00:52:23,940 --> 00:52:24,520 charlando con. 1056 00:52:24,520 --> 00:52:26,903 Y entonces usted puede tener esta intercambiar así. 1057 00:52:26,903 --> 00:52:30,590 1058 00:52:30,590 --> 00:52:32,850 >> Así que eso es algo de lo que SocketIO es bueno para. 1059 00:52:32,850 --> 00:52:38,400 La razón de que SocketIO utiliza WebSockets como una cosa es que en 1060 00:52:38,400 --> 00:52:43,980 Además de WebSockets simplemente viejos, también hace algunos trucos para, básicamente, 1061 00:52:43,980 --> 00:52:45,610 compatibilizar navegador ella. 1062 00:52:45,610 --> 00:52:50,040 Así navegadores como Internet Explorer por desgracia no son compatibles con WebSockets 1063 00:52:50,040 --> 00:52:50,810 nada más sacarlo de la caja. 1064 00:52:50,810 --> 00:52:55,290 Por lo tanto, utiliza algún otro tipo de fresco limpio cosas con Adobe Flash para permitir 1065 00:52:55,290 --> 00:52:57,170 que tenga el apoyo de todos navegador. 1066 00:52:57,170 --> 00:52:58,800 Así que es realmente útil. 1067 00:52:58,800 --> 00:53:02,440 >> Y, de hecho, sé que soy una especie de que se ejecuta en el tiempo aquí, pero CS50 1068 00:53:02,440 --> 00:53:08,490 Discutir, ¿alguna vez has visto algo como, no sé, en blanco y así es 1069 00:53:08,490 --> 00:53:11,030 respondiendo a este mensaje o algo así, esa característica? 1070 00:53:11,030 --> 00:53:12,250 Eso es SocketIO. 1071 00:53:12,250 --> 00:53:15,580 Así que cuando alguien empieza a escribir en la cuadro de discutir para hacer una réplica o 1072 00:53:15,580 --> 00:53:20,040 algo, su navegador no lo es llamada en SocketIO emite algún tipo de 1073 00:53:20,040 --> 00:53:22,660 caso de que dice que hay alguien responder a este mensaje. 1074 00:53:22,660 --> 00:53:26,110 >> A continuación, el servidor dice, OK, ¿qué tengo que hacer? 1075 00:53:26,110 --> 00:53:29,270 Bueno, ahora tengo que decir a esos otros chicos que están en CS50 Discuta buscando 1076 00:53:29,270 --> 00:53:31,170 en este post que alguien está respondiendo. 1077 00:53:31,170 --> 00:53:34,190 Así que eso es algo de lo que es SocketIO bueno para este tipo de continuación de 1078 00:53:34,190 --> 00:53:35,930 corriente de diálogo. 1079 00:53:35,930 --> 00:53:37,250 Aceptar. 1080 00:53:37,250 --> 00:53:40,060 >> Así que lo que tengo aquí - y estamos justo va a hacer caso omiso de la matriz conexiones 1081 00:53:40,060 --> 00:53:41,390 para un poco - 1082 00:53:41,390 --> 00:53:43,080 lo que hago es que no escucho otra. 1083 00:53:43,080 --> 00:53:46,880 Así que eso es sólo la forma en Socket.IO se diciendo vamos a escuchar en este puerto. 1084 00:53:46,880 --> 00:53:50,060 Y entonces hago esto en la conexión. 1085 00:53:50,060 --> 00:53:53,360 Así que eso es básicamente Socket IO de manera de decir, cuando recibimos una 1086 00:53:53,360 --> 00:53:55,840 conexión, quiero que para ejecutar este código. 1087 00:53:55,840 --> 00:53:59,870 >> Y darse cuenta de que en lugar de tener rec res y pasaron allí tengo Socket. 1088 00:53:59,870 --> 00:54:03,260 Y esta idea es, básicamente, este zócalo cosa que se puede escribir y leer 1089 00:54:03,260 --> 00:54:05,750 de que tiene el usuario de mensajes, posiblemente. 1090 00:54:05,750 --> 00:54:10,700 Y los mensajes que usted envíe puede pasar por eso Socket. 1091 00:54:10,700 --> 00:54:12,140 ¿Eso tiene sentido? 1092 00:54:12,140 --> 00:54:14,490 Así que es esta cosa de continuar. 1093 00:54:14,490 --> 00:54:17,820 >> Así que lo que hago es que llamo Socket.emit. 1094 00:54:17,820 --> 00:54:20,330 Y emiten menos toma el mucho dos argumentos. 1095 00:54:20,330 --> 00:54:24,100 El primer argumento es una cadena sólo representa el tipo de 1096 00:54:24,100 --> 00:54:25,270 Lo que está emitiendo. 1097 00:54:25,270 --> 00:54:28,120 Así que para este caso, no tengo uso este nuevo mensaje de cadena. 1098 00:54:28,120 --> 00:54:32,670 Y eso es sólo básicamente diciendo que el tipo de esta cosa, lo que estoy 1099 00:54:32,670 --> 00:54:34,750 el envío, es un nuevo mensaje. 1100 00:54:34,750 --> 00:54:38,460 Para que pueda escuchar para tipos específicos como un nuevo mensaje o lo que sea 1101 00:54:38,460 --> 00:54:39,960 mediante el uso de punto en. 1102 00:54:39,960 --> 00:54:44,570 >> Así que la conexión y el usuario enviados allí, si nos fijamos en donde llamamos punto en, 1103 00:54:44,570 --> 00:54:48,150 los otros son cadenas que representan tipos de mensajes de usuario. 1104 00:54:48,150 --> 00:54:52,060 Por lo que es, básicamente, que puede tener este emit uno de estos tipos de mensajes, y 1105 00:54:52,060 --> 00:54:55,520 a continuación, hacer algo en respuesta a uno de estos tipos de mensajes 1106 00:54:55,520 --> 00:54:57,640 >> Así que estoy emitiendo este nuevo mensaje. 1107 00:54:57,640 --> 00:55:00,540 Vamos a ignorar connections.push por un segundo. 1108 00:55:00,540 --> 00:55:03,360 Pero entonces yo digo, envió usuario Socket.on. 1109 00:55:03,360 --> 00:55:07,540 Así que ahora es un poco como cuando el usuario me envía un mensaje, quiero 1110 00:55:07,540 --> 00:55:09,240 ejecutar este código. 1111 00:55:09,240 --> 00:55:12,080 Y darse cuenta de que esa función anónima está teniendo en esta variable 1112 00:55:12,080 --> 00:55:16,300 llamada de datos que es básicamente van tener de mensajes del usuario. 1113 00:55:16,300 --> 00:55:20,700 >> Así que ahora vamos a tipo de conversación sobre la matriz de conexiones. 1114 00:55:20,700 --> 00:55:24,590 Así que esto está diseñado para un cliente de chat donde básicamente todo el mundo es una especie de en 1115 00:55:24,590 --> 00:55:25,950 la misma sala de chat. 1116 00:55:25,950 --> 00:55:29,640 Así que, básicamente, lo que necesitamos para mantener alrededor de una cierta matriz que básicamente 1117 00:55:29,640 --> 00:55:33,170 representa a todas las personas en el chat en De alguna manera, si eso tiene sentido. 1118 00:55:33,170 --> 00:55:33,340 ¿Cierto? 1119 00:55:33,340 --> 00:55:37,190 Porque tenemos que saber quiénes son esos chicos somos así que los podemos enviar los mensajes 1120 00:55:37,190 --> 00:55:39,140 que otras personas nos envían. 1121 00:55:39,140 --> 00:55:44,440 >> Así que lo que este código hace es cuando el usuario envía un mensaje - que es el tipo de 1122 00:55:44,440 --> 00:55:45,300 el evento - 1123 00:55:45,300 --> 00:55:47,120 vamos a ejecutar este código. 1124 00:55:47,120 --> 00:55:51,240 Y lo que hacemos es que corremos a través de este matriz que hemos llamado las conexiones. 1125 00:55:51,240 --> 00:55:54,390 Y más o menos para cada conexión excepto el que es nuestro, eso es 1126 00:55:54,390 --> 00:55:59,520 lo que dice el código, enviamos una nueva mensaje con ese mensaje adjunto 1127 00:55:59,520 --> 00:56:01,210 información. 1128 00:56:01,210 --> 00:56:04,880 >> Así que si usted nota aquí, lo que hice cuando el usuario realmente hace que un nuevo 1129 00:56:04,880 --> 00:56:08,560 conexión es que he añadido a la Método JavaScript.push, esto es 1130 00:56:08,560 --> 00:56:12,100 básicamente diciendo como agregar que Zócalo como un valor en 1131 00:56:12,100 --> 00:56:13,900 nuestra gama de conexiones. 1132 00:56:13,900 --> 00:56:20,560 Así que ahora cuando se ejecuta este código, lo hará enviar cosas a aquellos particulares 1133 00:56:20,560 --> 00:56:22,020 conexiones. 1134 00:56:22,020 --> 00:56:26,980 Así que este puede ser un buen punto de partida para la fabricación de un servidor de chat 1135 00:56:26,980 --> 00:56:28,250 o algo similar. 1136 00:56:28,250 --> 00:56:33,315 >> Y el tipo de cosa interesante es que la código que ves aquí como en y 1137 00:56:33,315 --> 00:56:36,390 emiten y cosas por el estilo es el mismo tipo de código JavaScript que lo haría 1138 00:56:36,390 --> 00:56:39,260 escribir en el navegador para interactuar con el servidor. 1139 00:56:39,260 --> 00:56:42,480 Así que por eso SocketIO es una especie de ordenada y útil de esa manera. 1140 00:56:42,480 --> 00:56:45,680 1141 00:56:45,680 --> 00:56:49,250 >> Ah, y una cosa más bien rápido. 1142 00:56:49,250 --> 00:56:55,970 Hubo un proyecto final CS50 año pasado que básicamente implementaron una charla 1143 00:56:55,970 --> 00:56:57,840 servidor en Node.js. 1144 00:56:57,840 --> 00:57:01,350 Creo que es Harvardchats.org pero no estoy - 1145 00:57:01,350 --> 00:57:02,940 Aceptar. 1146 00:57:02,940 --> 00:57:06,190 No estoy seguro de lo que el URL es, pero Puedo enviar eso después. 1147 00:57:06,190 --> 00:57:09,260 Pero es una especie de fresco lo que puede hacer con Node.js. 1148 00:57:09,260 --> 00:57:14,680 >> Así que espero que, en general, ustedes tienen una buen sentido de lo Node.js es útil 1149 00:57:14,680 --> 00:57:17,870 y cómo se podría aplicar tal a su proyecto final. 1150 00:57:17,870 --> 00:57:21,050 Estaré enviando hacia fuera mayor recursos a lo largo de esta. 1151 00:57:21,050 --> 00:57:23,170 Y gracias por venir. 1152 00:57:23,170 --> 00:57:23,610 Gracias. 1153 00:57:23,610 --> 00:57:27,168 >> [Aplausos]