>> KEVIN Schmid: Hola a todos.
Benvido ao seminario CS50 en Node.js.
O meu nome é Kevin.
Eu son un TF CS50.
E eu son unha especie de como realmente animado deste seminario.
Creo Node.js é moi legal.
Esperamos que este seminario poden usar como unha boa, eu creo, trampolín para
algúns dos seus proxectos finais, se vostede está interesado en usar
algo así como Node.js.
>> Imos especie de iniciar o seminario fóra por falando só de un pouco do
tipo de escalabilidade fondo perspectivas de Node.js e logo
imos pasar a algúns exemplos de código.
E eu vou ter o código nun sitio web, e pode ollar para o código.
E despois do seminario, vou tipo de conversa sobre como pode configurar Node.js
no seu computador.
>> Aceptar.
Entón, imos comezar.
Entón, eu creo que eu só quero falar de servidores web, de feito, por primeira vez.
E para comezar esa discusión, teñen basicamente un diagrama que é de
o libro didáctico utilizado para CS61, que basicamente mostra a interacción
entre un proceso cliente, como a súa web navegador ou como o seu cliente obxectivo ou
algo parecido, e un servidor web.
Polo tanto, este tipo de parecido co imaxe que viu na charla sobre
Mércores, onde basicamente temos algúns proceso do cliente, como Google Chrome.
>> E, a continuación, o primeiro paso é a cliente envía unha petición.
Entón isto pode ser algo así como Ben, imos visitar, eu non sei, CS50.net.
Entón, nós emitir este pedido.
E será que alguén se lembra do nome do protocolo que especifica como que
solicitude debe ser estruturada?
Yep.
>> Audiencia: [inaudível].
>> KEVIN Schmid: Exactamente.
Entón, é como HTTP, non?
Entón, basicamente, a especificación de como esta proposta debe realmente ser establecidas
fóra, porque ao final do día, esta proposta é realmente só como un
cadea que basicamente di que quero iso.
E a especificación para iso é HTTP.
Entón, iso é como un protocolo.
>> Entón o servidor recibe este pedido.
Entón, vostedes teñen un servidor web instalado no aparello CS50.
É Apache.
E esta semana, cando se traballa en problema establecer sete, vai realmente estar traballando
co servidor web.
Entón, o servidor recibe a petición, e el ten unha especie de rabuñar a súa
cabeza e dicir, como ben o que fago con isto?
>> Así, con base no que decide facer, a continuación, Pode poñerse en contacto con algún tipo
de recurso.
E este recurso pode ser un chea de cousas distintas.
Por unha banda, pode ser só como un arquivo HTML estático.
Así, podería ser como algúns HTML que é como para
súa páxina persoal.
Pode ser un ficheiro estático como unha imaxe ou como unha película que ten.
Podería ata ter que falar a algún tipo de base de datos
como unha base de datos MySQL
Por iso, non sempre ten de comunicarse cun recurso, pero en
Nalgúns casos, podería.
>> Entón o que vai facer despois diso é que vai
enviar de volta a resposta.
E a resposta a iso é tamén especificado por HTTP.
Entón o cliente pode recibir.
Pode resgala e proceso-la.
E así que ten unha páxina web como Google ou CS50.net ou
todo o que foi.
OK?
>> Polo tanto, esta é a interacción básica que imos estar lidando.
E nós estamos moi bonito será centrar esta parte do
interacción, o servidor.
Aceptar.
Legal.
Alguén ten algunha pregunta?
Aceptar.
>> Entón, como dixemos, o servidor web recibe esta solicitude HTTP e, a continuación, emite o presente
Resposta HTTP.
E, como falamos antes, o Servidor web aparello CS50 é o Apache.
Entón, cando vostedes traballan en I definir sete, vai estar a traballar co
Un servidor Apache.
Vostede non terá que realmente funcionan con Apache directamente de máis.
Vostede especie de configurar Apache algo cando se especifica os hosts virtuais ou
os anfitrións v, e nós imos chegar para que, en un pouco.
>> Pero, basicamente, o servidor web Apache configurado para funcionar co tipo PHP
de fóra da caixa.
Entón, o que realmente pasa é que cando vai a un dos seus sitios web, como, por exemplo,
index.php barra lugares de acollida ou algo así, é o seu navegador envía que
solicitude, e, a continuación, Apache está sentado alí e descobre que facer con el.
E a acción é realizar este código no index.php e
logo envialo de volta.
Polo tanto, non é iso.
Entón nós medio que falamos sobre iso.
Así, podería servir só un arquivo estático ou realizar algún código PHP e, a continuación, pregunta
a resposta.
>> Entón unha pregunta común que pode chegar se é así, como é que imos realmente lidan
con ter varios usuarios á vez?
Entón, imaxine se está escribindo unha web servidor, se tivese un servidor web que
que estaba intentando escribir en algo como C ou algo así,
basicamente, pode pensar sobre como alí podería ser algún tipo de código que
ía recibir a petición, pero, a continuación, ten que facer todo este traballo sobre el.
Pode ter, por exemplo, poñerse en contacto co base de datos ou algo parecido.
Non?
E entón ía facer este tipo de procesamento e, a continuación,
enviado de volta a resposta.
Entón, iso é como a alta visión xeral nivel.
>> Pero non é inmediatamente evidente como pode facelo de xeito que dúas persoas ou
ata 1.000 persoas poderían traballar co seu servidor web, á vez.
Polo tanto, a solución que Apache usa chámase fíos ou procesos.
Entón vostede pode ter oído de estes termos antes.
Todo ben se non ten, pero só creo que preto de fíos ou procesos como formas de
un sistema operativo ou un programa de usuario ou algo así ou un servidor web
a sorte de realizar múltiples cousas á vez.
Así, pode ter oído o termo como fíos de execución.
Entón é medio como se está tipo de multitarefa.
>> E se xa viu no cadro do seu portátil, ou algo así,
multicore, o que podes facer é que pode executar dous fíos diferentes en diferentes
partes do procesador de xeito que poidan de feito, teñen lugar ao mesmo tempo.
Polo tanto, esta é realmente poderoso.
E este é o tipo de Apache do solución a este problema.
>> Entón, hai máis ou menos como calquera cuestión con esta visión aínda?
Entón eu creo que eu medio que escribiu-los alí.
Pero ambos tipo de usar unha morea de memoria.
É moi caro para crear un fío ou un proceso.
>> E parte da razón é que só como cando está executando un programa C
como o seu principal e, a continuación, que as chamadas outra función, que ten
algún tipo de pila.
Entón temas tamén esixen un completo pila separada que
pode ser moi grande.
E se pode imaxinar ter de toneladas de usuarios na súa páxina web, que tería
unha morea de diferentes threads.
Iso é unha chea de pilas para xestionar e manter.
Por iso, é grande o consumo de memoria.
>> E entón, tamén, digamos que só ten unha CPU, ou imos dicir que ten
máis segmentos do que ten eses multicolores.
Non?
Entón, digamos que tivese 10 temas e só tiña cinco CPUs
Vostede medio que ten que facer esa cousa onde cambiar entre a corrente
aquel que está correndo, porque non pode executar as 10 dunha soa vez.
E iso chámase cambio de contexto.
E ese termo realmente ten unha parella de contextos diferentes, pero imos
pense nisto como o cambio entre dous segmentos.
Isto pode ser moi caro, porque basicamente o que tes que facer é vostede
Ten que deixar o que está facendo, salva o Estado dese fío condutor, e
a continuación, cambiar a outro lugar.
>> Así que todo o mundo tipo de ver o motivación do por de temas e
procesos pode ser un pouco voluminoso?
E ten unha pregunta?
Aceptar.
Legal.
Alguén ten algunha dúbida?
Aceptar.
>> Entón, se tomamos un paso atrás por un segundo, non hai como unha especie de
observación que podemos facer sobre unha gran cantidade de aplicacións web.
E iso é realmente que moitos deles realmente non fago isto moi útil
traballar dentro dun segmento.
Entón, ten alguén comezou en P establecer sete en todo?
Entón quere para describir quizais algunhas das partes?
Xa traballou no login ou algo así?
>> Audiencia: Non
>> KEVIN Schmid: Aceptar.
Nunca mente.
Sentímolo.
Pero, basicamente, no conxunto P, está vai estar facendo unha morea de tipo de
consultas a unha base de datos para obter un información deste base de datos.
E o que o código está indo facer, o que este proceso Apache ou
ese segmento Apache estará facendo á vez que ten que poñerse en contacto co
base de datos é que é unha especie de será sentado alí e será
esperando a base de datos para responder.
>> Agora que non pode soar como que un gran tratar, xa que a base de datos está no seu
Aparello CS50, non?
Pero hai algún tipo de rede latencia alí porque agora a web
servidor ten que emitir a súa propia proposta de a base de datos para comunicarse co
base de datos e, a continuación, obter este información de volta.
Entón, agora é como ben esperar por min, eu son indo a ir buscar algo do
base de datos e, a continuación, hai unha moita espera suceder.
Será que isto ten sentido?
>> E para algunhas cousas, non é tan malo así.
Se só ten que, por exemplo, memoria de acceso, que non é como
horrible E / latencia.
E cando digo, eu O latencia /, o que eu son referíndose se é como calquera tipo como
de entrada e saída.
Pero para acceder a un ficheiro no disco, como se eu quería servir HTML estático
ficheiro que foi na miña páxina web ou algo así, eu medio que teño que
parar un pouco, ler este ficheiro en a partir do disco e, en
ese proceso que eu estou esperando.
Eu non estou facendo un traballo útil.
>> Iso non é verdade de todo, pero é común en aplicacións como o conxunto P
sete anos e unha morea de aplicacións que non é
realmente facendo moito pensar.
E cando digo pensamento, quero dicir como o traballo computacional.
Así, o traballo computacional podería ser algo como, por exemplo, vostede quería
escribir un servidor web que calcular o número de Fibonacci enésima.
Isto non soa como un particular servidor web divertido.
Como eu non esperaría que o lugar a ser o seguinte Facebook, pero iso é un pouco
tipo de traballo computacional.
>> E pode imaxinar que, coa substitución algún outro tipo de interesantes
traballo computacional.
Imos dicir que estaba escribindo algo que calculou os graos de
separación entre dúas persoas ou algo parecido.
Así que implica algún tipo de cálculo, non?
E aínda así, para facelo aínda ten para facer unha chea de espera para quizais
ten que consultar unha base de datos para ollar ata quen é amigo de quen ou
algo parecido.
Polo tanto, non hai ese tipo de noción traballo de computacional.
Será que isto ten sentido?
Alguén ten algunha dúbida?
>> Ah, e eu creo que eu poñer os servidores de chat alí porque os servidores de chat son unha especie de
outro bo exemplo diso.
Un servidor de chat non ten facer moito pensar.
El só ten que esperar a que a xente enviar mensaxes e logo, cando
eles, envialos.
OK?
>> Entón, só para recapitular novo, Apache e servidores web similares, como que un garfo
chea de rutas e procesos que pode tipo de desperdicio.
Entón eu creo que a cuestión que pode vir de que é o que necesitamos ter
múltiples rutas e procesos?
E se a xente só tiña un?
>> Entón imos especie de pintar un cadro do que esta sería semellante.
Entón, imos usar só un segmento.
OK?
Entón, só tes que imaxinar iso cun segmento.
>> Imos supor que nós non estabamos realmente facendo que moi útil - e cando digo
útil, quero dicir traballo computacional -
nos múltiples rutas antes.
Entón imos tipo de consolidar todo nun segmento.
Entón, o que se tivésemos un thread que tipo de só dá a volta no circuíto e
constantemente cheques fixo algo novo acontecer.
Así, por exemplo, algo novo pasou podería dicir que eu teño algo de volta de
a base de datos, ou alguén enviado me unha nova solicitude HTTP.
Polo tanto, estas son o tipo de eventos isto acontecer, non?
>> E entón o que podo facer cando as novas as cousas acontecen é neste mesmo segmento
da execución, este único segmento de execución, podo chamar a un código que
ía xestionar esa cousa particular.
Así, por exemplo, se eu teño algo de volta da base de datos, eu podería executar o meu
pequena parte computacional do que en realidade, só prepara a cousa a
mandar de volta para o usuario.
O mesmo acontece con este tipo de ten sentido?
>> Pero o que son realmente a implicacións desa?
Non?
Porque nós escribimos unha morea de código que -
e eu só vou pasar por diante nos diapositivas se está todo OK.
Entón, se non se importar, eu son só vai dar un paso atrás.
Polo tanto, este tipo de cousas é chamado un ciclo de eventos.
OK?
E iso é o tipo de base idea detrás Node.js.
>> Entón, o que está realmente facendo Node.js como unha web servidor é que non hai un único segmento
que é, basicamente, camiñando en un loop como un tempo un tipo de baixo
o capó do Node.js é constantemente verificación, fixo recibimos cousas novas?
E entón el será executado manipuladores que configurou.
Pero unha boa pregunta que facer é: como podemos facer isto acontecer
coas cousas existentes?
>> Entón engada unha liña de código C aquí que basicamente parece que está abrindo unha
ficheiro, non?
Eu Ela saíu só cun disco.
Así que tiven que abrir un novo arquivo.
Así, a forma na que o noso código C para a operación -
e eu creo que a razón pola que eu escollín ficheiros se porque este é o tipo de medida
do traballo I / O que fixemos en C en unha sensación de que hai saída de entrada.
Entón, chamamos iso de código que fai iso f aberta.
E, a continuación, na liña seguinte do noso programa, podemos agora traballar con f.
>> Polo tanto, este sería un exemplo de algo que é como síncrona ou
bloqueado porque nesa primeira liña Non estamos esperando ata que
obter o ficheiro aberto.
Entón, na segunda liña, sabemos que pode traballar con f, pero iso significa que
que a segunda liña non pode realmente realizar ata que a primeira liña está feito.
Será que isto ten sentido?
>> Entón, iso sería malo para poñer nun manipulador de eventos.
E a razón para iso é que este tipo de espera, non?
Polo tanto, este sería revertido nos de volta o mesmo.
E agora nós non tería sequera a beneficio de varios segmentos ou
procesos porque temos un segmento en Node.js.
Isto ten sentido para todo o mundo?
>> Audiencia: Agarde.
Entón cal é o substituto?
>> KEVIN Schmid: Ah, entón si.
Entón, eu estou indo a obter a a substitución.
Aceptar.
Entón, o que se tivésemos algo que quedou así?
Entón, o que agora eu editei f abrir un pouco?
Entón, eu estou pasando o mesmo dous argumentos como antes.
Eu aínda amo a nova música que saíu con.
Pero eu estou pasando un terceiro que é esta variable chamada código.
>> Pero o que é o código de feito Neste contexto?
É como unha variable C regular?
É unha función, non?
E iso pode ser un pouco raro, porque En realidade, estou como agora pasando un
funcionar en outra función.
>> Así, un par de cousas a notar sobre iso.
Un, eu non estou realmente chamando a función de código.
Entón, non ve o código co paréntese esquerdo, paréntese dereita.
Estou só de paso no código.
E en C, o que iso realmente facer é me dar un punteiro para este real
código, e entón isto podería executalo.
Pero basta pensar niso como está pasando o código a executar cando
que arquivo é aberto.
>> Pero o que isto significa que agora o resto do meu programa que podería facer
outras cousas, pode continuar a facer outro cousas, mentres nós, en realidade non esperar, pero
só ten na parte de atrás das nosas cabezas que cando aberta, carreira daquel ficheiro
código na parte superior.
Será que isto ten sentido?
>> E agora, a idea detrás do Node.js é que o código do material facer con f
parte debe ser moi curto e sinxelo e sinxela e non ser realmente
moi computacionalmente intensivas.
Pode ter que abrir outro ficheiro, pero que tamén debe ser moi rápido
porque debe só dicir facer outra f abrir e, a continuación, chamar iso de outro código.
>> Entón, só para ser completamente claro, o f que fai abrir a nova música de Katy Perry
done mp3, que vai moito moi regresar inmediatamente.
E entón podemos só seguir facendo outras cousas, porque todo o que agora f
licitación fai é dicir basicamente o código aberto f subxacente abrir este ficheiro
e cando estea listo abrir este ficheiro ou cando recibe de volta,
a continuación, realizar este código.
Pero realmente non executar este código.
E tiña unha pregunta?
>> Audiencia: Vostede parece implicar algúns veces que a adición computacionalmente
código intensivo tipo de romper o [Inaudível] sistema orientado.
[Inaudível]?
>> KEVIN Schmid: Esta é unha boa pregunta.
Entón, eu realmente teño un exemplo de como pode integrar computacionalmente
código intensivo en algo.
Así, cando chegamos aos exemplos de código, Vou ter a certeza de tirar esa.
Todo ben?
Grazas.
>> Cal era o seu nome?
>> Audiencia: Aaron.
>> KEVIN Schmid: Aaron trae unha moi bo punto, que é o que se eu tivese
algún código computacionalmente intensivo en as cousas ver coa parte f, o resto da
meu programa non pode ser executado e non pode escoitar para os novos pedidos ou calquera cousa ata que todo
este material está rematado.
Entón, se eu estou escribindo código Node en xeral a menos que fagamos algo que eu vou
suxerir máis tarde, cando miramos para o exemplos de código, eu teño que estar seguro de que
meu código non amarre este ciclo de eventos.
Será que isto ten sentido?
Aceptar.
Legal.
>> Entón Node.js ofrece neste cadro que pode construír estes evento dirixido
servidores con.
Por iso, ten este tipo de asíncrono non-blocking E / bibliotecas, mentres
as bibliotecas estándar C que fomos traballar, como se só
usalos do mesmo xeito que temos de usalos con f abre e
cousas, aqueles están bloqueando porque realmente ten que esperar
que ficheiro a abrir.
>> Pero Node.js dálle iso e basicamente lazos en V8 de Google
JavaScript engine que é a razón que Chrome é tan rápido en procesamento
JavaScript por ten este motor V8.
Entón, sei que soa como un dos Conferencias de desenvolvedores WWDC cousa
onde só xogar unha morea de a número carta cousas para procesadores
e dicir que iso é tan legal.
Pero é legal que fixeron iso porque JavaScript -
ou que se non está familiarizado con JavaScript aínda porque non tivemos
as conferencias sobre el -
pero JavaScript é unha interpretación lingua.
>> E este é un punto importante tamén.
Polo tanto, é importante para o noso web servidores para ser rápido, non?
E si estabamos correndo JavaScript código que foi interpretado con só
calquera intérprete de idade, pode ser lenta.
Beneficios Entón Nó de ter este intérprete V8 super rápido.
E eu non sei se ela foi bautizada como porque o tapa V8 na testa
cousa, pero Aceptar.
>> Entón eu preparei algúns exemplos neste URL.
Despois do seminario, eu estou medio que vai falar de como pode obter conxunto no
Pero, por agora, eu só unha especie de querer para percorrer algúns exemplos de código.
Entón, se quere seguir, todo o código fonte está dispoñible alí.
OK?
>> Entón, eu vou deixar esa URL se para un pouco.
E entón eu só vou amosar no terminal.
Está todo o mundo ben con esta URL?
Entón eu vou pasar para o meu terminal aquí.
>> Entón, aquí está o código que Teño para hoxe.
Por que non comezan con simpler.js arquivo?
A outra cousa é que todo isto código será escrito en
JavaScript que pode ou pode non estar familiarizado.
Eu creo que algunhas cousas é que moitas de código JavaScript é o tipo de
sintaxe e estrutura é moi semellante á C, de modo que pode tipo de busca-lo como
vaia xunto.
Intento escribir unha morea de código de partida para iso dun xeito que é
semellante ao C de xeito que sexa algo máis lexible.
Pero a medida que progredimos, eu vou estar demostrando algunhas das adicional
características do JavaScript que son legal.
>> Pero imos mirar para este programa de exemplo.
Eu creo que todo é cortado alí.
Eu só vou fixar iso de verdade rápido se está todo OK ou non.
Eu non sei o que iso vai facer.
Isto é un pouco mellor?
Podes ver a var e cousas así?
Aceptar.
>> Así, a primeira liña é como o JavaScript versión dunha variable
declaración.
Entón, só para destacar o que iso sería parecer en C. Polo tanto, este é só como
Índice me dicindo é igual a tres ou algo parecido.
Entón, eu non especifica o tipo.
JavaScript ten tipos, pero é moi dinámica ingresaran na natureza, así
non proporcionar calquera tipo de tipo sobre el.
El só ten var.
É como variable.
OK?
>> E eu estou chamando este HTTP variable.
E ao meu lado dereito, eu teño a expresión que quero poñer en HTTP.
E iso di esixir HTTP.
Polo tanto, esta é unha especie de similar para incluír.
É un pouco máis como poderoso do que incluír, no sentido de incluír
sería só copia e pega a cabeceira ficheiro para os prototipos de función ou
Sexa o que sexa, coas definicións de tipo.
Pero esixen que realmente está a suceder para levar o código.
>> Así, pode pensar niso como importación de varios códigos.
Entón, en algún lugar do módulo Node.js sistema ou calquera outra cousa, eles teñen todo isto
Código do servidor HTTP para que eu son só buscar isto para o meu propio
uso persoal neste programa.
OK?
>> Entón eu teño esa función que escribín.
E teña en conta que eu non teño que especificar o tipo de retorno ou o tipo de
argumentos de novo.
Así, tipo de solto escriba que tipo de sentido.
Dous argumentos que leva en, a solicitude e resposta.
Entón, iso é conceptualmente tipo como familiar a partir da imaxe que tiñamos
na pantalla antes porque temos esta solicitude que nós
ter do usuario.
E entón nós temos unha resposta que podemos escribir cousas.
>> Así, a primeira liña deste fai res.writeHead 200 e, a continuación, este
tipo de contidos de texto simple.
Entón, imos remendar este apart un pouco.
Entón imos centrar res.write para un pouco.
Entón escribir é basicamente e escribir cabeza, son só formas de escribir unha especie de fóra
cousas para a resposta.
OK?
Entón escriba cabeza, se alguén se lembra da charla HTTP, é que vostedes
lembrar cabeceiras no principio da cousa HTTP?
Entón por que non eu só demostración cabeceiras rápido.
Iso sería útil?
Ou debemos só unha especie de -
Aceptar.
Claro.
>> Entón, cando o navegador vai a google.com ou algo parecido,
hai realmente un pouco máis -
é dicir como un segredo -
non hai como un pouco máis de información que vén a través do tubo que
o pouco de busca e todo máis.
Entón, para amosar iso, eu vou para usar un programa chamado Curl.
OK?
Entón, iso é algo que pode realizar en súa liña de ordes Mac OSX ou no
dispositivo ou o que sexa.
E así se eu Enrolar HTTP google.com, Vou ver o HTML.
E esta é, con xustiza, só o HTML este tipo de conta que
redireccionar para www O seu navegador non ten tratar automaticamente o
redirección.
>> Polo tanto, esta é só HTML, pero eu vou Engadir para ondular este guión Eu bandeira.
OK?
E iso vai amosar mos cabeceiras.
Polo tanto, esta é tamén a información que vén través cando chegar esta resposta.
OK?
>> Así, na parte superior, ve iso HTTP 301 mover permanentemente.
E iso é importante porque o tipo de refírese ao código de estado.
Así, o 301 aquí é o código de estado, que é, basicamente, só un número enteiro
que informa ao navegador ou quen queira que estea lendo isto, se finxir que
vostede é un navegador e que está a ver iso, basicamente agora se ollar para
iso e ver un 301, vostede sabe que eu teño para facer algo especial en base a
301, ou pasou algo especial baseado na 301.
El di que mudouse permanentemente.
>> E entón, basicamente, temos unha morea de pares de valores clave.
Entón, nós temos o local é www.google.com.
E, a continuación, tipo de todas esas outras cousas, pero basicamente o que o local é
proverbio é o novo local está en www.google.com.
Polo tanto, agora se vai a google.com, vai tipo de ver o tipo de navegador palpebrar
por un segundo e, a continuación, redireccionándoos lo de volta a www.google.com.
Así, as respostas poden conter eses cabeceiras.
>> E un par de cousas a apuntar.
Entón, imos dicir que estabamos realmente exitosa en visitar unha páxina web.
Entón deixe-me ir a -
o que é un bo sitio?
Eu son mal no pensamento do ben sitios no lugar.
>> Audiencia: Wikipedia.
>> KEVIN Schmid: Aceptar.
Imos facer Wikipedia.
Entón, aquí eu estaba emocionado.
Oh wait.
Estaba?
Si, eu estaba.
Aceptar.
Entón, eu teño que facer www.
Entón, eu vou facer www.
E como se pode ver, aquí está todo o HTML que o navegador vai procesar
para a Wikipédia.
>> Pero se eu continuar rolando aquí enriba, o que eu vou ver na parte superior -
wow, hai unha morea de HTML na Wikipedia -
pero o que podo ver na parte superior aquí é este código 200 status como oposta á
301 que vin antes.
E teña en conta que ten un bo OK agradable ao lado del.
Entón, iso é como o bo código de estado.
>> Será que 200 número parece familiar?
Si, porque cando eu fixen simpler.js, Eu escribín un 200 alí.
Entón, que é basicamente dicindo contar a navegador ou quen está intentando chegar ao
este que foron exitosos.
Ou que tipo de como nós foron exitosos tamén.
>> E non hai este tipo de sintaxe especial en Javascript para declarar unha
mapa destas claves, como tipo de contido e eses valores como texto simple.
Entón, se ollar para a resposta que nós volvín da Wikipedia antes, -
Vou probar rolar ata un pouco máis rápido -
ten esas claves como servidor e estes valores Apache.
Entón tes as claves e valores.
E pode especificar tanto en Nó o que enviar de volta.
>> Polo tanto, esta é, en realidade, medio que, nalgúns camiños, e nalgúns aspectos, non é
realmente, pero é un pouco máis baixo nivel que o código PHP que pode ser
escribir para P establecer sete por PHP e Apache tipo de coidar dalgúns
destas cousas para ti.
No PHP, pode substituír o patrón comportamento escribindo os seus propios cabeceiras.
Pero, para os fins do presente, temos para escribir os nosos propios cabeceiras.
>> Entón, iso liña ten sentido todo, a liña da cabeza de gravación?
Aceptar.
Incrible.
>> Entón o que fago é acabar coa resposta dicindo Hola mundo.
Aceptar.
Pero isto é só unha función chamado manipulador de solicitude.
Entón, agora eu realmente teño que tipo de facer algo con esa función, non?
>> Entón, aquí o que fago é que hai esta liña que fai iguais servidor var
HTTP.create servidor, e entón eu pasar o manipulador de solicitude.
Polo tanto, este é o tipo de nodo forma de realización dun servidor.
E teña en conta que eu estou pasando no manipulador de solicitude.
Entón, iso está dicindo a createServer función que quero que me faga unha
servidor, e cando este servidor recibe unha resposta, eu teño de ti para chamar este
solicitar función de manipulador.
OK?
>> Así que a liña practicamente remata inmediatamente.
Así, a liña de servidores var é ben feito despois fai isto moi ben.
Quero dicir, ten que configurar algún interno estado para saber que tería que
chamar esa función manipulador de solicitudes, pero non vai se sentir alí e
digamos que o usuario ten enviado me unha proposta aínda?
Será que o usuario me enviou unha proposta aínda?
Por iso, non bloquear.
OK?
>> Entón, o que isto vai facer é, basicamente, agora almacena un punteiro a este código,
esta función de manipulador de solicitude, e, a continuación, executará este código, cando alguén
fai un pedido.
E entón nós facemos server.listen.
>> O 1337 non é moi arbitraria.
Eu non tiña ningunha razón especial para escoller ese número.
Foi totalmente aleatorio.
Pero iso só especifica a porta.
Así, a maioría dos servidores web que vai ver que eles usar a porta 80, pois ese é o tipo
de como a convención.
Entón, se eu for a algo como: Eu non sei, Wikipedia.org,
e engada dous puntos 8 -
oh wow, non pode ver iso.
Sinto moito.
Pero se eu fai Wikipedia -
Vou escribir aquí só para que queda claro na cámara.
Pero se eu levar isto en un navegador con dous puntos de 80, que especifica ir
Wikipedia.org na porta 80.
Entón, é como como Estados Unidos varias portas, como onde podes enviar
as cousas a medio.
Entón, é como ir a este particular poñer no servidor.
Aceptar.
>> Entón, eu só escollín 1337.
Hai toda unha serie de números que pode escoller.
Isto non foi totalmente especial.
>> Pero o que eu vou facer agora é que eu vou correr Node.
Déixeme realmente entrar que unha parella liñas para abaixo para que poida velo.
Vou facer Node, e estou vai realizar simpler.js.
E imos falar sobre como obter Nó creado en un pouco.
Pero agora é só executar o servidor.
>> Entón, unha cousa que pode probar o que non pode ser tan emocionante é que podemos realmente
tentar acceder a ela en Curl.
Entón eu podo facer Curl, e miña máquina é servidor local.
Tamén vai ver iso escrito así ás veces.
Auxiliares e 127.0.0.1 local son unha especie de como o seu ordenador de casa.
Entón, é como falar con seu propio ordenador.
Aceptar.
>> E entón eu podo dicir que 1337.
Entón, se eu executar esta liña de código, el di Ola mundo.
E se eu quería ver o material que tiña texto simple ou tipo de contido
Sexa o que sexa, eu podería incluso poñer iso aquí.
E teña en conta que di Aceptar.
E eu teño de texto simple.
E despois hai o tipo de todas estas outras cousas que Node vai engadir en
alí para min.
Isto non é super importante.
>> Quero dicir, hai algún tipo de técnico aspectos en que son unha especie
de legal para falar, pero só para mostrar ti, eu tamén teño o poder de
cambia-las por preto.
Entón eu só podo engadir unha chea de cousas así.
E entón agora, se eu ollar no meu de saída, será que.
Entón, eses cabeceiras dicir certas cousas para navegadores e cousas así.
>> E cabeceiras pode basicamente dicir un navegador como responder a algo.
Se vostede xa escoitou falar de cookies antes, ou se xa estivo irritado
por unha páxina web creación cookies, ou conectado bloque cookie ou
algo parecido.
Realmente pode definir cookies nestes cabeceiras.
Entón, eles din un navegador como comportamento nalgúns casos.
Aceptar.
>> Así que foi simpler.js.
Alguén ten algunha dúbida en que ficheiro de código fonte?
Aceptar.
Legal.
>> Polo tanto, imos eliminar o r de que e mirar para simple.js.
Entón, iso é moi fermoso o mesmo programa.
Eu só escribín un pouco diferente porque eu quería resolver destacados
algunhas características do JavaScript.
>> Entón, teña en conta que o manipulador de solicitude función teña completamente desaparecido.
Ah si, se tes algunha pregunta?
>> Audiencia: Si, os argumentos que son pasadas para o
función, o que son?
>> KEVIN Schmid: Polo tanto, estas son JavaScript obxectos.
Na documentación do Node.js, el basicamente di que métodos son
dispoñible sobre eles.
Nós só terá lugar a ter acceso a este método chamado cabeza de gravación e final
e cousas así.
Pero hai un grupo enteiro máis métodos.
>> E por exemplo, como un deles en particular, sobre rec, pode facer
algo así como rec.method que será dicirlle se é un HTTP GET ou
Solicitudes HTTP POST e cousas así.
Polo tanto, hai todo tipo de diferente propiedades, pero son dous
JavaScript obxectos, e eles só teñen funcións que lles son inherentes que
pode escribir cousas.
OK?
>> Entón entender que manipulador de solicitudes é totalmente desaparecido.
Pero o código que eu tiña en solicitude manipulador aínda está alí.
Eu aínda teño ese res.writeHead e aínda teño este res.end.
E que este é un exemplo de en JavaScript é a idea dun
función anónima.
e anónimo é como un nome apropiado para el, porque, literalmente, non fai
ter un nome.
Non hai solicitude de función manipulador de alí.
>> Non ten nome, pero aínda é tomar un argumento.
Entón eu teño rec e res.
E eu aínda teño o código.
Isto é perfectamente normal O código JavaScript.
Entón, podo declarar unha función sen explicitamente dándolle un nome.
É un pouco confuso no inicio.
Hai algunhas cousas útiles, como que se pode facer con
estas funcións anónimas.
Alguén ten algunha dúbida sobre iso, ou é OK só para, por agora,
tipo de simplemente aceptar que vai facer o mesmo?
Yep?
>> Audiencia: primeiro son funcións clase en JavaScript?
>> KEVIN Schmid: Son os primeiros clase en JavaScript.
E só sei que estes conceptos de pasando nunha función anónima como
isto é aplicable ao JavaScript que pode escribir no seu proxecto final para
o navegador web tamén.
Así, por exemplo, no Javascript o navegador, é tamén un pouco do evento
dirixido no sentido de que o que vai ten é cando o usuario fai clic neste
botón, quero que executar este código.
>> Entón, é o mesmo tipo de ideas da lado do cliente cando un click do rato ou eles
rato sobre algunha imaxe no seu páxina web, executar este código.
Isto pode aplicarse a servidores.
Entón, iso é máis ou menos como o emocionante polo que JavaScript é realmente un
persoas adecuadas ou algúns pensan que é unha linguaxe adecuada para este tipo de
servidor condutor evento, porque ten estas funcións anónimas.
Ten toda a idea de este código asíncrono.
Aceptar.
Alguén ten algunha dúbida?
>> Aceptar.
Así que foi simple.js.
Entón, imos ollar a unha ou máis un par.
Polo tanto, esta é sleep.js.
Entón é alguén familiarizado con a función durmir C?
De quizais unha das conferencias anteriores ou algo así?
>> Entón, basicamente, pode pasar en Eu creo que un número de segundos ou se está a usar U
durmir un número de milisegundos ou nanosegundos.
E, basicamente, o programa só pode parar correndo para a mesma cantidade de tempo.
Non?
E entón el vai espertar e, finalmente, a continuación, el vai só continuar executando
o programa.
>> Polo tanto, este tipo de servidor dá a impresión de durmir.
Entón, teña en conta que temos o mesmo res.writeHead 200 co cabeceira
antes, pero, a continuación, nós estamos chamando esta función chamada set timeout.
Establecer tempo de espera tamén está dispoñible en o navegador Google Chrome
ou Safari ou o que sexa.
E basicamente o que está facendo aquí se está tomando en unha función.
Teña en conta, de novo, é unha función anónima.
Entón, iso é ben legal porque estamos usando unha función anónima dentro dunha
función anónima que pode ser un pouco raro.
>> Pero el está tomando esa función, que é basicamente dicindo - e de como este
obras é en 5.000 milisegundos, quero que executa esta función que
só remata a resposta e grava hey.
Entón, iso dá a impresión de como durmindo, pero o xeito no que isto realmente
funciona é que imos percorrer esta liña moi rapidamente.
Nós só estamos escribindo algo.
E entón nós tamén imos percorrer esta liña moi rapidamente.
Polo tanto, non estamos realmente indo esperar cinco segundos.
Nós só estamos indo a executar este código instantaneamente.
>> E despois hai, unha vez máis, este pequeno ciclo de acontecementos que agora ten esa cousa
registradores que basicamente é só constantemente camiñando nun círculo
e mirando para o reloxo nunha única fíos e dito, ten cinco segundo
pasou aínda?
E entón, cando ve que o segundo man moveuse uns cinco segundos ou
o que quere, el acorda e di: Oh, o que eu teño que facer?
Oh eu teño que realizar este código.
E entón el vai realizar res.end hey.
>> Entón, de novo, nunca estamos esperando aquí.
Entón non é que este código dentro esta función vai levar cinco
segundos para ser executado.
Este código será executado practicamente instantáneamente, polo menos con respecto a
os cinco segundos que estabamos falando aproximadamente máis cedo antes.
>> Entón, só para mostrar isto en acción, Eu podo facer Node.sleep.js.
E fixo eu romper algo?
Posiblemente.
Sentímolo.
Imos ver o que podemos facer para corrixir isto.
Aceptar.
Entón, en definitiva usar Node.js.
Estou só xogar.
Aceptar.
Só un segundo.
Aceptar.
Sei o que é.
>> Así, o importante é que o meu outro guía aquí, eu estaba correndo Nodo xa en
que mesmo enderezo, 1337.
Así, o erro que este xogou, se miramos no-lo real de preto, é o enderezo en
usar, EADDRINUSE.
Entón, eu xa estaba usando 1337 aquí.
Entón, se eu pechar esta ruta, e entón eu agora tentar executar este, por sorte, o único
se ve ben.
Aceptar.
Entón só pode ter unha cousa tipo de escoitar nunha porta á vez.
Outra solución sería para min só para modificar este programa e facer
sexa como 1338 ou algo así así.
>> Pero agora o soño está a ser executado.
Entón, imos realmente probalo no navegador esta vez porque é un
pouco desinteressante para ver lo nun terminal.
Entón, eu estou indo só para ir a ese 127 dirección novo en 1337.
E se pode ve-lo -
Eu non sei se pode - pero o meu navegador de tomar un tempo moi, moi
tempo para subir ou como cinco segundos.
>> E despois diso, el finalmente acabou coa resposta.
E non pode velo porque a cousa é movido sobre un pouco, pero se eu fai
esta un pouco menor, ten podes ver que di hey.
Entón, eu teño o hey, pero despois de cinco segundos.
E iso pode ser un pouco de ver aquí na terminal, polo que estou
fará a -
imos facer aquí -
imos facer onda este enderezo novo co 1337.
E eu medio que teño que sentir aquí por cinco segundos.
Pero teña en conta que o servidor pode aceptar novas respostas.
Entón, el imprime hey.
>> E a demostración diso, basicamente o que Podo facer neste outro guía -
entón imos dicir que eu fago isto noutra guía, Vou facer Curl e ao mesmo
cousa de novo.
E eu vou tentar chutar estes caras fóra á vez.
Entón, eu vou facer iso, e eu son correrá para aquí e estou
vai facelo de novo.
>> E imos facelo de xeito que podes ver os dous.
Aquel impreso hey e que un impreso hey todo o camiño na -
imos facer esta experiencia de novo.
De feito, imos empregar este enganar, se está todo OK.
>> Entón eu vou usar unha cousa que shell me permite realizar basicamente dúas copias
deste programa en paralelo.
Entón, que vai realizar o primeiro programa e o segundo programa en paralelo.
Polo tanto, agora que eu premer Intro, que vai para facer esta proposta moi bonito
instantáneamente á vez.
Entón, imos dar a este un tiro.
>> Entón, agora di conta dous procesos.
E se está curioso, que 27.000 número é basicamente o proceso de identificación.
E, a continuación, entender, eles imprimiram ei á vez.
Non foi como tivemos que esperar cinco segundos para unha e despois diso,
Cinco segundos despois conseguir o segundo.
Entón, este é o tipo de, de certa forma, é realmente non evidenciar, pero é
evidencia intuitiva de que non é só como agardando cinco segundos, impedindo
todo o segmento.
Aceptar legal.
>> Entón Aaron fixo unha pregunta anterior que era moito o que se nós facer algo -
Yep?
>> Audiencia: Agarde.
Como é que diferente de tapón printf, aínda?
Non fai iso automaticamente facelo?
Por que temos que preocuparnos con iso?
>> KEVIN Schmid: Oh, podería dicir que unha vez máis?
>> Audiencia: Non lle gusta tapón printf facer exactamente a mesma cousa?
>> KEVIN Schmid: O buffer printf?
>> Audiencia: Yeah.
Aceptar.
Non se nun das probas que eran fala de como se dereita printf
algo e, a continuación, telo deter unha segundo, e así que ten que circular dez
veces, que vai esperar dez segundos, e printf entón todo xunto?
>> KEVIN Schmid: Oh, Aceptar.
>> Audiencia: É facer o mesmo cousa, entón, neste caso?
>> KEVIN Schmid: Entón, a pregunta era basicamente, nun dos antigos quizzes
ou algo así, había unha cuestión que basicamente, se di print f 10
cousas dunha vez e despois durmín como en o proceso de imprimir os para fóra,
ao final, por algún motivo, sería simplemente botan os todos para fóra da pantalla.
Polo tanto, hai unha especie de dous diferentes conceptos aquí.
>> Entón eu creo que unha cousa é que, neste caso estamos lidando con dous diferentes
tipo de persoas pregunta o servidor para as cousas á vez.
E a razón que o tipo de printf espera así e botan todo para fóra
dunha soa vez está máis relacionado coa como printf tipo de -
de xeito que o camiño é realmente printf aplicado é que ten, basicamente, a
falar co sistema operativo para escribir ese material para a consola.
Por iso, non quero facer todo isto cousas inmediatamente cando di printf
algunha corda, porque iso podería estar caro se ten de
facelo todas as veces.
>> Entón, se fai printf hey, o seu programa non pode realmente imprimir esta
inmediatamente para a consola.
El podería dicir, OK, eu escribín.
E, a continuación, tipo de esperar por ti para dar un pouco máis antes de que realmente
gravala-lo para a consola.
>> Así, a razón que fose ese o caso -
e é unha especie de non relacionado para o sono -
é que o soño era unha especie de só inxectado alí para demostrar a
feito de que non escribe lo de forma síncrona.
Pero a razón para iso é só actuación de xeito que non ten que
facer que moitos contactos para o sistema operativo.
>> Pero aquí, o que estamos realmente intentando facer con esa cousa de sono é só amosar
que, cando temos dúas persoas que visitan Nesta web, non está indo a poñer
los nunha liña onde vai dicir Teño que axudar, e entón cando estou
totalmente concluído axudar tras estes de cinco segundos, entón eu vou
ir á seguinte persoa.
Entón petición da primeira persoa non amarre este ciclo de eventos
se iso ten sentido.
>> Pero aquí é realmente un exemplo de algo que vai amarrar
o ciclo de eventos.
Entón aquí está unha función horrible calcular o Fibonacci enésima.
É literalmente a peor forma posible calcular o número de Fibonacci enésima.
E iso é realmente só para recoñecer de onde veu iso,
hai realmente -
Quero dicir, pode tentar ir atopalo -, pero non hai como un blog moi lento
post que alguén escribiu.
É como unha desas cousas Reddit.
Pero alguén criticou Node.js e utilizaban tanto como un exemplo.
Entón eu medio que quería só amosar-lle dúas perspectivas diferentes só para obter
unha comprensión xeral dos conceptos detrás destas dúas cousas.
>> Pero iso é escollido como só un terrible, computacionalmente horrible ineficiente
forma intensiva para calcular o enésimo número de Fibonacci.
Así como unha nota lateral, polo que é el terrible como, dunha forma?
Yep?
>> Audiencia: Digamos que comece con 1.000.
1000 divídese en 999 e 998.
Cada desta divídese en dúas cousas.
>> KEVIN Schmid: Certo.
>> Audiencia: Todo o camiño cara a abaixo.
>> KEVIN Schmid: Exactamente.
Entón, só para repetir para a cámara, se eu chamar FIB en 1000 ou algo así
así, é evidente que non é menos que ou igual a un, entón eu vou
ir a este problema o máis, e entón eu vou para chamar FIB 999 máis FIB 998.
E, a continuación, practicamente todos os que traballo que FIB 999 fai é
tipo de, a este nivel.
Se descender, é aínda máis redundante do que iso, pero se só
creo computación lorota 998 recibe nos moi preto de fib 999.
Entón, nós realmente debe ser un pouco máis intelixente sobre como nós tipo de reutilización
estes, pero non estamos reutilizando isto en todo.
Entón podes imaxinar este xigantesco, xigantesca árbore que é simplemente horrible.
>> Pero de calquera xeito, Aceptar.
Entón era lorota.
El só ten un tempo para ser executado.
Yep?
>> Audiencia: [inaudível].
>> KEVIN Schmid: Oh, podería repetir a pregunta?
>> Audiencia: [inaudível].
>> KEVIN Schmid: Ah entón iso é só un código que vai ser unha especie de no
lado do servidor.
Entón, iso non vai ser atopada no navegador ou nada.
É basicamente o que temos é que, cando o usuario aquí practicamente marcas
súa solicitude de novo, cando unha especie de facer unha proposta, imos chamar
esta función no lado do servidor.
E entón nós imos obter o resultado de volta de chamar esa función.
E entón nós imos só imprimir lo para o usuario.
Así, o usuario non realmente tratar con esta función moito.
>> Foi esa a pregunta?
Será que isto ten sentido?
Aceptar.
Legal.
>> Entón, de novo, nós facemos toda esa res.writeHead cousa na que imprimir
a cabeceira.
E entón eu rematar a resposta, facendo o número máxico é 45 lorota.
Entón imos realizar este servidor.
Entón, eu vou facer un nó fib.js.
Entón agora meu servidor lorota está en execución.
>> E entón, aquí, eu vou para facer un deses.
OK?
Entón, eu só vou dicir: Curl.
Entón, que vai levar un pouco, pero espero que en breve vai rematar e
ha imprimir que 45 Fibonacci número.
>> Audiencia: [inaudível].
>> KEVIN Schmid: debe pode facer en breve.
Por iso, debe levar de cinco a seis segundos.
Eu non sei que é só ser super V8 rápido, pero en calquera caso, esta é unha
moi curto exemplo e propositadamente deselegante dun non-trivial
computación.
Entón, despois dun tempo, el non conseguir isto.
>> Pero agora, o que se eu fai o mesmo tipo de experiencia como antes, onde fago
dous peticións á vez?
Entón, aquí eu estou indo a unha onda de este enderezo, e eu vou
facer outro Curl.
E lembre, cando fixemos isto para o durmir servidor, cando estamos basicamente tivo que
despois de cinco segundos, eles moi moito tanto volveu dereita
en torno ao mesmo tempo.
Por iso, non foi particularmente amarre.
>> Pero imos tentar iso agora.
OK, polo que temos os nosos dous procesos.
Teña en conta que estes son os IDs de proceso.
Este vai ser un pouco desajeitado, mentres nós parar.
Entón imos estar aquí e esperar.
>> Entón, un deles debe vir volta despois como -
OK, entón un deles volveu.
Pero, entón, por que non fixo o segundo un volver só aínda?
Yep?
>> Audiencia: O servidor non pode facer nada mentres el está computando que gran número.
>> KEVIN Schmid: Certo.
Entón, a resposta foi só que o servidor realmente non pode facer nada mentres
está computando o número de Fibonacci.
Entón agora eu só teño as miñas dúas cousas de volta.
Pero eu creo que só de pensar sobre o código un pouco máis, como está a traballar
e todo máis.
>> Polo tanto, esta función aquí é o código que Eu dixen a este servidor para realizar cando se
recibe unha nova solicitude de entrada.
Por iso, só vai percorrer este código enteiro e, a continuación, que vai ir
volver ao ciclo de eventos e, a continuación, continuar comprobación de novos eventos.
Entón, basicamente o que temos que pasar é o servidor está
escoitando cousas novas.
A primeira persoa que pide o que é 45.
Corremos este código para calcular iso.
Este código ten preto de cinco seis segundos para realizar.
Entón imos voltar ao ciclo de eventos e comprobar se hai novas solicitudes.
>> Polo tanto, este é un exemplo de como, ten cousas que son chamados de computación
grazas, ou usar unha morea de computacional, non poder, pero como son
computacionalmente intensiva -
Eu creo que unha cousa que dicir sobre iso é que esta función está facendo totalmente,
na súa maior parte, bastante dereito traballo útil.
O tempo de que esa chamada de retorno función estaba funcionando, foi moi
moito pasar a maior parte do seu tempo só computación número que Fibonacci enésima.
>> Pero nós só tiña un fío para tratar con eles.
No modelo Apache, cando dúas persoas fixo a solicitude para obter FIB 45, nós
tería dous segmentos diferentes.
E entón o traballo do sistema operativo sería, ou o nivel de usuario
código que xestiona os fíos, tería foi a porción que enriba da
CPU, ou mesmo se tivese varias CPUs, distribuí-las uniformemente en todo o CPUs
co fin de que ambos foron acabado practicamente á vez.
>> Entón, só para mostrar como podemos clasificar de - e este non é un perfecto total de
solución, senón unha especie de como podemos facer unha volta aquí e facer
un pouco mellor.
Entón, o que eu teño aquí é un programa chamado Fib C. E este úsase basicamente
máis un dos módulos do nodo chamada O Módulo de proceso fillo.
Entón eu teño que incluíu na parte superior tipo de como eu faría un quilo inclúen
PROCESS.H neno ou algo así.
Agora eu teño acceso a esta variable CP que ten todo o meu funcionalidade.
>> Entón agora o que estou facendo nesta resposta manipulador é que eu estou a execución deste programa
dot cortar FIB 45.
Entón o que eu fixen - e eu só vou para saír deste programa a un
pouco -
é que escribín un programa en C que basicamente, calcula o
enésimo número de Fibonacci.
Entón, aquí é só un programa que escribín en C, que calcula este.
Podo recompila-lo, e podo correr lo na liña de comandos.
E vai a calcular a Número 45 Fibonacci.
>> Entón, teña en conta que só leva practicamente o mesmo tempo.
Eu probablemente podería usar trazo 03 a optimiza-lo ou algo así,
pero eu só fixen como regulares configuración do compilador.
E el imprime-lo.
>> Pero agora, o que estou facendo unha especie de?
Oh, desculpe, arquivo mal.
Entón fago o mesmo con a cabeceira como antes.
Entón fago este cp.exec.
Entón o que é que isto vai facer é que é indo para executar este programa.
Pero a forma como funciona isto é que non vai esperar por
que o programa termine.
Di só, basicamente, executar este programa.
Entón, basicamente, escriba isto no ventá de consola tipo de.
>> E entón, cando se fai con Lo, executa esta función.
Entón, agora nós tipo de obter este cousa toda restaurada de
como non estamos á espera.
Será que este tipo de ten sentido?
Yep?
>> Audiencia: [inaudível]?
>> KEVIN Schmid: Entón, iso vai realmente abrir un novo proceso para facelo.
Polo tanto, este é, en realidade, nalgúns aspectos, mal, non super mal, pero é
importante dicir que esta é unha especie de voltar, por unha banda, o Apache
modelo onde facemos rutas e procesos para cada solicitude ou
procesos para cada solicitude.
Polo tanto, esta é unha especie de análogo ao que fai Apache.
Nalgúns casos, só utilizará un novo segmento, que é un pouco máis de luz
peso do que un proceso, pero podería Apache acaban se bifurcar un novo proceso
que é unha especie do que facemos aquí implicitamente, facendo punto barra FIB 45.
>> E entón, nese caso, nós medio que incurrirían os mesmos gastos de procesos.
Polo tanto, esta é só unha cousa que podes facer.
Pero só para mostrar este tipo de execución.
E esa conversa é só realmente destinado a presentar este tipo de programas como
forma de mostrar diferentes perspectivas sobre como crear servidores así.
Polo tanto, este está en execución e logo, agora se eu fai iso de novo, eu teño dúas IDs de proceso.
>> Imos falar sobre cousas a apuntar.
Entón, entende que son poucos.
Isto é legal.
Porque era 27.122 antes.
Pero teña en conta o momento, eles volveron máis ou menos á vez.
>> E agora, unha boa pregunta para preguntar sobre por que foi que o caso é, cuxo traballo
era agora a sorte de facer isto tipo de xogo limpo con cada
outras, estas dúas instancias da dot barra FIB 45 que eu corrín
ou que foi Node?
Quen tipo de fai xusto que ambos O tipo de tempo de execución equilibrada?
>> Audiencia: [inaudível].
>> KEVIN Schmid: Yeah.
Entón, basicamente, cando fago punto lorota barra 45 ou algo así, agora é
tipo de arriba que o sistema operativo xestionar o tempo de execución destes programas.
E agora pode programa-los en diferentes CPUs ou
pode programa-los.
Pode cortar-se o tempo en que un CPU recibe-lo ou que obteñan
para ser executado nunha CPU.
Así que esta é a idea detrás diso.
Isto ten sentido para todo o mundo?
Entón agora Node non é realmente xogando un parte en dividir estas tarefas.
Aceptar.
>> Entón, iso é case que a exemplos.
Eu só quería amosar unha cousa porque unha morea de presente ata agora foi
non totalmente super-práctico nalgúns casos.
Podo imaxinar volvendo a casa tras este falar e algo e dicindo como,
ben, eu medio que teño de que a conversa que Eu podo facer un servidor de Fibonacci para
meu proxecto final.
Entón aquí está só unha especie de un exemplo que espero veña a ser -
quizais non, pero quizais - un pouco máis tipo de pertinente a proxectos finais e
pensando no futuro para cousas así.
>> Polo tanto, esta é chat.js.
Polo tanto, esta é unha especie de un pouco de mostra código do lado do servidor que pode usar para
configurar un servidor de chat pequeno como podes ver no
Facebook Chat ou o que sexa.
Entón eu non estou dicindo que iso é como Facebook Chat, pero este é o tipo de
como unha boa - quizais non é bo, pero quizais punto de partida para unha conversa - bo
servidor para a súa web para un proxecto final.
Entón, imos ollar para o que está facendo.
>> Entón, nós estamos a recibir esa cousa especial , Na parte superior, este var SIO
é igual a esixir Socket.IO.
Entón, iso é outra cousa que non fai realmente vir xunto con
Node pero pode instala-lo.
É un módulo Node.
Entón, é como algúns extensión para o nodo.
>> SocketIO é realmente moi legal.
É unha abstracción que, basicamente, o que que fai é se el permite que
ten ese fluxo de comunicación entre unha web
navegador e un servidor web.
Entón, na súa maior parte, ata agora, tivemos estes moi rápida un segundo ou dous
segundo as comunicacións entre un web navegador eo servidor web.
Entón, é basicamente ir google.com, get o material, envialo de volta, e, a continuación,
estamos a facer.
Nunca estamos a falar de novo ata que o tipo de usuario noutra cousa.
>> Pero o que Socket.IO e mesmo tipo de cousas - e SocketIO é realmente un
das cousas que está construído sobre como WebSocket que é unha especie de dispoñible
como parte do HTML5 -
que permite que teña esta diálogo continuo.
E isto é moi útil para un servidor de chat tipo de cousas, porque é
como unha especie de diálogo continuo en certa forma, porque se está a falar
con alguén, agora pode só enviar un mensaxe para dentro do tubo, e, a continuación, o
servidor pode enviar unha mensaxe a abaixo a tubos para a outra persoa que é
charlar.
E entón pode que este intercambiar así.
>> Entón, iso é o tipo que SocketIO é bo para.
A razón que SocketIO usa WebSockets como unha cousa é que en
Ademais de WebSockets simplemente vellos, Tamén fai algúns trucos para, basicamente,
compatibilizar iso web.
Así, navegadores como o Internet Explorer sentímolo non soportan WebSockets
dereito fóra da caixa.
Entón, el usa algún outro tipo de puro legal cousas con Adobe Flash para permitir
vostede o apoio ao navegador cruz.
Entón, iso é realmente útil.
>> E de feito, sei que eu son o tipo de execución en tempo aquí, pero CS50
Discutir, xa viu algo como, eu non sei, en branco así e así é
responder a este post ou algo así, esta característica?
Isto é SocketIO.
Entón, cando alguén comeza a escribir no caixa de discutir a dar unha resposta ou
algo, o seu navegador non ten o que hai de chamado SocketIO emite algún tipo de
caso en que di que alguén é responder a este post.
>> A continuación, o servidor di: OK, o que eu teño que facer?
Ben, agora eu teño que dicir a eses outros caras que están no CS50 Discutir buscando
neste post que alguén está a responder.
Entón, iso é o tipo do que é SocketIO bo para este tipo continuo de
fluxo de diálogo.
Aceptar.
>> Entón, o que eu teño aquí - e estamos só vai ignorar a matriz conexións
para un pouco -
o que fago é que eu escoitar outra.
Entón, iso é só a forma como é Socket.IO dicindo imos escoitar nesta porta.
E entón eu fago iso na conexión.
Entón, iso é basicamente só soquete IO de forma de dicir, cando recibimos unha
conexión, quero que para realizar este código.
>> E teña en conta que en vez de ter rec e res pasaron alí teño Socket.
E esa idea de soquete é basicamente iso cousa que pode gravar e ler
de que ten o usuario do mensaxes posiblemente.
E as mensaxes que publique pode pasar por iso Socket.
Será que isto ten sentido?
Entón é esa cousa de continuar.
>> Entón, o que fago é chamar Socket.emit.
E emiten leva moito moito dous argumentos.
O primeiro argumento é unha cadea só representa o tipo de
cousa que está emitindo.
Polo tanto, para este caso, eu teño uso esta nova mensaxe cadea.
E iso é só basicamente dicindo que o tipo de tal cousa, o que eu son
enviando, é unha nova mensaxe.
Así, pode escoitar a tipos específicos como nova mensaxe ou calquera outra cousa
usando o punto en.
>> Entón conexión eo usuario enviado a alí, se mira a onde chamamos punto en diante,
esas son outras cordas que representan tipos de mensaxes do usuario.
Entón, é basicamente pode ter este emiten un destes tipos de mensaxes, e
a continuación, facer algo en resposta a un destes tipos de mensaxes
>> Entón, eu estou emitindo esta mensaxe nova.
Imos ignorar connections.push por un segundo.
Pero, entón, digo, usuario Socket.on enviada.
Entón, agora é unha especie de gusto cando o user me envía unha mensaxe, quero
executar este código.
E teña en conta que esta función anónima está tomando nesta variable
chamada de datos que vai basicamente para ter a mensaxe do usuario.
>> Tipo Entón, agora imos falar de a matriz conexións.
Polo tanto, este está deseñado para un cliente de chat onde basicamente todo o mundo é medio en
mesma sala de chat.
Entón, basicamente, o que necesitamos para manter en torno a certa matriz que, basicamente,
representa toda a xente a falar en certo xeito, se iso ten sentido.
Non?
Porque necesitamos a saber quen son estes faces son para que poidamos enviar-lles mensaxes
que outras persoas envían a nós.
>> Entón, o que este código fai é cando o usuario envía unha mensaxe - que é o tipo de
o evento -
imos realizar este código.
E o que nós facemos é percorrer este matriz que chamamos de conexións.
E practicamente para cada conexión excepto o que é noso, que é
o que este código di, nós enviar unha nova mensaxe que adxunto mensaxe
información.
>> Entón, se observar aquí, o que eu fixen cando o usuario realmente fai unha nova
conexión é que eu engade co JavaScript.push método, é dicir
basicamente, só dicindo como engadir que soquete como un valor en
nosa disposición conexións.
Agora, cando este código é executado, el será enviar as cousas a quen especial
conexións.
Polo tanto, este pode ser un bo punto de partida para facer un servidor de chat
ou algo semellante.
>> E o tipo de cousa legal é que a código que ve aquí para como en e
emitir e cousas así é o mesmo tipo de código JavaScript que faría
escribir no navegador para interactuar co servidor.
Entón é por iso SocketIO é unha especie de puro e útil na medida en que forma.
>> Ah, e só unha cousa rapidamente.
Había un proxecto final CS50 ano pasado que basicamente aplicou un chat
servidor en Node.js.
Creo que é Harvardchats.org pero eu non son -
Aceptar.
Eu non estou seguro o que o URL é, pero Podo enviar isto despois.
Pero é legal o que podes facer con Node.js.
>> Así que espero que, en xeral, vostedes teñen un boa idea do que Node.js é útil
e como podería talvez aplicar ao seu proxecto final.
Eu vou estar enviando un pouco máis recursos xunto con este.
E grazas por teren benvida.
Grazas.
>> [Aplausos]