1 00:00:00,000 --> 00:00:08,350 2 00:00:08,350 --> 00:00:09,710 >> KEVIN SCHMID: Olá a todos. 3 00:00:09,710 --> 00:00:12,640 Bem-vindo ao seminário CS50 em Node.js. 4 00:00:12,640 --> 00:00:13,955 Meu nome é Kevin. 5 00:00:13,955 --> 00:00:15,580 Eu sou um TF CS50. 6 00:00:15,580 --> 00:00:17,650 E eu sou uma espécie de como realmente animado sobre este seminário. 7 00:00:17,650 --> 00:00:20,430 Acho Node.js é muito legal. 8 00:00:20,430 --> 00:00:24,200 Espero que este seminário podem ser usados como uma boa, eu acho, trampolim para 9 00:00:24,200 --> 00:00:26,380 alguns de seus projetos finais, se você está interessado em usar 10 00:00:26,380 --> 00:00:27,630 algo como Node.js. 11 00:00:27,630 --> 00:00:29,770 12 00:00:29,770 --> 00:00:33,320 >> Vamos espécie de iniciar o seminário fora por falando apenas de um pouco do 13 00:00:33,320 --> 00:00:36,970 tipo de escalabilidade fundo perspectivas de Node.js e, em seguida 14 00:00:36,970 --> 00:00:39,240 vamos passar a alguns exemplos de código. 15 00:00:39,240 --> 00:00:42,340 E eu vou ter o código em um site, e você pode olhar para o código. 16 00:00:42,340 --> 00:00:45,475 E após o seminário, eu vou tipo de conversa sobre como você pode configurar o Node.js 17 00:00:45,475 --> 00:00:48,220 em seu computador. 18 00:00:48,220 --> 00:00:48,710 >> OK. 19 00:00:48,710 --> 00:00:49,760 Então, vamos começar. 20 00:00:49,760 --> 00:00:53,700 Então, eu acho que eu só quero falar sobre servidores web, de verdade, pela primeira vez. 21 00:00:53,700 --> 00:00:59,730 E para começar essa discussão, têm basicamente um diagrama que é de 22 00:00:59,730 --> 00:01:04,269 o livro didático utilizado para CS61, que basicamente mostra a interacção 23 00:01:04,269 --> 00:01:08,510 entre um processo cliente, como o seu web browser ou como o seu cliente alvo ou 24 00:01:08,510 --> 00:01:11,340 algo parecido, e um servidor web. 25 00:01:11,340 --> 00:01:15,150 Portanto, este tipo de parecido com o imagem que você viu na palestra sobre 26 00:01:15,150 --> 00:01:19,270 Quarta-feira, onde, basicamente, temos alguns processo do cliente, como o Google Chrome. 27 00:01:19,270 --> 00:01:22,980 >> E, em seguida, o primeiro passo é a cliente envia uma solicitação. 28 00:01:22,980 --> 00:01:27,510 Então isso pode ser algo como Bem, vamos visitar, eu não sei, CS50.net. 29 00:01:27,510 --> 00:01:29,320 Então, nós emitir esse pedido. 30 00:01:29,320 --> 00:01:34,280 E será que alguém se lembra do nome do o protocolo que especifica como que 31 00:01:34,280 --> 00:01:35,610 pedido deve ser estruturada? 32 00:01:35,610 --> 00:01:36,382 Yep. 33 00:01:36,382 --> 00:01:37,650 >> AUDIÊNCIA: [inaudível]. 34 00:01:37,650 --> 00:01:38,150 >> KEVIN SCHMID: Exatamente. 35 00:01:38,150 --> 00:01:40,100 Então, é como HTTP, certo? 36 00:01:40,100 --> 00:01:44,720 Então, basicamente, a especificação de como esse pedido deve realmente ser estabelecidas 37 00:01:44,720 --> 00:01:47,450 fora, porque no fim do dia, esse pedido é realmente apenas como um 38 00:01:47,450 --> 00:01:50,240 string que basicamente diz que eu quero isso. 39 00:01:50,240 --> 00:01:53,580 E a especificação para isso é HTTP. 40 00:01:53,580 --> 00:01:55,270 Então, isso é como um protocolo. 41 00:01:55,270 --> 00:01:57,920 >> Então o servidor recebe esse pedido. 42 00:01:57,920 --> 00:02:01,610 Então, vocês têm um servidor web instalado no aparelho CS50. 43 00:02:01,610 --> 00:02:02,460 É Apache. 44 00:02:02,460 --> 00:02:06,230 E esta semana, quando você trabalha em problema definir sete, você vai realmente estar trabalhando 45 00:02:06,230 --> 00:02:08,160 com o servidor web. 46 00:02:08,160 --> 00:02:12,380 Então, o servidor recebe o pedido, e então ele tem uma espécie de arranhar sua 47 00:02:12,380 --> 00:02:15,090 cabeça e dizer, como bem o que eu faço com isso? 48 00:02:15,090 --> 00:02:20,060 >> Assim, com base no que ele decide fazer, em seguida, pode entrar em contato com algum tipo 49 00:02:20,060 --> 00:02:20,730 de recurso. 50 00:02:20,730 --> 00:02:23,700 E esse recurso pode ser um monte de coisas diferentes. 51 00:02:23,700 --> 00:02:26,810 Por um lado, pode ser apenas como um arquivo HTML estático. 52 00:02:26,810 --> 00:02:29,820 Assim, poderia ser como alguns HTML que é como para 53 00:02:29,820 --> 00:02:31,100 seu site pessoal. 54 00:02:31,100 --> 00:02:35,360 Pode ser um arquivo estático como uma imagem ou como um filme que você tem. 55 00:02:35,360 --> 00:02:37,660 Poderia até ter que falar a algum tipo de banco de dados 56 00:02:37,660 --> 00:02:39,530 como um banco de dados MySQL. 57 00:02:39,530 --> 00:02:43,910 Por isso, nem sempre tem de se comunicar com um recurso, mas em 58 00:02:43,910 --> 00:02:45,700 alguns casos, poderia. 59 00:02:45,700 --> 00:02:47,800 >> Então o que ele vai fazer depois disso é que vai 60 00:02:47,800 --> 00:02:49,430 enviar de volta a resposta. 61 00:02:49,430 --> 00:02:53,130 E a resposta para isso é também especificado por HTTP. 62 00:02:53,130 --> 00:02:54,830 Então o cliente pode receber. 63 00:02:54,830 --> 00:02:56,740 Ele pode rasgá-la e processá-la. 64 00:02:56,740 --> 00:03:00,900 E então você tem uma página web como o Google ou CS50.net ou 65 00:03:00,900 --> 00:03:02,240 tudo o que você foi. 66 00:03:02,240 --> 00:03:03,100 OK? 67 00:03:03,100 --> 00:03:06,080 >> Portanto, esta é a interação básica que vamos estar lidando. 68 00:03:06,080 --> 00:03:08,770 E nós estamos muito bonito vai ser focar esta parte do 69 00:03:08,770 --> 00:03:10,640 interacção, o servidor. 70 00:03:10,640 --> 00:03:10,990 OK. 71 00:03:10,990 --> 00:03:12,210 Legal. 72 00:03:12,210 --> 00:03:15,500 Alguém tem alguma pergunta? 73 00:03:15,500 --> 00:03:17,720 OK. 74 00:03:17,720 --> 00:03:22,430 >> Então, como dissemos, o servidor web recebe esta solicitação HTTP e, em seguida, emite o presente 75 00:03:22,430 --> 00:03:24,760 Resposta HTTP. 76 00:03:24,760 --> 00:03:29,100 E, como falamos antes, o Servidor web aparelho CS50 é o Apache. 77 00:03:29,100 --> 00:03:32,490 Então, quando vocês trabalham em P definir sete, você vai estar trabalhando com o 78 00:03:32,490 --> 00:03:34,120 Um servidor Apache. 79 00:03:34,120 --> 00:03:37,890 Você nunca vai ter que realmente funcionam com Apache diretamente demais. 80 00:03:37,890 --> 00:03:41,920 Você espécie de configurar o Apache um pouco quando você especificar os hosts virtuais ou 81 00:03:41,920 --> 00:03:44,970 os anfitriões v, e nós vamos chegar para que, em um pouco. 82 00:03:44,970 --> 00:03:50,620 >> Mas, basicamente, o servidor web Apache configurado para funcionar com o tipo PHP 83 00:03:50,620 --> 00:03:51,730 de fora da caixa. 84 00:03:51,730 --> 00:03:56,170 Então, o que realmente acontece é que quando você vai a um de seus sites, como, por exemplo, 85 00:03:56,170 --> 00:04:00,360 index.php barra locais de acolhimento ou algo assim, é o seu navegador envia que 86 00:04:00,360 --> 00:04:04,330 pedido, e, em seguida, o Apache está sentado lá e descobre que fazer com ele. 87 00:04:04,330 --> 00:04:08,840 E a ação é executar esse código no index.php e 88 00:04:08,840 --> 00:04:11,330 em seguida, enviá-lo de volta. 89 00:04:11,330 --> 00:04:15,640 Portanto, não é isso. 90 00:04:15,640 --> 00:04:16,980 Então nós meio que conversamos sobre isso. 91 00:04:16,980 --> 00:04:21,990 Assim, poderia servir apenas um arquivo estático ou executar algum código PHP e, em seguida, questão 92 00:04:21,990 --> 00:04:23,510 a resposta. 93 00:04:23,510 --> 00:04:27,670 >> Então uma pergunta comum que pode vir se é assim, como é que vamos realmente lidam 94 00:04:27,670 --> 00:04:31,750 com ter vários usuários ao mesmo tempo? 95 00:04:31,750 --> 00:04:36,930 Então, imagine se você estivesse escrevendo uma web servidor, se você tivesse um servidor web que 96 00:04:36,930 --> 00:04:39,900 que estava a tentar escrever em algo como C ou algo assim, 97 00:04:39,900 --> 00:04:45,150 basicamente, você pode pensar sobre como lá poderia ser algum tipo de código que 98 00:04:45,150 --> 00:04:49,330 iria receber o pedido, mas, em seguida, ele tem que fazer todo esse trabalho sobre ele. 99 00:04:49,330 --> 00:04:53,060 Ele pode ter, por exemplo, contactar o banco de dados ou algo parecido. 100 00:04:53,060 --> 00:04:53,300 Certo? 101 00:04:53,300 --> 00:04:56,010 E então ele iria fazer esse tipo de processamento e, em seguida, 102 00:04:56,010 --> 00:04:57,060 enviado de volta a resposta. 103 00:04:57,060 --> 00:04:58,950 Então, isso é como a alta visão geral nível. 104 00:04:58,950 --> 00:05:04,210 >> Mas não é imediatamente óbvio como você pode fazer isso de modo que duas pessoas ou 105 00:05:04,210 --> 00:05:09,040 até 1.000 pessoas poderiam trabalhar com o seu servidor web, ao mesmo tempo. 106 00:05:09,040 --> 00:05:14,880 Portanto, a solução que o Apache usa é chamado de fios ou processos. 107 00:05:14,880 --> 00:05:16,770 Então você pode ter ouvido de estes termos antes. 108 00:05:16,770 --> 00:05:22,190 Tudo bem se você não tem, mas só acho que cerca de threads ou processos como formas de 109 00:05:22,190 --> 00:05:26,290 um sistema operacional ou um programa de usuário ou algo assim ou um servidor web 110 00:05:26,290 --> 00:05:28,810 a sorte de executar múltiplas coisas ao mesmo tempo. 111 00:05:28,810 --> 00:05:31,760 Assim, você pode ter ouvido o termo como fios de execução. 112 00:05:31,760 --> 00:05:34,140 Então é meio como se estivesse tipo de multitarefa. 113 00:05:34,140 --> 00:05:37,710 >> E se você já viu na caixa do seu laptop, ou algo parecido, 114 00:05:37,710 --> 00:05:43,040 multicore, o que você pode fazer é que você pode executar duas threads diferentes em diferentes 115 00:05:43,040 --> 00:05:46,700 partes do processador de modo que possam na verdade, ocorrem ao mesmo tempo. 116 00:05:46,700 --> 00:05:48,100 Portanto, esta é realmente poderoso. 117 00:05:48,100 --> 00:05:52,270 E este é o tipo de Apache do solução para este problema. 118 00:05:52,270 --> 00:05:57,900 >> Então, há mais ou menos como qualquer questão com esta abordagem embora? 119 00:05:57,900 --> 00:05:59,870 Então eu acho que eu meio que escreveu-los lá. 120 00:05:59,870 --> 00:06:03,440 Mas ambos tipo de usar um monte de memória. 121 00:06:03,440 --> 00:06:07,490 É muito caro para criar um fio ou um processo. 122 00:06:07,490 --> 00:06:11,750 >> E parte da razão é que apenas como quando você está executando um programa C 123 00:06:11,750 --> 00:06:15,090 como o seu principal e, em seguida, que as chamadas uma outra função, que tem 124 00:06:15,090 --> 00:06:16,520 algum tipo de pilha. 125 00:06:16,520 --> 00:06:19,910 Então tópicos também exigem um inteiramente pilha separada que 126 00:06:19,910 --> 00:06:21,220 pode ser muito grande. 127 00:06:21,220 --> 00:06:25,170 E se você pode imaginar ter de toneladas de usuários em seu site, você teria 128 00:06:25,170 --> 00:06:26,280 um monte de diferentes threads. 129 00:06:26,280 --> 00:06:28,230 Isso é um monte de pilhas para gerenciar e manter. 130 00:06:28,230 --> 00:06:31,280 Por isso, é grande o consumo de memória. 131 00:06:31,280 --> 00:06:35,650 >> E então, também, digamos que você só tem uma CPU, ou vamos dizer que você tem 132 00:06:35,650 --> 00:06:38,460 mais segmentos do que você tem esses multicores. 133 00:06:38,460 --> 00:06:38,730 Certo? 134 00:06:38,730 --> 00:06:43,280 Então, digamos que você tivesse 10 tópicos e você só tinha cinco CPUs. 135 00:06:43,280 --> 00:06:46,260 Você meio que tem que fazer essa coisa onde você alternar entre a corrente 136 00:06:46,260 --> 00:06:49,090 aquele que está correndo, porque você não pode executar todos os 10 de uma só vez. 137 00:06:49,090 --> 00:06:50,980 E isso é chamado de mudança de contexto. 138 00:06:50,980 --> 00:06:54,260 E esse termo realmente tem um casal de contextos diferentes, mas vamos 139 00:06:54,260 --> 00:06:56,620 pense nisso como a mudança entre dois segmentos. 140 00:06:56,620 --> 00:06:59,730 Isso pode ser muito caro, porque basicamente o que você tem a fazer é você 141 00:06:59,730 --> 00:07:03,340 tem que parar o que está fazendo, salve o estado desse fio condutor, e 142 00:07:03,340 --> 00:07:05,440 em seguida, mudar para outro lugar. 143 00:07:05,440 --> 00:07:09,420 >> Assim que todo mundo tipo de ver o motivação do porquê de tópicos e 144 00:07:09,420 --> 00:07:12,030 processos pode ser um pouco volumoso? 145 00:07:12,030 --> 00:07:13,840 E você tem uma pergunta? 146 00:07:13,840 --> 00:07:14,376 OK. 147 00:07:14,376 --> 00:07:15,070 Legal. 148 00:07:15,070 --> 00:07:18,090 Alguém tem alguma dúvida? 149 00:07:18,090 --> 00:07:19,620 OK. 150 00:07:19,620 --> 00:07:26,720 >> Então, se tomarmos um passo para trás por um segundo, não há como uma espécie de 151 00:07:26,720 --> 00:07:30,350 observação que podemos fazer sobre uma grande quantidade de aplicações web. 152 00:07:30,350 --> 00:07:34,810 E isso é realmente que muitos deles realmente não faço isso muito útil 153 00:07:34,810 --> 00:07:37,140 trabalhar dentro de um segmento. 154 00:07:37,140 --> 00:07:41,170 Então, tem alguém começou em P definir sete em tudo? 155 00:07:41,170 --> 00:07:45,650 Então você quer para descrever talvez algumas das partes? 156 00:07:45,650 --> 00:07:47,850 Você já trabalhou no login ou algo parecido? 157 00:07:47,850 --> 00:07:49,330 >> AUDIÊNCIA: Não. 158 00:07:49,330 --> 00:07:49,780 >> KEVIN SCHMID: OK. 159 00:07:49,780 --> 00:07:50,150 Nunca mente. 160 00:07:50,150 --> 00:07:50,900 Desculpe. 161 00:07:50,900 --> 00:07:55,790 Mas, basicamente, no conjunto P, você está vai estar fazendo um monte de tipo de 162 00:07:55,790 --> 00:07:59,760 consultas a um banco de dados para obter algum informações desse banco de dados. 163 00:07:59,760 --> 00:08:03,330 E o que o código está indo fazer, o que esse processo Apache ou 164 00:08:03,330 --> 00:08:06,030 esse segmento Apache vai estar fazendo ao mesmo tempo que tem de contactar o 165 00:08:06,030 --> 00:08:08,990 banco de dados é que é uma espécie de vai ser sentado lá e vai ser 166 00:08:08,990 --> 00:08:12,130 esperando o banco de dados para responder. 167 00:08:12,130 --> 00:08:16,290 >> Agora que não pode soar como que um grande lidar, porque o banco de dados está em seu 168 00:08:16,290 --> 00:08:18,240 Aparelho CS50, certo? 169 00:08:18,240 --> 00:08:22,930 Mas existe algum tipo de rede latência lá porque agora a web 170 00:08:22,930 --> 00:08:26,830 servidor tem que emitir o seu próprio pedido de a base de dados para comunicar com o 171 00:08:26,830 --> 00:08:29,520 banco de dados e, em seguida, obter esse informações de volta. 172 00:08:29,520 --> 00:08:33,190 Então, agora é como bem esperar por mim, eu sou indo para ir buscar alguma coisa do 173 00:08:33,190 --> 00:08:35,770 banco de dados e, em seguida, há uma muita espera acontecendo. 174 00:08:35,770 --> 00:08:36,870 Será que isso faz sentido? 175 00:08:36,870 --> 00:08:38,580 >> E para algumas coisas, não é tão ruim assim. 176 00:08:38,580 --> 00:08:41,950 Se ele só tem que, por exemplo, memória de acesso, que não é como 177 00:08:41,950 --> 00:08:44,100 horrível I / O latência. 178 00:08:44,100 --> 00:08:47,110 E quando eu digo, eu O latência /, o que eu sou referindo-se é como qualquer tipo como 179 00:08:47,110 --> 00:08:48,290 de entrada e saída. 180 00:08:48,290 --> 00:08:52,950 Mas para acessar um arquivo no disco, como se eu queria servir o HTML estático 181 00:08:52,950 --> 00:08:57,850 arquivo que foi na minha página web ou algo assim, eu meio que tenho que 182 00:08:57,850 --> 00:09:02,310 parar um pouco, ler esse arquivo em a partir do disco e, na 183 00:09:02,310 --> 00:09:04,400 esse processo que eu estou esperando. 184 00:09:04,400 --> 00:09:06,700 Eu não estou fazendo um trabalho útil. 185 00:09:06,700 --> 00:09:11,270 >> Isso não é verdade de tudo, mas é comum em aplicações como o conjunto P 186 00:09:11,270 --> 00:09:13,960 sete anos e um monte de aplicativos que você não é 187 00:09:13,960 --> 00:09:15,440 realmente fazendo muito pensar. 188 00:09:15,440 --> 00:09:19,090 E quando eu digo pensamento, eu quero dizer como o trabalho computacional. 189 00:09:19,090 --> 00:09:23,270 Assim, o trabalho computacional poderia ser algo como, por exemplo, você queria 190 00:09:23,270 --> 00:09:26,590 escrever um servidor web que apenas calculado o número de Fibonacci enésima. 191 00:09:26,590 --> 00:09:29,300 Isso não soa como um particularmente servidor web divertido. 192 00:09:29,300 --> 00:09:34,220 Como eu não esperaria que o local a ser o próximo Facebook, mas isso é um pouco 193 00:09:34,220 --> 00:09:35,610 tipo de trabalho computacional. 194 00:09:35,610 --> 00:09:39,570 >> E você pode imaginar que, com a substituição algum outro tipo de interessante 195 00:09:39,570 --> 00:09:43,070 trabalho computacional. 196 00:09:43,070 --> 00:09:46,050 Vamos dizer que você estava escrevendo algo que calculou os graus de 197 00:09:46,050 --> 00:09:49,170 separação entre duas pessoas ou algo parecido. 198 00:09:49,170 --> 00:09:51,860 Assim que envolve algum tipo de cálculo, certo? 199 00:09:51,860 --> 00:09:56,630 E mesmo assim, para fazer isso você ainda tem para fazer um monte de espera para talvez 200 00:09:56,630 --> 00:09:59,550 você tem que consultar um banco de dados para olhar até quem é amigo de quem ou 201 00:09:59,550 --> 00:10:00,600 algo parecido. 202 00:10:00,600 --> 00:10:03,510 Portanto, não há esse tipo de noção trabalho de computacional. 203 00:10:03,510 --> 00:10:05,260 Será que isso faz sentido? 204 00:10:05,260 --> 00:10:08,258 Alguém tem alguma dúvida? 205 00:10:08,258 --> 00:10:11,960 >> Ah, e eu acho que eu colocar os servidores de bate-papo lá porque os servidores de bate-papo são uma espécie de 206 00:10:11,960 --> 00:10:13,240 outro bom exemplo disso. 207 00:10:13,240 --> 00:10:15,250 Um servidor de bate-papo não tem fazer muito pensar. 208 00:10:15,250 --> 00:10:18,350 Ele só tem que esperar para que as pessoas enviar mensagens e, em seguida, quando 209 00:10:18,350 --> 00:10:19,800 eles, enviá-los. 210 00:10:19,800 --> 00:10:21,050 OK? 211 00:10:21,050 --> 00:10:23,410 212 00:10:23,410 --> 00:10:28,180 >> Então, só para recapitular novamente, Apache e servidores web semelhantes, como que um garfo 213 00:10:28,180 --> 00:10:31,470 monte de segmentos e processos que pode ser tipo de desperdício. 214 00:10:31,470 --> 00:10:37,530 Então eu acho que a questão que pode vir de que é que precisamos ter 215 00:10:37,530 --> 00:10:39,610 vários segmentos e processos? 216 00:10:39,610 --> 00:10:41,890 E se a gente só tinha um? 217 00:10:41,890 --> 00:10:45,710 >> Então vamos espécie de pintar um quadro do que esta seria semelhante. 218 00:10:45,710 --> 00:10:47,810 Então, vamos usar apenas um segmento. 219 00:10:47,810 --> 00:10:48,660 OK? 220 00:10:48,660 --> 00:10:52,790 Então, basta imaginar isso com um segmento. 221 00:10:52,790 --> 00:10:56,600 >> Vamos supor que nós não estávamos realmente fazendo que muito útil - e quando eu digo 222 00:10:56,600 --> 00:10:59,450 útil, quero dizer trabalho computacional - 223 00:10:59,450 --> 00:11:01,130 nos vários segmentos antes. 224 00:11:01,130 --> 00:11:04,180 Então vamos tipo de consolidar tudo em um segmento. 225 00:11:04,180 --> 00:11:07,780 Então, o que se tivéssemos um thread que tipo de apenas dá a volta no circuito e 226 00:11:07,780 --> 00:11:10,880 constantemente cheques fez algo novo acontecer. 227 00:11:10,880 --> 00:11:15,130 Assim, por exemplo, algo novo aconteceu poderia dizer que eu tenho algo de volta de 228 00:11:15,130 --> 00:11:19,310 o banco de dados, ou alguém enviado me uma nova solicitação HTTP. 229 00:11:19,310 --> 00:11:22,290 Portanto, estas são o tipo de eventos isso acontecer, certo? 230 00:11:22,290 --> 00:11:26,130 >> E então o que posso fazer quando os novos as coisas acontecem é neste mesmo segmento 231 00:11:26,130 --> 00:11:30,120 da execução, este único segmento de execução, posso chamar um código que 232 00:11:30,120 --> 00:11:32,410 iria lidar com essa coisa particular. 233 00:11:32,410 --> 00:11:36,640 Assim, por exemplo, se eu tenho algo de volta do banco de dados, eu poderia executar o meu 234 00:11:36,640 --> 00:11:40,960 pequena parte computacional do que na verdade, apenas prepara a coisa a 235 00:11:40,960 --> 00:11:42,620 mandar de volta para o usuário. 236 00:11:42,620 --> 00:11:46,710 O mesmo acontece com esse tipo de faz sentido? 237 00:11:46,710 --> 00:11:49,940 >> Mas o que são realmente a implicações dessa? 238 00:11:49,940 --> 00:11:50,660 Certo? 239 00:11:50,660 --> 00:11:53,730 Porque nós escrevemos um monte de código que - 240 00:11:53,730 --> 00:11:58,330 e eu só vou passar à frente nos slides se está tudo OK. 241 00:11:58,330 --> 00:12:00,930 Então, se você não se importar, eu sou apenas vai dar um passo atrás. 242 00:12:00,930 --> 00:12:03,410 Portanto, este tipo de coisa é chamado um ciclo de eventos. 243 00:12:03,410 --> 00:12:04,070 OK? 244 00:12:04,070 --> 00:12:07,240 E isso é o tipo de básico idéia por trás Node.js. 245 00:12:07,240 --> 00:12:11,240 >> Então, o que está realmente fazendo Node.js como uma web servidor é que não há um único segmento 246 00:12:11,240 --> 00:12:14,850 que é, basicamente, andando em um loop como um tempo um tipo de sob 247 00:12:14,850 --> 00:12:18,510 o capô do Node.js é constantemente verificação, fez recebemos coisas novas? 248 00:12:18,510 --> 00:12:22,720 E então ele será executado manipuladores que você configurou. 249 00:12:22,720 --> 00:12:26,720 Mas uma boa pergunta a fazer é: como podemos fazer isso acontecer 250 00:12:26,720 --> 00:12:28,090 com as coisas existentes? 251 00:12:28,090 --> 00:12:32,440 >> Então eu coloquei uma linha de código C aqui que basicamente parece que está abrindo uma 252 00:12:32,440 --> 00:12:33,060 arquivo, certo? 253 00:12:33,060 --> 00:12:36,090 Eu Ela saiu apenas com um álbum. 254 00:12:36,090 --> 00:12:39,600 Então eu tive que abrir a um novo arquivo. 255 00:12:39,600 --> 00:12:43,810 Assim, a forma como o nosso código C para a operação - 256 00:12:43,810 --> 00:12:47,890 e eu acho que a razão pela qual eu escolhi arquivos foi porque este é o tipo de medida 257 00:12:47,890 --> 00:12:52,000 do trabalho I / O que temos feito em C em uma sensação de que há saída de entrada. 258 00:12:52,000 --> 00:12:55,070 Então, nós chamamos isso de código que faz isso f aberta. 259 00:12:55,070 --> 00:12:59,370 E, em seguida, na linha seguinte da nossa programa, podemos agora trabalhar com f. 260 00:12:59,370 --> 00:13:02,710 >> Portanto, este seria um exemplo de algo que é como síncrona ou 261 00:13:02,710 --> 00:13:06,850 bloqueando porque nessa primeira linha não estamos esperando até que 262 00:13:06,850 --> 00:13:08,110 obter o arquivo aberto. 263 00:13:08,110 --> 00:13:12,260 Então, na segunda linha, sabemos que pode trabalhar com f, mas isso significa que 264 00:13:12,260 --> 00:13:16,240 que a segunda linha não pode realmente executar até que a primeira linha é feito. 265 00:13:16,240 --> 00:13:17,760 Será que isso faz sentido? 266 00:13:17,760 --> 00:13:20,890 >> Então, isso seria ruim para colocar em um manipulador de eventos. 267 00:13:20,890 --> 00:13:23,920 E a razão para isso é que esse tipo de espera, certo? 268 00:13:23,920 --> 00:13:26,500 Portanto, este seria revertido nos de volta a mesma coisa. 269 00:13:26,500 --> 00:13:29,470 E agora nós não teria sequer a benefício de vários segmentos ou 270 00:13:29,470 --> 00:13:32,390 processos porque temos um segmento em Node.js. 271 00:13:32,390 --> 00:13:35,496 Isso faz sentido para todo mundo? 272 00:13:35,496 --> 00:13:35,990 >> AUDIÊNCIA: Espere. 273 00:13:35,990 --> 00:13:36,980 Então qual é o substituto? 274 00:13:36,980 --> 00:13:37,840 >> KEVIN SCHMID: Ah, então sim. 275 00:13:37,840 --> 00:13:39,560 Então, eu estou indo para obter a a substituição. 276 00:13:39,560 --> 00:13:40,430 OK. 277 00:13:40,430 --> 00:13:42,960 Então, o que se tivéssemos algo que ficou assim? 278 00:13:42,960 --> 00:13:45,730 Então, o que se agora eu editei f abrir um pouco? 279 00:13:45,730 --> 00:13:48,370 Então, eu estou passando o mesmo dois argumentos como antes. 280 00:13:48,370 --> 00:13:52,610 Eu ainda amo a nova música que ela saiu com. 281 00:13:52,610 --> 00:13:57,260 Mas eu estou passando uma terceira coisa que é esta variável chamada código. 282 00:13:57,260 --> 00:14:02,280 >> Mas o que é o código de fato Neste contexto? 283 00:14:02,280 --> 00:14:05,360 É como uma variável C regular? 284 00:14:05,360 --> 00:14:06,740 É uma função, certo? 285 00:14:06,740 --> 00:14:09,450 E isso pode ser um pouco estranho, porque Na verdade, estou como agora passando um 286 00:14:09,450 --> 00:14:12,320 funcionar em outra função. 287 00:14:12,320 --> 00:14:14,400 >> Assim, um par de coisas a notar sobre isso. 288 00:14:14,400 --> 00:14:17,145 Um, eu não estou realmente chamando a função de código. 289 00:14:17,145 --> 00:14:20,650 Então, você não vê o código com o parêntese esquerdo, parêntese direito. 290 00:14:20,650 --> 00:14:23,010 Estou só de passagem no código. 291 00:14:23,010 --> 00:14:26,990 E em C, o que isso realmente fazer é me dar um ponteiro para esse real 292 00:14:26,990 --> 00:14:29,740 código, e então isso poderia executá-lo. 293 00:14:29,740 --> 00:14:33,350 Mas basta pensar nisso como você está passando o código a ser executado quando 294 00:14:33,350 --> 00:14:35,150 que arquivo é aberto. 295 00:14:35,150 --> 00:14:41,430 >> Mas o que isto significa é que agora o resto do meu programa que poderia fazer 296 00:14:41,430 --> 00:14:47,050 outras coisas, pode continuar a fazer outro coisas, enquanto nós, na verdade não esperar, mas 297 00:14:47,050 --> 00:14:50,890 só tem na parte de trás de nossas cabeças que quando aberta, corrida daquele arquivo que 298 00:14:50,890 --> 00:14:52,130 código na parte superior. 299 00:14:52,130 --> 00:14:53,390 Será que isso faz sentido? 300 00:14:53,390 --> 00:14:58,060 >> E agora, a idéia por trás do Node.js é que o código do material fazer com f 301 00:14:58,060 --> 00:15:04,590 parte deve ser bastante curto e simples e simples e não ser realmente 302 00:15:04,590 --> 00:15:06,160 muito computacionalmente intensivas. 303 00:15:06,160 --> 00:15:09,390 Ele pode ter que abrir outro arquivo, mas que também deve ser muito rápido 304 00:15:09,390 --> 00:15:14,710 porque deve apenas dizer fazer outra f abrir e, em seguida, chamar isso de outro código. 305 00:15:14,710 --> 00:15:19,100 >> Então, só para ser completamente claro, o f que faz abrir a nova música de Katy Perry 306 00:15:19,100 --> 00:15:23,060 done mp3, que vai muito muito retornar imediatamente. 307 00:15:23,060 --> 00:15:27,820 E então nós podemos apenas continuar fazendo outras coisas, porque tudo o que agora f 308 00:15:27,820 --> 00:15:33,410 concurso público faz é dizer basicamente o código aberto f subjacente abrir este arquivo 309 00:15:33,410 --> 00:15:36,020 e quando estiver pronto abrir este arquivo ou quando você recebe de volta, 310 00:15:36,020 --> 00:15:37,480 em seguida, executar esse código. 311 00:15:37,480 --> 00:15:39,540 Mas ele realmente não executar esse código. 312 00:15:39,540 --> 00:15:41,815 E você tinha uma pergunta? 313 00:15:41,815 --> 00:15:46,180 >> AUDIÊNCIA: Você parecia implicar alguns vezes que a adição computacionalmente 314 00:15:46,180 --> 00:15:50,545 código intensivo tipo de quebrar o [Inaudível] sistema orientado. 315 00:15:50,545 --> 00:15:51,795 [Inaudível]? 316 00:15:51,795 --> 00:15:54,450 317 00:15:54,450 --> 00:15:55,290 >> KEVIN SCHMID: Essa é uma ótima pergunta. 318 00:15:55,290 --> 00:15:59,280 Então, eu realmente tenho um exemplo de como você pode integrar computacionalmente 319 00:15:59,280 --> 00:16:01,090 código intensivo em um pouco. 320 00:16:01,090 --> 00:16:03,620 Assim, quando chegarmos aos exemplos de código, Eu vou ter a certeza de puxar essa. 321 00:16:03,620 --> 00:16:04,700 Tudo bem? 322 00:16:04,700 --> 00:16:05,950 Obrigado. 323 00:16:05,950 --> 00:16:07,690 324 00:16:07,690 --> 00:16:08,750 >> Qual era o seu nome? 325 00:16:08,750 --> 00:16:10,620 >> AUDIÊNCIA: Aaron. 326 00:16:10,620 --> 00:16:14,830 >> KEVIN SCHMID: Aaron traz uma muito bom ponto, o que é que se eu tivesse 327 00:16:14,830 --> 00:16:18,560 algum código computacionalmente intensivo em as coisas ver com parte f, o resto da 328 00:16:18,560 --> 00:16:22,880 meu programa não pode ser executado e não pode ouvir para os novos pedidos ou qualquer coisa até que tudo 329 00:16:22,880 --> 00:16:24,270 esse material está terminado. 330 00:16:24,270 --> 00:16:27,390 Então, se eu estou escrevendo código Node em geral a menos que façamos algo que eu vou 331 00:16:27,390 --> 00:16:33,060 sugerir mais tarde, quando olhamos para o exemplos de código, eu tenho que ter certeza de que 332 00:16:33,060 --> 00:16:36,060 meu código não amarrar este ciclo de eventos. 333 00:16:36,060 --> 00:16:38,120 Será que isso faz sentido? 334 00:16:38,120 --> 00:16:38,350 OK. 335 00:16:38,350 --> 00:16:40,040 Legal. 336 00:16:40,040 --> 00:16:47,090 >> Então Node.js oferece neste quadro que você pode construir estes evento dirigido 337 00:16:47,090 --> 00:16:48,210 servidores com. 338 00:16:48,210 --> 00:16:53,460 Por isso, tem este tipo de assíncrono non-blocking I / O bibliotecas, enquanto 339 00:16:53,460 --> 00:16:56,800 as bibliotecas padrão C que temos sido trabalhando, como se você só 340 00:16:56,800 --> 00:16:59,500 usá-los da mesma forma que nós temos de usá-los com f abre e 341 00:16:59,500 --> 00:17:03,000 coisas, aqueles estão bloqueando porque você realmente tem que esperar 342 00:17:03,000 --> 00:17:04,470 que arquivo para abrir. 343 00:17:04,470 --> 00:17:09,290 >> Mas Node.js dá-lhe isso e basicamente laços em V8 do Google 344 00:17:09,290 --> 00:17:14,030 JavaScript engine que é a razão que o Chrome é tão rápido em processamento 345 00:17:14,030 --> 00:17:17,040 JavaScript porque tem este motor V8. 346 00:17:17,040 --> 00:17:22,460 Então, eu sei que soa como um daqueles Conferências de desenvolvedores WWDC coisa 347 00:17:22,460 --> 00:17:25,390 onde eles só jogar um monte de a número carta coisas para processadores 348 00:17:25,390 --> 00:17:26,910 e dizer que isso é tão legal. 349 00:17:26,910 --> 00:17:34,200 Mas é legal que eles fizeram isso porque JavaScript - 350 00:17:34,200 --> 00:17:37,010 ou talvez se você não estiver familiarizado com JavaScript ainda porque não tivemos 351 00:17:37,010 --> 00:17:38,180 as palestras sobre ele - 352 00:17:38,180 --> 00:17:40,770 mas JavaScript é uma interpretação língua. 353 00:17:40,770 --> 00:17:41,970 >> E este é um ponto importante também. 354 00:17:41,970 --> 00:17:45,790 Portanto, é importante para o nosso web servidores para ser rápido, certo? 355 00:17:45,790 --> 00:17:49,970 E se nós estávamos correndo JavaScript código que foi interpretado com apenas 356 00:17:49,970 --> 00:17:52,130 qualquer intérprete de idade, pode ser lenta. 357 00:17:52,130 --> 00:17:55,980 Benefícios Então Nó de ter este intérprete V8 super rápido. 358 00:17:55,980 --> 00:17:59,580 E eu não sei se ela foi batizada como porque o tapa V8 na testa 359 00:17:59,580 --> 00:18:01,110 coisa, mas OK. 360 00:18:01,110 --> 00:18:07,070 >> Então eu preparei alguns exemplos neste URL. 361 00:18:07,070 --> 00:18:10,490 Após o seminário, eu estou meio que vai falar sobre como você pode obter conjunto Nó 362 00:18:10,490 --> 00:18:13,570 , mas, por enquanto, eu apenas uma espécie de querer para percorrer alguns exemplos de código. 363 00:18:13,570 --> 00:18:17,250 Então, se você quiser acompanhar, todo o código fonte está disponível lá. 364 00:18:17,250 --> 00:18:18,720 OK? 365 00:18:18,720 --> 00:18:22,280 >> Então, eu vou deixar essa URL se para um pouco. 366 00:18:22,280 --> 00:18:24,440 E então eu só vou exibir no terminal. 367 00:18:24,440 --> 00:18:29,670 368 00:18:29,670 --> 00:18:34,400 Está todo mundo bem com esta URL? 369 00:18:34,400 --> 00:18:37,990 Então eu vou passar para meu terminal aqui. 370 00:18:37,990 --> 00:18:42,030 >> Então, aqui está o código que Eu tenho para hoje. 371 00:18:42,030 --> 00:18:43,960 Por que não começamos com simpler.js arquivo? 372 00:18:43,960 --> 00:18:49,110 373 00:18:49,110 --> 00:18:52,100 A outra coisa é que tudo isso código vai ser escrito em 374 00:18:52,100 --> 00:18:56,660 JavaScript que você pode ou pode não estar familiarizado. 375 00:18:56,660 --> 00:19:00,170 Eu acho que algumas coisas é que muitas de código JavaScript é o tipo de 376 00:19:00,170 --> 00:19:04,000 sintaxe e estrutura é muito semelhante à C, de modo que você pode tipo de buscá-lo como 377 00:19:04,000 --> 00:19:05,020 você vá junto. 378 00:19:05,020 --> 00:19:08,750 Eu tentei escrever um monte de código de partida para isso de uma maneira que é 379 00:19:08,750 --> 00:19:11,230 semelhante ao C de modo que seja um pouco mais legível. 380 00:19:11,230 --> 00:19:15,980 Mas à medida que progredimos, eu vou estar demonstrando algumas das adicional 381 00:19:15,980 --> 00:19:18,980 características do JavaScript que são legal. 382 00:19:18,980 --> 00:19:21,510 >> Mas vamos olhar para este programa de exemplo. 383 00:19:21,510 --> 00:19:24,820 Eu acho que tudo é cortado lá. 384 00:19:24,820 --> 00:19:28,500 Eu só vou consertar isso de verdade rápido se está tudo OK ou não. 385 00:19:28,500 --> 00:19:31,400 Eu não sei o que isso vai fazer. 386 00:19:31,400 --> 00:19:34,660 Isso é um pouco melhor? 387 00:19:34,660 --> 00:19:36,510 Você pode ver a var e coisas assim? 388 00:19:36,510 --> 00:19:39,320 OK. 389 00:19:39,320 --> 00:19:44,120 >> Assim, a primeira linha é como o JavaScript versão de uma variável 390 00:19:44,120 --> 00:19:44,800 declaração. 391 00:19:44,800 --> 00:19:49,870 Então, só para destacar o que isso seria parecer em C. Portanto, este é apenas como 392 00:19:49,870 --> 00:19:52,620 Índice me dizendo é igual a três ou algo parecido. 393 00:19:52,620 --> 00:19:55,740 Então, eu não especificar o tipo. 394 00:19:55,740 --> 00:20:00,780 JavaScript tem tipos, mas é muito dinamicamente digitado na natureza, assim 395 00:20:00,780 --> 00:20:02,580 não fornecer qualquer tipo de tipo sobre ele. 396 00:20:02,580 --> 00:20:03,670 Então ele só tem var. 397 00:20:03,670 --> 00:20:05,320 É como variável. 398 00:20:05,320 --> 00:20:05,920 OK? 399 00:20:05,920 --> 00:20:08,340 >> E eu estou chamando este HTTP variável. 400 00:20:08,340 --> 00:20:12,480 E no meu lado direito, eu tenho a expressão que eu quero colocar em HTTP. 401 00:20:12,480 --> 00:20:14,960 E isso diz exigir HTTP. 402 00:20:14,960 --> 00:20:18,500 Portanto, esta é uma espécie de similar para incluir. 403 00:20:18,500 --> 00:20:22,940 É um pouco mais como poderoso do que incluir, no sentido de incluir 404 00:20:22,940 --> 00:20:26,100 seria apenas copie e cole o cabeçalho arquivo para os protótipos de função ou 405 00:20:26,100 --> 00:20:27,930 seja o que for, com as definições de tipo. 406 00:20:27,930 --> 00:20:30,590 Mas exigem que realmente está acontecendo para nos levar o código. 407 00:20:30,590 --> 00:20:33,280 >> Assim, você pode pensar nisso como importação de alguns códigos. 408 00:20:33,280 --> 00:20:37,960 Então, em algum lugar do módulo Node.js sistema ou qualquer outra coisa, eles têm tudo isso 409 00:20:37,960 --> 00:20:40,790 Código do servidor HTTP para que eu sou apenas buscar isso para o meu próprio 410 00:20:40,790 --> 00:20:43,130 uso pessoal neste programa. 411 00:20:43,130 --> 00:20:44,260 OK? 412 00:20:44,260 --> 00:20:46,930 >> Então eu tenho essa função que eu escrevi. 413 00:20:46,930 --> 00:20:50,330 E note que eu não tenho que especificar o tipo de retorno ou o tipo de 414 00:20:50,330 --> 00:20:51,140 argumentos novamente. 415 00:20:51,140 --> 00:20:54,440 Assim, tipo de solto digitei que tipo de sentido. 416 00:20:54,440 --> 00:20:57,290 Dois argumentos que leva em, o pedido e resposta. 417 00:20:57,290 --> 00:21:02,080 Então, isso é conceitualmente tipo como familiar a partir da imagem que tínhamos 418 00:21:02,080 --> 00:21:05,280 na tela antes porque temos esta solicitação que nós 419 00:21:05,280 --> 00:21:06,410 ter do utilizador. 420 00:21:06,410 --> 00:21:09,170 E então nós temos uma resposta que podemos escrever coisas. 421 00:21:09,170 --> 00:21:15,060 >> Assim, a primeira linha deste faz res.writeHead 200 e, em seguida, esta 422 00:21:15,060 --> 00:21:17,070 tipo de conteúdo de texto simples. 423 00:21:17,070 --> 00:21:19,300 Então, vamos remendar este apart um pouco. 424 00:21:19,300 --> 00:21:22,340 Então vamos focar res.write para um pouco. 425 00:21:22,340 --> 00:21:28,420 Então escrever é basicamente, e escrever cabeça, são apenas maneiras de escrever uma espécie de fora 426 00:21:28,420 --> 00:21:29,960 coisas para a resposta. 427 00:21:29,960 --> 00:21:30,770 OK? 428 00:21:30,770 --> 00:21:36,230 Então escreva cabeça, se alguém se lembra da palestra HTTP, é que vocês 429 00:21:36,230 --> 00:21:39,940 lembrar cabeçalhos no topo da coisa HTTP? 430 00:21:39,940 --> 00:21:43,580 Então por que não eu só demonstração cabeçalhos rápido. 431 00:21:43,580 --> 00:21:44,640 Isso seria útil? 432 00:21:44,640 --> 00:21:45,500 Ou devemos apenas uma espécie de - 433 00:21:45,500 --> 00:21:46,070 OK. 434 00:21:46,070 --> 00:21:46,740 Claro. 435 00:21:46,740 --> 00:21:52,340 >> Então, quando o navegador vai para google.com ou algo parecido, 436 00:21:52,340 --> 00:21:54,250 há realmente um pouco mais - 437 00:21:54,250 --> 00:21:55,380 isto é como um segredo - 438 00:21:55,380 --> 00:21:58,340 não há como um pouco mais de informação que vem através do tubo do que apenas 439 00:21:58,340 --> 00:22:00,180 o pouco de pesquisa e tudo mais. 440 00:22:00,180 --> 00:22:03,550 Então, para mostrar isso, eu vou para usar um programa chamado Curl. 441 00:22:03,550 --> 00:22:04,260 OK? 442 00:22:04,260 --> 00:22:08,020 Então, isso é algo que você pode executar em sua linha de comando Mac OSX ou no 443 00:22:08,020 --> 00:22:09,830 aparelho ou o que seja. 444 00:22:09,830 --> 00:22:17,050 E assim se eu Enrolar HTTP google.com, Eu vou ver o HTML. 445 00:22:17,050 --> 00:22:21,230 E esta é, com justiça, apenas o HTML esse tipo de conta que você 446 00:22:21,230 --> 00:22:24,695 redirecionar para www se o seu navegador não tem tratar automaticamente o 447 00:22:24,695 --> 00:22:27,110 redirecionamento. 448 00:22:27,110 --> 00:22:33,390 >> Portanto, esta é apenas HTML, mas eu vou adicionar para ondular este hífen Eu bandeira. 449 00:22:33,390 --> 00:22:33,600 OK? 450 00:22:33,600 --> 00:22:35,600 E isso vai mostrar me os cabeçalhos. 451 00:22:35,600 --> 00:22:40,640 Portanto, esta é também a informação que vem através quando eu chegar esta resposta. 452 00:22:40,640 --> 00:22:41,260 OK? 453 00:22:41,260 --> 00:22:45,320 >> Assim, no topo, você vê isso HTTP 301 mover permanentemente. 454 00:22:45,320 --> 00:22:49,470 E isso é importante porque o tipo de refere-se ao código de status. 455 00:22:49,470 --> 00:22:53,750 Assim, o 301 aqui é o código de status, que é, basicamente, apenas um número inteiro 456 00:22:53,750 --> 00:22:57,750 que informa ao navegador ou quem quer que esteja lendo isso, se você fingir que 457 00:22:57,750 --> 00:23:01,460 você é um navegador e que você está vendo isso, basicamente agora se você olhar para 458 00:23:01,460 --> 00:23:04,960 isso e você ver um 301, você sabe que eu tenho para fazer algo especial com base em 459 00:23:04,960 --> 00:23:08,810 301, ou aconteceu algo especial com base na 301. 460 00:23:08,810 --> 00:23:12,640 Então ele diz que mudou-se permanentemente. 461 00:23:12,640 --> 00:23:17,700 >> E então, basicamente, temos um monte de pares de valores-chave. 462 00:23:17,700 --> 00:23:22,100 Então, nós temos o local é www.google.com. 463 00:23:22,100 --> 00:23:25,190 E, em seguida, tipo de todas essas outras coisas, mas, basicamente, o que o local é 464 00:23:25,190 --> 00:23:29,662 provérbio é o novo local está em www.google.com. 465 00:23:29,662 --> 00:23:33,800 Portanto, agora se você vai para google.com, você vai tipo de ver o tipo de navegador piscar 466 00:23:33,800 --> 00:23:38,770 por um segundo e, em seguida, redirecioná-lo de volta para www.google.com. 467 00:23:38,770 --> 00:23:41,840 Assim, as respostas podem conter esses cabeçalhos. 468 00:23:41,840 --> 00:23:43,330 >> E um par de coisas a apontar. 469 00:23:43,330 --> 00:23:46,890 Então, vamos dizer que estávamos realmente bem sucedida em visitar uma página web. 470 00:23:46,890 --> 00:23:49,040 Então deixe-me ir para - 471 00:23:49,040 --> 00:23:51,080 o que é um bom site? 472 00:23:51,080 --> 00:23:53,285 Eu sou ruim no pensamento do bem sites no local. 473 00:23:53,285 --> 00:23:53,640 >> AUDIÊNCIA: Wikipedia. 474 00:23:53,640 --> 00:23:54,160 >> KEVIN SCHMID: OK. 475 00:23:54,160 --> 00:23:56,040 Vamos fazer Wikipedia. 476 00:23:56,040 --> 00:23:58,680 Então, aqui eu estava emocionado. 477 00:23:58,680 --> 00:23:59,240 Oh wait. 478 00:23:59,240 --> 00:24:00,160 Eu estava? 479 00:24:00,160 --> 00:24:00,890 Sim, eu estava. 480 00:24:00,890 --> 00:24:01,100 OK. 481 00:24:01,100 --> 00:24:03,005 Então, eu tenho que fazer www. 482 00:24:03,005 --> 00:24:06,006 Então, eu vou fazer www. 483 00:24:06,006 --> 00:24:09,680 E como você pode ver, aqui está todo o HTML que o navegador iria processar 484 00:24:09,680 --> 00:24:10,910 para a Wikipédia. 485 00:24:10,910 --> 00:24:14,055 >> Mas se eu continuar rolando aqui em cima, o que eu vou ver no topo - 486 00:24:14,055 --> 00:24:17,800 wow, há um monte de HTML na Wikipedia - 487 00:24:17,800 --> 00:24:22,550 mas o que eu posso ver no topo aqui é este código 200 status como oposta à 488 00:24:22,550 --> 00:24:24,570 301 que eu vi antes. 489 00:24:24,570 --> 00:24:27,100 E note que ele tem um bom OK amigável ao lado dele. 490 00:24:27,100 --> 00:24:29,470 Então, isso é como o bom código de status. 491 00:24:29,470 --> 00:24:31,160 >> Será que 200 número parece familiar? 492 00:24:31,160 --> 00:24:34,120 493 00:24:34,120 --> 00:24:39,880 Sim, porque quando eu fiz simpler.js, Eu escrevi um 200 lá. 494 00:24:39,880 --> 00:24:43,290 Então, que é basicamente dizendo contar a browser ou quem está tentando chegar ao 495 00:24:43,290 --> 00:24:45,440 este que foram bem sucedidos. 496 00:24:45,440 --> 00:24:49,040 Ou que tipo de como nós foram bem-sucedidos também. 497 00:24:49,040 --> 00:24:54,320 >> E não há este tipo de sintaxe especial em Javascript para declarar uma 498 00:24:54,320 --> 00:24:59,870 mapa destas chaves, como tipo de conteúdo e esses valores como texto simples. 499 00:24:59,870 --> 00:25:03,780 Então, se você olhar para a resposta que nós voltei da Wikipedia antes, - 500 00:25:03,780 --> 00:25:06,200 Vou tentar rolar até um pouco mais rápido - 501 00:25:06,200 --> 00:25:09,900 você tem essas chaves como servidor e estes valores Apache. 502 00:25:09,900 --> 00:25:12,120 Então você tem as chaves e valores. 503 00:25:12,120 --> 00:25:15,930 E você pode especificar isso em Nó o que enviar de volta. 504 00:25:15,930 --> 00:25:19,380 >> Portanto, esta é, na verdade, meio que, em alguns caminhos, e em alguns aspectos, não é 505 00:25:19,380 --> 00:25:23,170 realmente, mas é um pouco mais baixo nível do que o código PHP que você pode ser 506 00:25:23,170 --> 00:25:26,980 escrever para P definir sete porque PHP e Apache tipo de cuidar de alguns 507 00:25:26,980 --> 00:25:28,150 dessas coisas para você. 508 00:25:28,150 --> 00:25:32,520 No PHP, você pode substituir o padrão comportamento escrevendo seus próprios cabeçalhos. 509 00:25:32,520 --> 00:25:35,520 Mas, para os fins do presente, temos para escrever nossos próprios cabeçalhos. 510 00:25:35,520 --> 00:25:38,210 511 00:25:38,210 --> 00:25:41,105 >> Então, isso linha faz sentido todos, a linha da cabeça de gravação? 512 00:25:41,105 --> 00:25:41,380 OK. 513 00:25:41,380 --> 00:25:42,280 Incrível. 514 00:25:42,280 --> 00:25:45,870 >> Então o que eu faço é acabar com a resposta dizendo Olá mundo. 515 00:25:45,870 --> 00:25:47,040 OK. 516 00:25:47,040 --> 00:25:49,920 Mas isso é apenas uma função chamado manipulador de solicitação. 517 00:25:49,920 --> 00:25:53,510 Então, agora eu realmente tenho que tipo de fazer algo com essa função, certo? 518 00:25:53,510 --> 00:25:59,170 >> Então, aqui o que eu faço é que há esta linha que faz iguais servidor var 519 00:25:59,170 --> 00:26:03,530 HTTP.create servidor, e então eu passar no manipulador de solicitação. 520 00:26:03,530 --> 00:26:06,080 Portanto, este é o tipo de nó forma de realização de um servidor. 521 00:26:06,080 --> 00:26:08,790 E note que eu estou passando no manipulador de solicitação. 522 00:26:08,790 --> 00:26:12,290 Então, isso está dizendo a createServer função que eu quero que você me faça uma 523 00:26:12,290 --> 00:26:16,270 servidor, e quando esse servidor recebe uma resposta, eu preciso de você para chamar este 524 00:26:16,270 --> 00:26:18,680 solicitar função de manipulador. 525 00:26:18,680 --> 00:26:18,990 OK? 526 00:26:18,990 --> 00:26:22,290 >> Assim que a linha praticamente termina imediatamente. 527 00:26:22,290 --> 00:26:28,780 Assim, a linha de servidores var é bem feito depois você faz isso muito bem. 528 00:26:28,780 --> 00:26:31,770 Quero dizer, tem que configurar algum interno estado para saber que você teria que 529 00:26:31,770 --> 00:26:35,400 chamar essa função manipulador de solicitações, mas ele não vai se sentar lá e 530 00:26:35,400 --> 00:26:37,730 digamos que o usuário tem enviado me um pedido ainda? 531 00:26:37,730 --> 00:26:39,270 Será que o usuário me enviou um pedido ainda? 532 00:26:39,270 --> 00:26:40,780 Por isso, não bloquear. 533 00:26:40,780 --> 00:26:41,650 OK? 534 00:26:41,650 --> 00:26:46,120 >> Então, o que isto vai fazer é, basicamente, agora armazena um ponteiro para este código, 535 00:26:46,120 --> 00:26:49,670 esta função de manipulador de solicitação, e, em seguida, irá executar esse código, quando alguém 536 00:26:49,670 --> 00:26:52,170 faz um pedido. 537 00:26:52,170 --> 00:26:54,120 E então nós fazemos server.listen. 538 00:26:54,120 --> 00:26:56,950 539 00:26:56,950 --> 00:26:59,960 >> O 1337 não é muito arbitrária. 540 00:26:59,960 --> 00:27:02,285 Eu não tinha nenhuma razão especial para escolher esse número. 541 00:27:02,285 --> 00:27:03,860 Foi totalmente aleatório. 542 00:27:03,860 --> 00:27:07,010 Mas isso só especifica a porta. 543 00:27:07,010 --> 00:27:10,640 Assim, a maioria dos servidores web que você vai ver que eles usar a porta 80, pois esse é o tipo 544 00:27:10,640 --> 00:27:11,810 de como a convenção. 545 00:27:11,810 --> 00:27:16,170 Então, se eu for para algo como: Eu não sei, Wikipedia.org, 546 00:27:16,170 --> 00:27:17,700 e eu coloquei dois pontos 8 - 547 00:27:17,700 --> 00:27:18,610 oh wow, você não pode ver isso. 548 00:27:18,610 --> 00:27:19,370 Sinto muito. 549 00:27:19,370 --> 00:27:21,820 Mas se eu fizer Wikipedia - 550 00:27:21,820 --> 00:27:24,810 Vou escrever aqui apenas para que fica claro na câmara. 551 00:27:24,810 --> 00:27:29,150 Mas se eu levar isso em um navegador com dois pontos de 80, que especifica ir para 552 00:27:29,150 --> 00:27:31,430 Wikipedia.org na porta 80. 553 00:27:31,430 --> 00:27:36,200 Então, é como como os Estados Unidos tem várias portas, como onde você pode enviar 554 00:27:36,200 --> 00:27:37,440 as coisas a meio. 555 00:27:37,440 --> 00:27:40,730 Então, é como ir a este particular colocar no servidor. 556 00:27:40,730 --> 00:27:40,990 OK. 557 00:27:40,990 --> 00:27:45,730 >> Então, eu só escolhi 1337. 558 00:27:45,730 --> 00:27:47,910 Há toda uma série de números que você pode escolher. 559 00:27:47,910 --> 00:27:50,390 Isso não foi totalmente especial. 560 00:27:50,390 --> 00:27:54,560 >> Mas o que eu vou fazer agora é que eu vou correr Node. 561 00:27:54,560 --> 00:27:59,730 Deixe-me realmente entrar que um casal linhas para baixo para que você possa vê-lo. 562 00:27:59,730 --> 00:28:03,130 Eu vou fazer Node, e estou vai executar simpler.js. 563 00:28:03,130 --> 00:28:06,880 E vamos falar sobre como obter Nó criado em um pouco. 564 00:28:06,880 --> 00:28:09,350 Mas agora é só executar o servidor. 565 00:28:09,350 --> 00:28:14,360 >> Então, uma coisa que pode tentar o que não pode ser tão excitante é que podemos realmente 566 00:28:14,360 --> 00:28:16,300 tentar acessá-lo em Curl. 567 00:28:16,300 --> 00:28:20,680 Então eu posso fazer Curl, e minha máquina é host local. 568 00:28:20,680 --> 00:28:24,600 Você também vai ver isso escrito assim às vezes. 569 00:28:24,600 --> 00:28:29,810 Hospedeiro e 127.0.0.1 local são uma espécie de como o seu computador de casa. 570 00:28:29,810 --> 00:28:33,180 Então, é como falar com seu próprio computador. 571 00:28:33,180 --> 00:28:33,760 OK. 572 00:28:33,760 --> 00:28:36,030 >> E então eu posso dizer que 1337. 573 00:28:36,030 --> 00:28:39,630 Então, se eu executar esta linha de código, ele diz Olá mundo. 574 00:28:39,630 --> 00:28:44,050 E se eu queria ver esse material que tinha texto simples ou tipo de conteúdo 575 00:28:44,050 --> 00:28:46,560 seja o que for, eu poderia até mesmo colocar isso aqui. 576 00:28:46,560 --> 00:28:48,810 E note que ele diz OK. 577 00:28:48,810 --> 00:28:50,810 E eu tenho de texto simples. 578 00:28:50,810 --> 00:28:53,140 E depois há o tipo de todas essas outras coisas que Node vai acrescentar em 579 00:28:53,140 --> 00:28:54,440 lá para mim. 580 00:28:54,440 --> 00:28:55,700 Isso não é super importante. 581 00:28:55,700 --> 00:28:58,230 >> Quero dizer, há algum tipo de técnico aspectos em que são uma espécie 582 00:28:58,230 --> 00:29:02,280 de legal para falar, mas apenas para mostrar você, eu também tenho o poder de 583 00:29:02,280 --> 00:29:03,070 alterá-las por perto. 584 00:29:03,070 --> 00:29:06,280 Então eu só posso adicionar um monte de coisas assim. 585 00:29:06,280 --> 00:29:11,780 E então agora, se eu olhar na minha de saída, será que. 586 00:29:11,780 --> 00:29:19,740 Então, esses cabeçalhos dizer certas coisas para navegadores e coisas assim. 587 00:29:19,740 --> 00:29:23,040 >> E cabeçalhos pode basicamente dizer um navegador como responder a alguma coisa. 588 00:29:23,040 --> 00:29:26,280 Se você já ouviu falar de cookies antes, ou se você já esteve irritado 589 00:29:26,280 --> 00:29:29,330 por uma página web criação cookies, ou ligado bloco cookie ou 590 00:29:29,330 --> 00:29:30,320 algo parecido. 591 00:29:30,320 --> 00:29:33,040 Você pode realmente definir cookies nestes cabeçalhos. 592 00:29:33,040 --> 00:29:36,990 Então, eles dizem um navegador como comportamento em alguns casos. 593 00:29:36,990 --> 00:29:37,750 OK. 594 00:29:37,750 --> 00:29:40,310 >> Assim que foi simpler.js. 595 00:29:40,310 --> 00:29:42,780 Alguém tem alguma dúvida em que arquivo de código fonte? 596 00:29:42,780 --> 00:29:45,420 597 00:29:45,420 --> 00:29:45,610 OK. 598 00:29:45,610 --> 00:29:46,490 Legal. 599 00:29:46,490 --> 00:29:50,780 >> Portanto, vamos remover o r de que e olhar para simple.js. 600 00:29:50,780 --> 00:29:53,010 Então, isso é muito bonito o mesmo programa. 601 00:29:53,010 --> 00:29:56,030 Eu só escrevi um pouco diferente porque eu queria resolver de destaque 602 00:29:56,030 --> 00:29:57,850 algumas características do JavaScript. 603 00:29:57,850 --> 00:30:03,880 >> Então, observe que o manipulador de solicitação função tenha totalmente desaparecido. 604 00:30:03,880 --> 00:30:05,800 Ah sim, se você tem alguma pergunta? 605 00:30:05,800 --> 00:30:08,200 >> Audiência: Sim, os argumentos que são passadas para o 606 00:30:08,200 --> 00:30:10,120 função, o que são? 607 00:30:10,120 --> 00:30:12,050 >> KEVIN SCHMID: Portanto, estas são JavaScript objetos. 608 00:30:12,050 --> 00:30:15,230 Na documentação do Node.js, ele basicamente diz que métodos são 609 00:30:15,230 --> 00:30:15,910 disponível sobre eles. 610 00:30:15,910 --> 00:30:19,602 Nós só acontecerá a ter o acesso a este método chamado de cabeça de gravação e final 611 00:30:19,602 --> 00:30:20,730 e coisas assim. 612 00:30:20,730 --> 00:30:22,590 Mas há um grupo inteiro mais métodos. 613 00:30:22,590 --> 00:30:27,670 >> E por exemplo, como um deles em particular, sobre rec, você pode fazer 614 00:30:27,670 --> 00:30:34,540 algo como rec.method que será dizer-lhe se é um HTTP GET ou 615 00:30:34,540 --> 00:30:36,780 Solicitações HTTP POST e coisas assim. 616 00:30:36,780 --> 00:30:39,100 Portanto, há todos os tipos de diferente propriedades, mas eles são ambos 617 00:30:39,100 --> 00:30:42,560 JavaScript objetos, e eles só têm funções que lhes são inerentes que 618 00:30:42,560 --> 00:30:43,850 pode escrever coisas. 619 00:30:43,850 --> 00:30:45,520 OK? 620 00:30:45,520 --> 00:30:49,030 >> Então percebe que manipulador de solicitações é totalmente desaparecido. 621 00:30:49,030 --> 00:30:52,650 Mas o código que eu tinha em pedido manipulador ainda está lá. 622 00:30:52,650 --> 00:30:56,520 Eu ainda tenho esse res.writeHead e ainda tenho este res.end. 623 00:30:56,520 --> 00:31:00,270 E que este é um exemplo de em JavaScript é a idéia de um 624 00:31:00,270 --> 00:31:01,460 função anônima. 625 00:31:01,460 --> 00:31:04,180 e anônimo é como um nome apropriado para ele, porque, literalmente, não faz 626 00:31:04,180 --> 00:31:05,180 ter um nome. 627 00:31:05,180 --> 00:31:07,900 Não há solicitação de função manipulador de lá. 628 00:31:07,900 --> 00:31:10,110 >> Não tem nome, mas ainda é tomar um argumento. 629 00:31:10,110 --> 00:31:12,250 Então eu ainda tenho rec e res. 630 00:31:12,250 --> 00:31:16,180 E eu ainda tenho o código. 631 00:31:16,180 --> 00:31:18,930 Isso é perfeitamente normal O código JavaScript. 632 00:31:18,930 --> 00:31:22,540 Então, eu posso declarar uma função sem explicitamente dando-lhe um nome. 633 00:31:22,540 --> 00:31:24,250 É um pouco confuso no início. 634 00:31:24,250 --> 00:31:26,230 Há algumas coisas úteis, como que você pode fazer com 635 00:31:26,230 --> 00:31:28,450 estas funções anônimas. 636 00:31:28,450 --> 00:31:32,100 Alguém tem alguma dúvida sobre isso, ou é OK apenas para, por ora, 637 00:31:32,100 --> 00:31:34,130 tipo de simplesmente aceitar que ele vai fazer a mesma coisa? 638 00:31:34,130 --> 00:31:36,700 639 00:31:36,700 --> 00:31:37,125 Yep? 640 00:31:37,125 --> 00:31:38,680 >> AUDIÊNCIA: primeiro são funções classe em JavaScript? 641 00:31:38,680 --> 00:31:41,020 >> KEVIN SCHMID: Eles são os primeiros classe em JavaScript. 642 00:31:41,020 --> 00:31:45,490 E só sei que estes conceitos de passando em uma função anônima como 643 00:31:45,490 --> 00:31:49,600 isso se aplica ao JavaScript que você pode escrever em seu projeto final para 644 00:31:49,600 --> 00:31:51,260 o navegador web também. 645 00:31:51,260 --> 00:31:56,700 Assim, por exemplo, no JavaScript seu navegador, é também um pouco do evento 646 00:31:56,700 --> 00:32:00,680 dirigido no sentido de que o que você vai tem é quando o usuário clica neste 647 00:32:00,680 --> 00:32:02,640 botão, eu quero que você executar este código. 648 00:32:02,640 --> 00:32:07,070 >> Então, é o mesmo tipo de idéias da lado do cliente quando um clique do mouse ou eles 649 00:32:07,070 --> 00:32:09,870 mouse sobre alguma imagem em seu página web, executar este código. 650 00:32:09,870 --> 00:32:11,350 Isso pode se aplicar a servidores. 651 00:32:11,350 --> 00:32:16,380 Então, isso é mais ou menos como o emocionante razão pela qual JavaScript é realmente um 652 00:32:16,380 --> 00:32:19,810 pessoas adequadas ou alguns pensam que é uma linguagem adequada para este tipo de 653 00:32:19,810 --> 00:32:22,530 servidor motorista evento, porque você tem estas funções anônimas. 654 00:32:22,530 --> 00:32:26,150 Você tem toda a idéia de este código assíncrono. 655 00:32:26,150 --> 00:32:27,060 OK. 656 00:32:27,060 --> 00:32:30,360 Alguém tem alguma dúvida? 657 00:32:30,360 --> 00:32:30,470 >> OK. 658 00:32:30,470 --> 00:32:33,440 Assim que foi simple.js. 659 00:32:33,440 --> 00:32:38,070 Então, vamos olhar para mais uma ou mais um par. 660 00:32:38,070 --> 00:32:42,040 Portanto, esta é sleep.js. 661 00:32:42,040 --> 00:32:47,160 Então é alguém familiarizado com a função dormir C? 662 00:32:47,160 --> 00:32:50,936 De talvez uma das palestras anteriores ou algo parecido? 663 00:32:50,936 --> 00:32:54,650 >> Então, basicamente, você pode passar em Eu acho que um número de segundos ou se você estiver usando U 664 00:32:54,650 --> 00:32:57,080 dormir um número de milissegundos ou nanosegundos. 665 00:32:57,080 --> 00:33:00,450 E, basicamente, o programa só irá parar correndo para a mesma quantidade de tempo. 666 00:33:00,450 --> 00:33:01,280 Certo? 667 00:33:01,280 --> 00:33:06,970 E então ele vai acordar e, eventualmente, em seguida, ele vai apenas continuar executando 668 00:33:06,970 --> 00:33:08,340 o programa. 669 00:33:08,340 --> 00:33:12,740 >> Portanto, este tipo de servidor dá a impressão de dormir. 670 00:33:12,740 --> 00:33:17,580 Então, observe que temos o mesmo res.writeHead 200 com o cabeçalho 671 00:33:17,580 --> 00:33:22,130 antes, mas, em seguida, nós estamos chamando esta função chamada set timeout. 672 00:33:22,130 --> 00:33:26,170 Definir tempo de espera também está disponível em seu navegador Google Chrome 673 00:33:26,170 --> 00:33:28,000 ou o Safari ou o que seja. 674 00:33:28,000 --> 00:33:31,720 E, basicamente, o que está fazendo aqui se ele está tomando em uma função. 675 00:33:31,720 --> 00:33:33,360 Observe, novamente, é uma função anônima. 676 00:33:33,360 --> 00:33:36,310 Então, isso é bem legal porque estamos usando uma função anônima dentro de uma 677 00:33:36,310 --> 00:33:38,950 função anônima que pode ser um pouco estranho. 678 00:33:38,950 --> 00:33:42,270 >> Mas ele está tomando essa função, que é basicamente dizendo - e da forma como este 679 00:33:42,270 --> 00:33:47,430 obras é em 5.000 milissegundos, eu quero que você execute essa função que 680 00:33:47,430 --> 00:33:50,830 apenas termina a resposta e grava hey. 681 00:33:50,830 --> 00:33:56,730 Então, isso dá a impressão de como dormindo, mas a forma como isso realmente 682 00:33:56,730 --> 00:33:59,780 funciona é que vamos percorrer esta linha muito rapidamente. 683 00:33:59,780 --> 00:34:01,190 Nós apenas estamos escrevendo algo. 684 00:34:01,190 --> 00:34:03,780 E então nós também vamos percorrer esta linha muito rapidamente. 685 00:34:03,780 --> 00:34:08,620 Portanto, não estamos realmente indo esperar cinco segundos. 686 00:34:08,620 --> 00:34:11,370 Nós apenas estamos indo para executar este código instantaneamente. 687 00:34:11,370 --> 00:34:14,219 >> E depois há, mais uma vez, este pequeno ciclo de eventos que agora tem essa coisa 688 00:34:14,219 --> 00:34:17,570 registradores que, basicamente, é apenas constantemente andando em um círculo 689 00:34:17,570 --> 00:34:21,620 e olhando para o relógio em uma única fio e ditado, tem cinco segundo 690 00:34:21,620 --> 00:34:22,360 passou ainda? 691 00:34:22,360 --> 00:34:26,409 E então, quando ele vê que o segundo mão moveu-se uns cinco segundos ou 692 00:34:26,409 --> 00:34:29,190 o que quer, então ele acorda e diz: oh, o que eu tenho que fazer? 693 00:34:29,190 --> 00:34:30,350 Oh eu tenho que executar esse código. 694 00:34:30,350 --> 00:34:33,110 E então ele vai executar res.end hey. 695 00:34:33,110 --> 00:34:35,360 >> Então, novamente, nós nunca estamos esperando aqui. 696 00:34:35,360 --> 00:34:38,590 Então não é que este código dentro de esta função vai levar cinco 697 00:34:38,590 --> 00:34:39,900 segundos para ser executado. 698 00:34:39,900 --> 00:34:43,090 Este código será executado praticamente instantaneamente, pelo menos em relação a 699 00:34:43,090 --> 00:34:46,139 os cinco segundos que estávamos falando aproximadamente mais cedo antes. 700 00:34:46,139 --> 00:34:52,100 >> Então, só para mostrar isso em ação, Eu posso fazer Node.sleep.js. 701 00:34:52,100 --> 00:34:55,159 E fez eu estragar alguma coisa? 702 00:34:55,159 --> 00:34:56,310 Possivelmente. 703 00:34:56,310 --> 00:34:57,410 Desculpe. 704 00:34:57,410 --> 00:34:59,530 Vamos ver o que podemos fazer para corrigir isso. 705 00:34:59,530 --> 00:35:10,830 706 00:35:10,830 --> 00:35:12,080 OK. 707 00:35:12,080 --> 00:35:15,460 708 00:35:15,460 --> 00:35:17,464 Então, definitivamente usar Node.js. 709 00:35:17,464 --> 00:35:19,440 Eu estou apenas brincando. 710 00:35:19,440 --> 00:35:19,570 OK. 711 00:35:19,570 --> 00:35:20,820 Apenas um segundo. 712 00:35:20,820 --> 00:35:27,380 713 00:35:27,380 --> 00:35:27,900 OK. 714 00:35:27,900 --> 00:35:29,130 Eu sei o que é. 715 00:35:29,130 --> 00:35:34,440 >> Assim, a questão é que no meu outro guia aqui, eu estava correndo Nó já em 716 00:35:34,440 --> 00:35:36,590 que mesmo endereço, 1337. 717 00:35:36,590 --> 00:35:43,370 Assim, o erro que este jogou, se olharmos no-lo real de perto, é o endereço em 718 00:35:43,370 --> 00:35:45,180 usar, EADDRINUSE. 719 00:35:45,180 --> 00:35:47,970 Então, eu já estava usando 1337 aqui. 720 00:35:47,970 --> 00:35:52,210 Então, se eu fechar esta off, e então eu agora tentar executar este, felizmente, tudo 721 00:35:52,210 --> 00:35:53,210 vai ficar bem. 722 00:35:53,210 --> 00:35:53,440 OK. 723 00:35:53,440 --> 00:35:57,020 Então você só pode ter uma coisa tipo de ouvir em uma porta ao mesmo tempo. 724 00:35:57,020 --> 00:35:59,660 Outra solução teria sido para mim apenas para editar esse programa e fazer 725 00:35:59,660 --> 00:36:02,370 seja como 1338 ou algo assim assim. 726 00:36:02,370 --> 00:36:04,100 >> Mas agora o sono está sendo executado. 727 00:36:04,100 --> 00:36:06,400 Então, vamos realmente experimentá-lo no navegador desta vez porque é um 728 00:36:06,400 --> 00:36:09,080 pouco desinteressante para ver lo num terminal. 729 00:36:09,080 --> 00:36:13,560 Então, eu estou indo só para ir a esse 127 endereço novo em 1337. 730 00:36:13,560 --> 00:36:14,850 E se você pode vê-lo - 731 00:36:14,850 --> 00:36:18,050 Eu não sei se você pode - mas meu navegador de tomar um tempo muito, muito 732 00:36:18,050 --> 00:36:20,600 tempo para carregar ou como cinco segundos. 733 00:36:20,600 --> 00:36:23,460 >> E depois disso, ele finalmente acabou com a resposta. 734 00:36:23,460 --> 00:36:29,070 E você não pode vê-lo porque a coisa é movido sobre um pouco, mas se eu fizer 735 00:36:29,070 --> 00:36:32,500 esta um pouco menor, você pode ver que diz hey. 736 00:36:32,500 --> 00:36:35,130 Então, eu tenho o hey, mas após cinco segundos. 737 00:36:35,130 --> 00:36:38,510 E isso pode ser um pouco de ver aqui no terminal, por isso estou 738 00:36:38,510 --> 00:36:40,980 vai fazer a - 739 00:36:40,980 --> 00:36:43,540 vamos fazer aqui - 740 00:36:43,540 --> 00:36:48,370 vamos fazer onda esse endereço novamente com o 1337. 741 00:36:48,370 --> 00:36:50,820 E eu meio que tenho que sentar aqui por cinco segundos. 742 00:36:50,820 --> 00:36:53,760 Mas note que o servidor pode aceitar novas respostas. 743 00:36:53,760 --> 00:36:54,940 Então, ele imprime hey. 744 00:36:54,940 --> 00:36:58,720 >> E a demonstração disso, basicamente o que Eu posso fazer neste outro guia - 745 00:36:58,720 --> 00:37:02,640 então vamos dizer que eu faço isso em outra guia, Eu vou fazer Curl e ao mesmo 746 00:37:02,640 --> 00:37:03,780 coisa de novo. 747 00:37:03,780 --> 00:37:06,600 E eu vou tentar chutar estes caras fora ao mesmo tempo. 748 00:37:06,600 --> 00:37:08,260 Então, eu vou fazer isso, e eu sou vai correr para cá e estou 749 00:37:08,260 --> 00:37:09,650 vai fazê-lo novamente. 750 00:37:09,650 --> 00:37:14,030 >> E vamos fazê-lo de modo que você pode ver os dois. 751 00:37:14,030 --> 00:37:20,250 Aquele impresso hey e que um impresso hey todo o caminho na - 752 00:37:20,250 --> 00:37:22,550 vamos fazer essa experiência novamente. 753 00:37:22,550 --> 00:37:25,100 Na verdade, vamos usar este enganar, se está tudo OK. 754 00:37:25,100 --> 00:37:30,520 >> Então eu vou usar uma coisa que shell me permite executar basicamente duas cópias 755 00:37:30,520 --> 00:37:32,630 deste programa em paralelo. 756 00:37:32,630 --> 00:37:36,070 Então, ele vai executar o primeiro programa e o segundo programa em paralelo. 757 00:37:36,070 --> 00:37:39,060 Portanto, agora se eu pressionar Enter, que vai para fazer esse pedido muito bonito 758 00:37:39,060 --> 00:37:40,570 instantaneamente ao mesmo tempo. 759 00:37:40,570 --> 00:37:42,620 Então, vamos dar a este um tiro. 760 00:37:42,620 --> 00:37:44,950 >> Então, agora ele diz notar dois processos. 761 00:37:44,950 --> 00:37:50,630 E se você estiver curioso, que 27.000 número é basicamente o processo de identificação. 762 00:37:50,630 --> 00:37:52,940 E, em seguida, perceber, eles imprimiram ei ao mesmo tempo. 763 00:37:52,940 --> 00:37:56,820 Não foi como nós tivemos que esperar cinco segundos para uma e depois disso, 764 00:37:56,820 --> 00:37:59,640 Cinco segundos depois obter o segundo. 765 00:37:59,640 --> 00:38:03,300 Então, esse é o tipo de, de certa forma, é realmente não evidenciar, mas é 766 00:38:03,300 --> 00:38:07,390 evidência intuitiva de que não é apenas como aguardando cinco segundos, impedindo 767 00:38:07,390 --> 00:38:08,960 todo o segmento. 768 00:38:08,960 --> 00:38:10,720 OK legal. 769 00:38:10,720 --> 00:38:17,850 >> Então Aaron fez uma pergunta anterior que era bem o que se nós fazer alguma coisa - 770 00:38:17,850 --> 00:38:18,735 Yep? 771 00:38:18,735 --> 00:38:19,051 >> AUDIÊNCIA: Espere. 772 00:38:19,051 --> 00:38:21,585 Como é que diferente de tampão printf, embora? 773 00:38:21,585 --> 00:38:23,010 Não faz isso automaticamente fazer isso? 774 00:38:23,010 --> 00:38:25,390 Por que temos que nos preocupar com isso? 775 00:38:25,390 --> 00:38:26,555 >> KEVIN SCHMID: Oh, você poderia dizer que mais uma vez? 776 00:38:26,555 --> 00:38:29,510 >> AUDIÊNCIA: Não gosta de tampão printf fazer exatamente a mesma coisa? 777 00:38:29,510 --> 00:38:31,280 >> KEVIN SCHMID: O buffer printf? 778 00:38:31,280 --> 00:38:32,753 >> AUDIÊNCIA: Yeah. 779 00:38:32,753 --> 00:38:33,244 OK. 780 00:38:33,244 --> 00:38:40,609 Não foi em um dos testes que eram falando sobre como se você direita printf 781 00:38:40,609 --> 00:38:42,899 alguma coisa e, em seguida, tê-lo pausar uma segundo, e então você tem que circular dez 782 00:38:42,899 --> 00:38:46,530 vezes, ele vai esperar dez segundos, e printf então tudo junto? 783 00:38:46,530 --> 00:38:47,460 >> KEVIN SCHMID: Oh, OK. 784 00:38:47,460 --> 00:38:49,170 >> AUDIÊNCIA: É fazer o mesmo coisa, então, neste caso? 785 00:38:49,170 --> 00:38:52,630 >> KEVIN SCHMID: Então, a pergunta era basicamente, em um dos antigos quizzes 786 00:38:52,630 --> 00:38:57,200 ou algo assim, havia uma questão que basicamente, se você diz print f 10 787 00:38:57,200 --> 00:39:01,490 coisas de uma só vez e depois dormi como em o processo de imprimir os para fora, 788 00:39:01,490 --> 00:39:04,850 no final, por algum motivo, seria simplesmente despejar os todos para fora na tela. 789 00:39:04,850 --> 00:39:06,740 Portanto, há uma espécie de dois diferentes conceitos aqui. 790 00:39:06,740 --> 00:39:10,400 >> Então eu acho que uma coisa é que, neste caso, estamos lidando com dois diferentes 791 00:39:10,400 --> 00:39:13,510 tipo de pessoas perguntando o servidor para as coisas ao mesmo tempo. 792 00:39:13,510 --> 00:39:17,455 E a razão que o tipo de printf espera assim e despeja tudo para fora 793 00:39:17,455 --> 00:39:21,760 de uma só vez está mais relacionado com como printf tipo de - 794 00:39:21,760 --> 00:39:25,100 de modo que o caminho é realmente printf implementado é que tem, basicamente, a 795 00:39:25,100 --> 00:39:28,850 falar com o sistema operacional para escrever esse material para o console. 796 00:39:28,850 --> 00:39:33,460 Por isso, não quero fazer tudo isso coisas imediatamente quando você diz printf 797 00:39:33,460 --> 00:39:36,260 alguma corda, porque isso poderia ficar caro se tiver de 798 00:39:36,260 --> 00:39:37,340 fazer isso todas as vezes. 799 00:39:37,340 --> 00:39:41,530 >> Então, se você faz printf hey, seu programa não pode realmente imprimir essa 800 00:39:41,530 --> 00:39:43,040 imediatamente para o console. 801 00:39:43,040 --> 00:39:46,080 Ele poderia dizer, OK, eu escrevi. 802 00:39:46,080 --> 00:39:49,570 E, em seguida, tipo de esperar por você para dar um pouco mais antes de realmente 803 00:39:49,570 --> 00:39:51,380 escrevê-lo para o console. 804 00:39:51,380 --> 00:39:54,040 >> Assim, a razão que fosse esse o caso - 805 00:39:54,040 --> 00:39:56,450 e é uma espécie de não relacionado para o sono - 806 00:39:56,450 --> 00:40:00,060 é que o sono era uma espécie de apenas injetado ali para demonstrar a 807 00:40:00,060 --> 00:40:02,480 fato de que ele não escreve lo de forma síncrona. 808 00:40:02,480 --> 00:40:06,210 Mas a razão para isso é apenas desempenho de modo que você não tem que 809 00:40:06,210 --> 00:40:08,920 fazer que muitos contatos para o sistema operacional. 810 00:40:08,920 --> 00:40:12,300 >> Mas aqui, o que estamos realmente tentando fazer com essa coisa de sono é apenas mostrar 811 00:40:12,300 --> 00:40:17,730 que, quando temos duas pessoas que visitam Neste site, ele não está indo para colocar 812 00:40:17,730 --> 00:40:22,310 los em uma linha onde ele vai dizer Eu tenho que ajudá-lo, e então quando eu estou 813 00:40:22,310 --> 00:40:25,350 totalmente concluído ajudá-lo depois de estes de cinco segundos, então eu vou 814 00:40:25,350 --> 00:40:26,750 avançar para a próxima pessoa. 815 00:40:26,750 --> 00:40:29,515 Então pedido da primeira pessoa não amarrar esse ciclo de eventos 816 00:40:29,515 --> 00:40:31,610 se isso faz sentido. 817 00:40:31,610 --> 00:40:34,980 >> Mas aqui é realmente um exemplo de algo que vai amarrar 818 00:40:34,980 --> 00:40:36,090 o ciclo de eventos. 819 00:40:36,090 --> 00:40:39,130 Então aqui está uma função horrível calcular o Fibonacci enésima. 820 00:40:39,130 --> 00:40:43,510 É literalmente a pior maneira possível calcular o número de Fibonacci enésima. 821 00:40:43,510 --> 00:40:48,480 E isso é realmente apenas para reconhecer de onde veio isso, 822 00:40:48,480 --> 00:40:49,330 há realmente - 823 00:40:49,330 --> 00:40:53,230 Quero dizer, você pode tentar ir encontrá-lo -, mas não há como um blog muito demorado 824 00:40:53,230 --> 00:40:54,130 post que alguém escreveu. 825 00:40:54,130 --> 00:40:55,660 É como uma daquelas coisas Reddit. 826 00:40:55,660 --> 00:40:59,650 Mas alguém criticou Node.js e eles usaram isso como um exemplo. 827 00:40:59,650 --> 00:41:03,700 Então eu meio que queria apenas mostrar-lhe duas perspectivas diferentes apenas para obter 828 00:41:03,700 --> 00:41:07,320 uma compreensão geral dos conceitos por trás dessas duas coisas. 829 00:41:07,320 --> 00:41:13,050 >> Mas isso é escolhido como apenas um horrível, computacionalmente horrivelmente ineficiente 830 00:41:13,050 --> 00:41:15,940 maneira intensiva para calcular o enésimo número de Fibonacci. 831 00:41:15,940 --> 00:41:21,180 Assim como uma nota lateral, por isso é ele horrível como, de uma forma? 832 00:41:21,180 --> 00:41:23,210 Yep? 833 00:41:23,210 --> 00:41:25,130 >> AUDIÊNCIA: Digamos que você comece com 1.000. 834 00:41:25,130 --> 00:41:27,050 1000 se divide em 999 e 998. 835 00:41:27,050 --> 00:41:28,970 Cada desta divide-se em duas coisas. 836 00:41:28,970 --> 00:41:30,890 Cada desta divide-se em duas coisas. 837 00:41:30,890 --> 00:41:31,355 >> KEVIN SCHMID: Certo. 838 00:41:31,355 --> 00:41:32,400 >> AUDIÊNCIA: Todo o caminho para baixo. 839 00:41:32,400 --> 00:41:32,840 >> KEVIN SCHMID: Exatamente. 840 00:41:32,840 --> 00:41:37,330 Então, só para repetir para a câmera, se eu chamar fib em 1000 ou algo parecido 841 00:41:37,330 --> 00:41:41,810 assim, é óbvio que não é menos do que ou igual a um, então eu vou 842 00:41:41,810 --> 00:41:46,040 ir a este caso o mais, e então eu vou para chamar fib 999 mais fib 998. 843 00:41:46,040 --> 00:41:50,290 E, em seguida, praticamente todos que trabalho que fib 999 faz é 844 00:41:50,290 --> 00:41:52,950 tipo de, a este nível. 845 00:41:52,950 --> 00:41:55,620 Se você descer, é ainda mais redundante do que isso, mas se você apenas 846 00:41:55,620 --> 00:42:01,390 acho computação lorota 998 recebe nos muito perto de fib 999. 847 00:42:01,390 --> 00:42:05,860 Então, nós realmente deve ser um pouco mais inteligente sobre como nós tipo de reutilização 848 00:42:05,860 --> 00:42:07,580 estes, mas não estamos reutilizando essas coisas em tudo. 849 00:42:07,580 --> 00:42:11,860 Então você pode imaginar este gigantesco, gigantesca árvore que é simplesmente horrível. 850 00:42:11,860 --> 00:42:12,940 >> Mas de qualquer maneira, OK. 851 00:42:12,940 --> 00:42:14,040 Então era lorota. 852 00:42:14,040 --> 00:42:15,530 Ele só tem um tempo para ser executado. 853 00:42:15,530 --> 00:42:16,510 Yep? 854 00:42:16,510 --> 00:42:17,760 >> AUDIÊNCIA: [inaudível]. 855 00:42:17,760 --> 00:42:20,430 856 00:42:20,430 --> 00:42:22,481 >> KEVIN SCHMID: Oh, você poderia repetir a pergunta? 857 00:42:22,481 --> 00:42:23,731 >> AUDIÊNCIA: [inaudível]. 858 00:42:23,731 --> 00:42:30,840 859 00:42:30,840 --> 00:42:33,990 >> KEVIN SCHMID: Ah então isso é apenas um código que vai ser uma espécie de no 860 00:42:33,990 --> 00:42:34,850 lado do servidor. 861 00:42:34,850 --> 00:42:38,100 Então, isso não vai ser encontrada no navegador ou nada. 862 00:42:38,100 --> 00:42:42,160 É basicamente o que nós temos é que, quando o usuário aqui praticamente marcas 863 00:42:42,160 --> 00:42:45,300 seu pedido de novo, quando uma espécie de fazer um pedido, vamos chamar 864 00:42:45,300 --> 00:42:47,040 esta função no lado do servidor. 865 00:42:47,040 --> 00:42:50,480 E então nós vamos obter o resultado de volta de chamar essa função. 866 00:42:50,480 --> 00:42:52,460 E então nós vamos apenas imprimir lo para o utilizador. 867 00:42:52,460 --> 00:42:54,580 Assim, o usuário não realmente lidar com esta função muito. 868 00:42:54,580 --> 00:42:57,270 >> Foi essa a pergunta? 869 00:42:57,270 --> 00:42:58,470 Será que isso faz sentido? 870 00:42:58,470 --> 00:42:58,810 OK. 871 00:42:58,810 --> 00:43:00,930 Legal. 872 00:43:00,930 --> 00:43:04,240 >> Então, novamente, nós fazemos toda essa res.writeHead coisa em que imprimir 873 00:43:04,240 --> 00:43:05,150 o cabeçalho. 874 00:43:05,150 --> 00:43:09,730 E então eu terminar a resposta, fazendo o número mágico é 45 lorota. 875 00:43:09,730 --> 00:43:12,100 Então vamos executar este servidor. 876 00:43:12,100 --> 00:43:15,190 Então, eu vou fazer um nó fib.js. 877 00:43:15,190 --> 00:43:17,340 Então agora meu servidor lorota está em execução. 878 00:43:17,340 --> 00:43:21,790 >> E então, aqui, eu vou para fazer um desses. 879 00:43:21,790 --> 00:43:22,200 OK? 880 00:43:22,200 --> 00:43:24,960 Então, eu só vou dizer: Curl. 881 00:43:24,960 --> 00:43:32,226 Então, ele vai demorar um pouco, mas espero que em breve ele vai terminar e 882 00:43:32,226 --> 00:43:35,660 ele irá imprimir que 45 Fibonacci número. 883 00:43:35,660 --> 00:43:36,910 >> AUDIÊNCIA: [inaudível]. 884 00:43:36,910 --> 00:43:40,720 885 00:43:40,720 --> 00:43:42,050 >> KEVIN SCHMID: deve ser feito em breve. 886 00:43:42,050 --> 00:43:43,780 Por isso, deve levar de cinco a seis segundos. 887 00:43:43,780 --> 00:43:48,570 Eu não sei que é apenas ser super V8 rápida, mas em qualquer caso, esta é uma 888 00:43:48,570 --> 00:43:52,700 muito curto exemplo e propositadamente deselegante de um não-trivial 889 00:43:52,700 --> 00:43:54,200 computação. 890 00:43:54,200 --> 00:43:56,700 Então, depois de um tempo, ele não conseguir isso. 891 00:43:56,700 --> 00:44:02,130 >> Mas agora, o que se eu fizer o mesmo tipo de experiência como antes, onde eu faço 892 00:44:02,130 --> 00:44:04,010 dois pedidos ao mesmo tempo? 893 00:44:04,010 --> 00:44:06,990 Então, aqui eu estou indo para uma onda de esse endereço, e eu vou 894 00:44:06,990 --> 00:44:08,260 fazer outro Curl. 895 00:44:08,260 --> 00:44:12,070 E lembre-se, quando nós fizemos isso para o dormir servidor, quando estamos basicamente teve que 896 00:44:12,070 --> 00:44:15,320 após cinco segundos, eles bastante muito tanto voltou direita 897 00:44:15,320 --> 00:44:16,380 em torno do mesmo tempo. 898 00:44:16,380 --> 00:44:18,650 Por isso, não foi particularmente amarrado. 899 00:44:18,650 --> 00:44:20,290 >> Mas vamos tentar isso agora. 900 00:44:20,290 --> 00:44:22,370 OK, por isso temos os nossos dois processos. 901 00:44:22,370 --> 00:44:24,210 Lembre-se esses são os IDs de processo. 902 00:44:24,210 --> 00:44:25,900 Este vai ser um pouco desajeitado, enquanto nós parar. 903 00:44:25,900 --> 00:44:31,340 904 00:44:31,340 --> 00:44:35,360 Então vamos ficar aqui e esperar. 905 00:44:35,360 --> 00:44:37,090 >> Então, um deles deve vir volta depois como - 906 00:44:37,090 --> 00:44:39,190 OK, então um deles voltou. 907 00:44:39,190 --> 00:44:43,570 Mas, então, por que não fez o segundo um voltar apenas ainda? 908 00:44:43,570 --> 00:44:44,389 Yep? 909 00:44:44,389 --> 00:44:49,280 >> AUDIÊNCIA: O servidor não pode fazer nada enquanto ele está computando que grande número. 910 00:44:49,280 --> 00:44:51,620 >> KEVIN SCHMID: Certo. 911 00:44:51,620 --> 00:44:55,395 Então, a resposta foi apenas que o servidor realmente não pode fazer nada enquanto 912 00:44:55,395 --> 00:44:57,460 ele está computando o número de Fibonacci. 913 00:44:57,460 --> 00:44:59,360 Então agora eu só tenho minhas duas coisas de volta. 914 00:44:59,360 --> 00:45:03,210 Mas eu acho que só de pensar sobre o código um pouco mais, como ele está trabalhando 915 00:45:03,210 --> 00:45:05,030 e tudo mais. 916 00:45:05,030 --> 00:45:11,750 >> Portanto, esta função aqui é o código que Eu disse a este servidor para executar quando se 917 00:45:11,750 --> 00:45:14,100 recebe uma nova solicitação de entrada. 918 00:45:14,100 --> 00:45:17,940 Por isso, só vai percorrer este código inteiro e, em seguida, ele vai ir 919 00:45:17,940 --> 00:45:21,120 voltar para o ciclo de eventos e, em seguida, continuar verificação de novos eventos. 920 00:45:21,120 --> 00:45:23,670 Então, basicamente o que temos a acontecer é o servidor está 921 00:45:23,670 --> 00:45:25,080 ouvindo coisas novas. 922 00:45:25,080 --> 00:45:28,070 A primeira pessoa que pede o que é 45. 923 00:45:28,070 --> 00:45:30,490 Corremos esse código para calcular isso. 924 00:45:30,490 --> 00:45:33,420 Este código tem cerca de cinco seis segundos para executar. 925 00:45:33,420 --> 00:45:36,990 Então vamos voltar para o ciclo de eventos e verificar se há novas solicitações. 926 00:45:36,990 --> 00:45:42,700 >> Portanto, este é um exemplo de como, se tem coisas que são chamados de computação 927 00:45:42,700 --> 00:45:48,140 obrigado, ou usar um monte de computacional, não poder, mas como são 928 00:45:48,140 --> 00:45:50,260 computacionalmente intensivo - 929 00:45:50,260 --> 00:45:54,080 Eu acho que uma coisa a dizer sobre isso é que esta função está fazendo totalmente, 930 00:45:54,080 --> 00:45:56,310 em sua maior parte, bastante direito trabalho útil. 931 00:45:56,310 --> 00:45:59,970 O tempo todo de que essa chamada de retorno função estava funcionando, foi muito 932 00:45:59,970 --> 00:46:03,670 muito passar a maior parte de seu tempo apenas computação número que Fibonacci enésima. 933 00:46:03,670 --> 00:46:05,930 >> Mas nós só tinha um fio para lidar com eles. 934 00:46:05,930 --> 00:46:10,270 No modelo Apache, quando duas pessoas fez o pedido para obter fib 45, nós 935 00:46:10,270 --> 00:46:11,610 teria dois segmentos diferentes. 936 00:46:11,610 --> 00:46:15,060 E então o trabalho do sistema operacional teria sido, ou o nível de usuário 937 00:46:15,060 --> 00:46:18,660 código que gerencia os threads, teria foi a fatia que em cima da 938 00:46:18,660 --> 00:46:23,060 CPU, ou mesmo se você tivesse várias CPUs, distribuí-las uniformemente em todo o CPUs 939 00:46:23,060 --> 00:46:26,130 de modo a que ambos foram acabamento praticamente ao mesmo tempo. 940 00:46:26,130 --> 00:46:31,120 >> Então, só para mostrar como podemos classificar de - e este não é um perfeito total de 941 00:46:31,120 --> 00:46:34,280 solução, mas uma espécie de como podemos fazer uma volta aqui e fazer 942 00:46:34,280 --> 00:46:35,880 um pouco melhor. 943 00:46:35,880 --> 00:46:41,540 Então, o que eu tenho aqui é um programa chamado Fib C. E este usa basicamente 944 00:46:41,540 --> 00:46:45,690 mais um dos módulos do nó chamado O Módulo de processo filho. 945 00:46:45,690 --> 00:46:49,210 Então eu tenho que incluiu no topo tipo de como eu faria um quilo incluem 946 00:46:49,210 --> 00:46:51,230 PROCESS.H criança ou algo assim. 947 00:46:51,230 --> 00:46:56,210 Agora eu tenho acesso a esta variável CP que tem todo o meu funcionalidade. 948 00:46:56,210 --> 00:47:01,810 >> Então agora o que estou fazendo nesta resposta manipulador é que eu estou a execução deste programa 949 00:47:01,810 --> 00:47:04,100 dot cortar fib 45. 950 00:47:04,100 --> 00:47:06,820 Então o que eu fiz - e eu só vou para sair deste programa para um 951 00:47:06,820 --> 00:47:07,620 pouco - 952 00:47:07,620 --> 00:47:11,060 é que eu escrevi um programa em C que basicamente, calcula o 953 00:47:11,060 --> 00:47:12,630 enésimo número de Fibonacci. 954 00:47:12,630 --> 00:47:15,960 Então, aqui é apenas um programa que eu escrevi em C, que calcula este. 955 00:47:15,960 --> 00:47:19,040 Eu posso compilá-lo, e eu posso correr lo na linha de comando. 956 00:47:19,040 --> 00:47:22,150 E está indo para calcular a Número 45 Fibonacci. 957 00:47:22,150 --> 00:47:24,510 >> Então, observe ele só leva praticamente o mesmo tempo. 958 00:47:24,510 --> 00:47:28,240 Eu provavelmente poderia ter usado traço 03 a otimizá-lo ou algo assim, 959 00:47:28,240 --> 00:47:31,050 mas eu só fiz como regulares configurações do compilador. 960 00:47:31,050 --> 00:47:33,260 E ele imprime-lo. 961 00:47:33,260 --> 00:47:36,830 >> Mas agora, o que estou fazendo uma espécie de? 962 00:47:36,830 --> 00:47:39,800 Oh, desculpe, arquivo errado. 963 00:47:39,800 --> 00:47:42,800 Então eu faço a mesma coisa com o cabeçalho como antes. 964 00:47:42,800 --> 00:47:45,780 Então eu faço este cp.exec. 965 00:47:45,780 --> 00:47:49,460 Então o que é que isto vai fazer é que é indo para executar este programa. 966 00:47:49,460 --> 00:47:51,960 Mas a maneira como isso funciona é que ele não vai esperar por 967 00:47:51,960 --> 00:47:53,400 que o programa termine. 968 00:47:53,400 --> 00:47:56,000 Diz apenas, basicamente, executar este programa. 969 00:47:56,000 --> 00:47:58,700 Então, basicamente, digite isso no prompt de comando tipo de. 970 00:47:58,700 --> 00:48:02,350 >> E então, quando você é feito com -lo, execute esta função. 971 00:48:02,350 --> 00:48:04,800 Então, agora nós tipo de obter este coisa toda restaurada de 972 00:48:04,800 --> 00:48:06,750 como não estamos à espera. 973 00:48:06,750 --> 00:48:08,530 Será que esse tipo de faz sentido? 974 00:48:08,530 --> 00:48:08,990 Yep? 975 00:48:08,990 --> 00:48:11,060 >> AUDIÊNCIA: [inaudível]? 976 00:48:11,060 --> 00:48:13,610 >> KEVIN SCHMID: Então, isso vai realmente abrir um novo processo para fazê-lo. 977 00:48:13,610 --> 00:48:19,310 Portanto, este é, na verdade, em alguns aspectos, mal, não super mal, mas é 978 00:48:19,310 --> 00:48:22,990 importante dizer que esta é uma espécie de voltar para, por um lado, o Apache 979 00:48:22,990 --> 00:48:26,450 modelo onde fazemos segmentos e processos para cada solicitação ou 980 00:48:26,450 --> 00:48:29,280 processos para cada solicitação. 981 00:48:29,280 --> 00:48:32,090 Portanto, esta é uma espécie de análogo para o que faz Apache. 982 00:48:32,090 --> 00:48:35,110 Em alguns casos, apenas irá utilizar um novo segmento, que é um pouco mais de luz 983 00:48:35,110 --> 00:48:39,040 peso do que um processo, mas poderia Apache acabam se bifurcar um novo processo 984 00:48:39,040 --> 00:48:43,370 que é uma espécie do que fazemos aqui implicitamente, fazendo ponto barra fib 45. 985 00:48:43,370 --> 00:48:48,690 >> E então, nesse caso, nós meio que incorrem as mesmas despesas de processos. 986 00:48:48,690 --> 00:48:50,710 Portanto, esta é apenas uma coisa que você pode fazer. 987 00:48:50,710 --> 00:48:52,600 Mas só para mostrar esse tipo de execução. 988 00:48:52,600 --> 00:48:57,120 E essa conversa é apenas realmente destinado a apresentar este tipo de programas como 989 00:48:57,120 --> 00:49:00,710 maneira de mostrar diferentes perspectivas sobre como criar servidores assim. 990 00:49:00,710 --> 00:49:08,300 Portanto, este está em execução e, em seguida, agora se eu fizer isso de novo, eu tenho duas IDs de processo. 991 00:49:08,300 --> 00:49:10,320 >> Vamos falar sobre coisas a apontar. 992 00:49:10,320 --> 00:49:11,980 Então, percebe que eles são poucos. 993 00:49:11,980 --> 00:49:12,700 Isso é legal. 994 00:49:12,700 --> 00:49:15,140 Porque era 27.122 antes. 995 00:49:15,140 --> 00:49:18,580 Mas observe agora, eles voltaram mais ou menos ao mesmo tempo. 996 00:49:18,580 --> 00:49:23,960 >> E agora, uma boa pergunta para perguntar sobre por que foi que o caso é, cujo trabalho 997 00:49:23,960 --> 00:49:27,590 era agora a sorte de fazer essas coisas tipo de fair play com cada 998 00:49:27,590 --> 00:49:31,350 outras, essas duas instâncias da dot barra fib 45 que eu corri 999 00:49:31,350 --> 00:49:32,880 ou que correu Node? 1000 00:49:32,880 --> 00:49:36,940 Quem tipo de torna justo que ambos se o tipo de tempo de execução equilibrada? 1001 00:49:36,940 --> 00:49:42,900 1002 00:49:42,900 --> 00:49:44,220 >> AUDIÊNCIA: [inaudível]. 1003 00:49:44,220 --> 00:49:44,620 >> KEVIN SCHMID: Yeah. 1004 00:49:44,620 --> 00:49:49,740 Então, basicamente, quando eu faço ponto lorota barra 45 ou algo assim, agora é 1005 00:49:49,740 --> 00:49:53,750 tipo de cima para que o sistema operacional lidar com o tempo de execução desses programas. 1006 00:49:53,750 --> 00:49:56,920 E agora ele pode programá-los em diferentes CPUs ou 1007 00:49:56,920 --> 00:49:58,330 pode programá-los. 1008 00:49:58,330 --> 00:50:01,870 Pode cortar-se o tempo em que um CPU recebe-lo ou que obtenham 1009 00:50:01,870 --> 00:50:03,330 para ser executado em uma CPU. 1010 00:50:03,330 --> 00:50:05,620 Então essa é a idéia por trás disso. 1011 00:50:05,620 --> 00:50:07,220 Isso faz sentido para todo mundo? 1012 00:50:07,220 --> 00:50:10,950 Então agora Node não é realmente jogando um parte em dividir essas tarefas. 1013 00:50:10,950 --> 00:50:12,200 OK. 1014 00:50:12,200 --> 00:50:14,050 1015 00:50:14,050 --> 00:50:17,840 >> Então, isso é quase que para exemplos. 1016 00:50:17,840 --> 00:50:23,370 Eu só queria mostrar mais uma coisa porque um monte de presente até agora tem sido 1017 00:50:23,370 --> 00:50:27,350 não totalmente super-prático em alguns casos. 1018 00:50:27,350 --> 00:50:30,970 Eu posso imaginar voltando para casa após este falar e algo e dizendo como, 1019 00:50:30,970 --> 00:50:35,710 bem, eu meio que tenho de que a conversa que Eu posso fazer um servidor de Fibonacci para 1020 00:50:35,710 --> 00:50:37,360 meu projeto final. 1021 00:50:37,360 --> 00:50:40,770 Então aqui está apenas uma espécie de mais um exemplo que espero venha a ser - 1022 00:50:40,770 --> 00:50:44,620 talvez não, mas talvez - um pouco mais tipo de relevante para projetos finais e 1023 00:50:44,620 --> 00:50:46,440 pensando no futuro para coisas assim. 1024 00:50:46,440 --> 00:50:48,870 >> Portanto, esta é chat.js. 1025 00:50:48,870 --> 00:50:52,290 Portanto, esta é uma espécie de um pouco de amostra código do lado do servidor que você pode usar para 1026 00:50:52,290 --> 00:50:55,700 configurar um servidor de bate-papo pequeno como você pode ter visto no 1027 00:50:55,700 --> 00:50:56,630 Facebook Chat ou o que seja. 1028 00:50:56,630 --> 00:50:59,990 Então eu não estou dizendo que isso é como o Facebook Bate-papo, mas este é o tipo de 1029 00:50:59,990 --> 00:51:06,230 como uma boa - talvez não é bom, mas talvez ponto de partida para um bate-papo - bom 1030 00:51:06,230 --> 00:51:08,560 servidor para o seu site para um projeto final. 1031 00:51:08,560 --> 00:51:11,040 Então, vamos olhar para o que está fazendo. 1032 00:51:11,040 --> 00:51:15,500 >> Então, nós estamos recebendo essa coisa especial , na parte superior, este var SIO 1033 00:51:15,500 --> 00:51:17,050 é igual a exigir Socket.IO. 1034 00:51:17,050 --> 00:51:20,280 Então, isso é outra coisa que não faz realmente vir junto com 1035 00:51:20,280 --> 00:51:22,300 Node mas você pode instalá-lo. 1036 00:51:22,300 --> 00:51:23,480 É um módulo Node. 1037 00:51:23,480 --> 00:51:25,670 Então, é como alguns extensão para o nó. 1038 00:51:25,670 --> 00:51:29,220 >> SocketIO é realmente muito legal. 1039 00:51:29,220 --> 00:51:32,550 É uma abstração que, basicamente, o que que ele faz é se ele permite que você 1040 00:51:32,550 --> 00:51:35,770 tem esse fluxo de comunicação entre uma web 1041 00:51:35,770 --> 00:51:39,430 navegador e um servidor web. 1042 00:51:39,430 --> 00:51:45,250 Então, em sua maior parte, até agora, nós tivemos estes muito rápida um segundo ou dois 1043 00:51:45,250 --> 00:51:48,790 segundo as comunicações entre um web navegador eo servidor web. 1044 00:51:48,790 --> 00:51:53,310 Então, é basicamente ir para google.com, get o material, enviá-lo de volta, e, em seguida, 1045 00:51:53,310 --> 00:51:53,770 estamos a fazer. 1046 00:51:53,770 --> 00:51:56,560 Nós nunca estamos falando de novo até que o tipos de usuário em outra coisa. 1047 00:51:56,560 --> 00:52:01,090 >> Mas o que Socket.IO e mesmo tipo de coisas - e SocketIO é realmente um 1048 00:52:01,090 --> 00:52:03,940 das coisas que é construído sobre como WebSocket que é uma espécie de disponível 1049 00:52:03,940 --> 00:52:06,440 como parte do HTML5 - 1050 00:52:06,440 --> 00:52:09,620 que permite que você tenha esta diálogo contínuo. 1051 00:52:09,620 --> 00:52:13,990 E isto é muito útil para um servidor de chat tipo de coisa, porque é 1052 00:52:13,990 --> 00:52:17,390 como uma espécie de diálogo contínuo em certa forma, porque se você está conversando 1053 00:52:17,390 --> 00:52:21,540 com alguém, agora você pode apenas enviar um mensagem para dentro do cano, e, em seguida, o 1054 00:52:21,540 --> 00:52:23,940 servidor pode enviar uma mensagem para baixo a tubulação para a outra pessoa que você é 1055 00:52:23,940 --> 00:52:24,520 conversando. 1056 00:52:24,520 --> 00:52:26,903 E então você pode ter este trocar assim. 1057 00:52:26,903 --> 00:52:30,590 1058 00:52:30,590 --> 00:52:32,850 >> Então, isso é o tipo do que SocketIO é bom para. 1059 00:52:32,850 --> 00:52:38,400 A razão que SocketIO usa WebSockets como uma coisa é que em 1060 00:52:38,400 --> 00:52:43,980 Além de WebSockets simplesmente velhos, ele também faz alguns truques para, basicamente, 1061 00:52:43,980 --> 00:52:45,610 compatibilizar isso browser. 1062 00:52:45,610 --> 00:52:50,040 Assim, navegadores como o Internet Explorer infelizmente não suportam WebSockets 1063 00:52:50,040 --> 00:52:50,810 direito fora da caixa. 1064 00:52:50,810 --> 00:52:55,290 Então, ele usa algum outro tipo de puro legal coisas com Adobe Flash para permitir 1065 00:52:55,290 --> 00:52:57,170 você ter o suporte ao navegador cruz. 1066 00:52:57,170 --> 00:52:58,800 Então, isso é realmente útil. 1067 00:52:58,800 --> 00:53:02,440 >> E na verdade, eu sei que eu sou o tipo de execução em tempo aqui, mas CS50 1068 00:53:02,440 --> 00:53:08,490 Discutir, você já viu algo como, eu não sei, em branco assim e assim é 1069 00:53:08,490 --> 00:53:11,030 responder a este post ou algo assim, essa característica? 1070 00:53:11,030 --> 00:53:12,250 Isso é SocketIO. 1071 00:53:12,250 --> 00:53:15,580 Então, quando alguém começa a digitar no caixa de discutir a dar uma resposta ou 1072 00:53:15,580 --> 00:53:20,040 alguma coisa, o seu navegador não tem o que há de chamado SocketIO emite algum tipo de 1073 00:53:20,040 --> 00:53:22,660 caso em que diz que alguém é responder a este post. 1074 00:53:22,660 --> 00:53:26,110 >> Em seguida, o servidor diz: OK, o que eu tenho que fazer? 1075 00:53:26,110 --> 00:53:29,270 Bem, agora eu tenho que dizer a esses outros caras que estão no CS50 Discutir procurando 1076 00:53:29,270 --> 00:53:31,170 neste post que alguém está respondendo. 1077 00:53:31,170 --> 00:53:34,190 Então, isso é o tipo do que é SocketIO bom para, este tipo contínuo de 1078 00:53:34,190 --> 00:53:35,930 fluxo de diálogo. 1079 00:53:35,930 --> 00:53:37,250 OK. 1080 00:53:37,250 --> 00:53:40,060 >> Então, o que eu tenho aqui - e estamos apenas vai ignorar a matriz conexões 1081 00:53:40,060 --> 00:53:41,390 para um pouco - 1082 00:53:41,390 --> 00:53:43,080 o que eu faço é que eu ouvir outra. 1083 00:53:43,080 --> 00:53:46,880 Então, isso é apenas a forma como é Socket.IO dizendo vamos ouvir nesta porta. 1084 00:53:46,880 --> 00:53:50,060 E então eu faço isso na conexão. 1085 00:53:50,060 --> 00:53:53,360 Então, isso é basicamente só soquete IO de maneira de dizer, quando recebemos uma 1086 00:53:53,360 --> 00:53:55,840 conexão, eu quero que você para executar este código. 1087 00:53:55,840 --> 00:53:59,870 >> E note que em vez de ter rec e res passaram lá tenho Socket. 1088 00:53:59,870 --> 00:54:03,260 E essa idéia de soquete é basicamente isso coisa que você pode gravar e ler 1089 00:54:03,260 --> 00:54:05,750 de que tem o usuário do mensagens possivelmente. 1090 00:54:05,750 --> 00:54:10,700 E as mensagens que você enviar pode passar por isso Socket. 1091 00:54:10,700 --> 00:54:12,140 Será que isso faz sentido? 1092 00:54:12,140 --> 00:54:14,490 Então é essa coisa de continuar. 1093 00:54:14,490 --> 00:54:17,820 >> Então, o que eu faço é chamar Socket.emit. 1094 00:54:17,820 --> 00:54:20,330 E emitem leva muito muito dois argumentos. 1095 00:54:20,330 --> 00:54:24,100 O primeiro argumento é uma string apenas representando o tipo de 1096 00:54:24,100 --> 00:54:25,270 coisa que você está emitindo. 1097 00:54:25,270 --> 00:54:28,120 Portanto, para este caso, eu tenho uso esta nova mensagem string. 1098 00:54:28,120 --> 00:54:32,670 E isso é só basicamente dizendo que o tipo de tal coisa, o que eu sou 1099 00:54:32,670 --> 00:54:34,750 enviando, é uma nova mensagem. 1100 00:54:34,750 --> 00:54:38,460 Assim, você pode ouvir para tipos específicos como nova mensagem ou qualquer outra coisa 1101 00:54:38,460 --> 00:54:39,960 usando ponto em. 1102 00:54:39,960 --> 00:54:44,570 >> Então conexão eo usuário enviado para lá, se você olha para onde chamamos ponto em diante, 1103 00:54:44,570 --> 00:54:48,150 essas são outras cordas que representam tipos de mensagens do usuário. 1104 00:54:48,150 --> 00:54:52,060 Então, é basicamente você pode ter este emitem um destes tipos de mensagens, e 1105 00:54:52,060 --> 00:54:55,520 em seguida, fazer algo em resposta a um destes tipos de mensagens 1106 00:54:55,520 --> 00:54:57,640 >> Então, eu estou emitindo esta mensagem nova. 1107 00:54:57,640 --> 00:55:00,540 Vamos ignorar connections.push por um segundo. 1108 00:55:00,540 --> 00:55:03,360 Mas, então, eu digo, usuário Socket.on enviada. 1109 00:55:03,360 --> 00:55:07,540 Então, agora é uma espécie de gosto quando o user me envia uma mensagem, eu quero 1110 00:55:07,540 --> 00:55:09,240 você executar este código. 1111 00:55:09,240 --> 00:55:12,080 E note que essa função anônima está tomando nesta variável 1112 00:55:12,080 --> 00:55:16,300 chamada de dados que vai basicamente para ter a mensagem do usuário. 1113 00:55:16,300 --> 00:55:20,700 >> Tipo Então, agora vamos de falar sobre a matriz ligações. 1114 00:55:20,700 --> 00:55:24,590 Portanto, este é projetado para um cliente de chat onde basicamente todo mundo é meio em 1115 00:55:24,590 --> 00:55:25,950 mesma sala de bate-papo. 1116 00:55:25,950 --> 00:55:29,640 Então, basicamente, o que precisamos para manter em torno de uma certa matriz que, basicamente, 1117 00:55:29,640 --> 00:55:33,170 representa todas as pessoas conversando em certa forma, se isso faz sentido. 1118 00:55:33,170 --> 00:55:33,340 Certo? 1119 00:55:33,340 --> 00:55:37,190 Porque nós precisamos de saber quem são esses caras são para que possamos enviar-lhes as mensagens 1120 00:55:37,190 --> 00:55:39,140 que outras pessoas enviam para nós. 1121 00:55:39,140 --> 00:55:44,440 >> Então, o que este código faz é quando o usuário envia uma mensagem - que é o tipo de 1122 00:55:44,440 --> 00:55:45,300 o evento - 1123 00:55:45,300 --> 00:55:47,120 vamos executar este código. 1124 00:55:47,120 --> 00:55:51,240 E o que nós fazemos é percorrer este matriz que temos chamado de conexões. 1125 00:55:51,240 --> 00:55:54,390 E praticamente para cada conexão exceto o que é nosso, que é 1126 00:55:54,390 --> 00:55:59,520 o que esse código diz, nós enviar uma nova mensagem com que anexado mensagem 1127 00:55:59,520 --> 00:56:01,210 informações. 1128 00:56:01,210 --> 00:56:04,880 >> Então, se você observar aqui, o que eu fiz quando o usuário realmente faz uma nova 1129 00:56:04,880 --> 00:56:08,560 conexão é que eu adicionei com o JavaScript.push método, isto é 1130 00:56:08,560 --> 00:56:12,100 basicamente, apenas dizendo como adicionar que soquete como um valor em 1131 00:56:12,100 --> 00:56:13,900 nossa disposição conexões. 1132 00:56:13,900 --> 00:56:20,560 Agora, quando esse código é executado, ele será enviar as coisas para aqueles especial 1133 00:56:20,560 --> 00:56:22,020 ligações. 1134 00:56:22,020 --> 00:56:26,980 Portanto, este pode ser um bom ponto de partida para fazer um servidor de chat 1135 00:56:26,980 --> 00:56:28,250 ou algo semelhante. 1136 00:56:28,250 --> 00:56:33,315 >> E o tipo de coisa legal é que o código que você vê aqui para como em e 1137 00:56:33,315 --> 00:56:36,390 emitir e coisas assim é o mesmo tipo de código JavaScript que você faria 1138 00:56:36,390 --> 00:56:39,260 escrever no navegador para interagir com o servidor. 1139 00:56:39,260 --> 00:56:42,480 Então é por isso SocketIO é uma espécie de puro e útil na medida em que forma. 1140 00:56:42,480 --> 00:56:45,680 1141 00:56:45,680 --> 00:56:49,250 >> Ah, e só mais uma coisa rapidinho. 1142 00:56:49,250 --> 00:56:55,970 Havia um projeto final CS50 ano passado que, basicamente, implementou um bate-papo 1143 00:56:55,970 --> 00:56:57,840 servidor em Node.js. 1144 00:56:57,840 --> 00:57:01,350 Eu acho que é Harvardchats.org mas eu não sou - 1145 00:57:01,350 --> 00:57:02,940 OK. 1146 00:57:02,940 --> 00:57:06,190 Eu não tenho certeza o que a URL é, mas Eu posso enviar isso depois. 1147 00:57:06,190 --> 00:57:09,260 Mas é legal o que você pode fazer com Node.js. 1148 00:57:09,260 --> 00:57:14,680 >> Então eu espero que, em geral, vocês têm um boa noção do que Node.js é útil 1149 00:57:14,680 --> 00:57:17,870 e como você poderia talvez aplicar ao seu projeto final. 1150 00:57:17,870 --> 00:57:21,050 Eu vou estar enviando um pouco mais recursos juntamente com este. 1151 00:57:21,050 --> 00:57:23,170 E obrigado por terem vindo. 1152 00:57:23,170 --> 00:57:23,610 Obrigado. 1153 00:57:23,610 --> 00:57:27,168 >> [Aplausos]