Informe Latex
Informe Latex
Informe Latex
Informe de Proyecto
1. Resumen
En este trabajo se mostrará un entorno de programación sencilla que tiene varias utilidades,
como es NODE.JS. Siendo especı́fico, se mostrará el contenido visto en clases pero desde el punto
de vista del servidor y no desde el punto de vista del cliente. Para ejemplificar, mostraremos la
programación de un socket UDP, un socket TCP, la programación de encabezados y un servidor
web.
2. Introducción
Node.js es un entorno de programación basado en el lenguaje de programación javascript, el
cual actúa del lado del servidor, este cambia la noción de como se debe trabajar un servidor, fue
creado con la meta de permitir al programador construir aplicación de red altamente escalables,
esto quiere decir que el código puede soporta decenas de miles de conexiones simultaneas, lo cual
no lo limita, (como por ejemplo los servidores web), esto resuelve el problema de los actuales len-
guajes de programación los cuales se veı́an limitado la a cantidad de memoria RAM disponible para
poder aceptar/iniciar una nueva conexión. En el transcurso de este informe demostraremos como
trabajar con este entorno de programación, programando un par de aplicaciones básicas, como lo
son servidores web, socket’s tcp y udp y el armado de encabezados, ademas explicaremos como se
lo logro y demostremos lo útil y sencillo que este entorno de programación llamado Node.js
Informe de Proyecto 2
3. Node.JS
Node.js es un entorno de programación del lado del servidor basado en el lenguaje de progra-
mación Javascript, que utiliza un modelo ası́ncrono, esto quiere decir que las entradas y salidas
no bloquean al programa, usa una programación orientada a eventos con la particularidad que los
eventos en esta plataforma son orientados a cosas que suceden del lado del servidor y no del lado
del cliente como los que conocemos anteriormente en Javascript çomún”. Está basado en el motor
Javascript V8 un intérprete ultra rápido escrito en C++ (con el que funciona el javascript de Google
chrome). Fue creado en 2009 por Ryan Dahl.
La meta primordial del Node.js es proporcionar una manera fácil para la construcción de progra-
mas de red escalables, este objetivo se da en vista de la actual situación que presentan los lenguajes
de programación de hoy en dı́a, donde la cantidad máxima de conexiones está limitada por la can-
tidad de memoria RAM que tenga el sistema, Node.js resuelve esto cambiando la forma en que se
realiza la conexión, ya que en vez de hacer lo anteriormente descrito, dispara la ejecución de un
evento dentro del proceso de motor de node.js.
En teorı́a Node puede soportar tantas conexiones como sockets tenga el sistema. En un sistema
UNIX este lı́mite puede rondar por las 65.000 conexiones, un número muy alto teóricamente. Sin
embargo, en la realidad, la cifra depende de muchos factores, como la cantidad de información
que la aplicación este distribuyendo a los clientes. A pesar de esto una aplicación podrı́a mantener
20.000-25.000 clientes a la vez sin haber apenas retardo en las respuestas. Queremos recalcar que
Node.js es un programa de servidor, este no viene a reemplazar a lo que son Apache o Tomcat que
son básicamente servidores listos para instalar e implementar.
En este informe desarrollaremos socket UDP del lado del servidor el cual solo recibirá los men-
sajes y del lado del servidor mostrara los mensajes que le lleguen. A continuación una imagen con
un ejemplo de un socket UDP programado usando Node.js.
Informe de Proyecto 3
Con el comando “require”, exportamos las bibliotecas que vamos a necesitar y las vamos asig-
nando a variables, nuestro Socket UDP sera conocido con la variable sock, en la linea 5 especificamos
el tipo de protocolo por el cual regirá nuestro socket.
El socket se encuentra “escuchando” en el puerto 12345 y desde una ip especificada, esto se le asigna
mediante el comando sock.bin(Puerto,IP);
Este es un entorno que se basa en lenguaje de programación orientado a eventos por lo que a medida
que se presenten estos, el programa responderá, veamos por ejemplo que ocurre cuando se presenta
el evento “messaje”. El programa en el caso de recibir un mensaje, mostrara por consola (usando
el comando console.log()) toda la información referente a cual es el mensaje y desde que dirección
y puerto vienen (todo esto solamente del lado del servidor).
.listen(PORT, HOST); : Acá el socket una vez creado se pone a la escucha en el puerto y host
indicados. Si se detecta una conección la función dentro de net.createServer es accionada.
3.2. Encabezados
Para modificar los encabezados de la respuesta del servidor web, solo se necesita el uso del codigo
“resp.writeHead” que permite colocar los encabezados que se deseen, en este caso mostraremos dos
ejemplos donde se veran encabezados con distinta información.
Ejemplo 1:
En este primer ejemplo, sólo se colocaron cuatro puntos como fue el lenguaje del contenido
“Content − Lenguage”, el tipo de contenido “Content − type”, la última modificación “Last −
M odif ied”, el estado de conexión “Connection” y la codificación de transferencia “T ransf er −
Encoding”.
Ejemplo 2:
Informe de Proyecto 5
En este segundo ejemplo, se colocarón los mismos puntos del ejemplo anterior pero se colocaron
mas puntos para agrandar el encabezado, las informaciones que se agregarón son “Accept − Range”,
tiempo que lleva en el caché en segundos “Age”, el largo del contenido “Content − Lenght”, la
ubicación del contenido “Content − Location”, “pragma” y “Ref resh”.
4. Conclusiones
Finalmente pudimos notar, a través de los diferentes tópicos visto, como NODE.js nos presenta
diferentes herramientas para poder programar en su plataforma de una manera limpia y fácil, apli-
caciones de red, ademas de interiorizarnos de las ventajas de utilizar este tipo de plataforma y su
cabida en aplicaciones de red futuras.
Por ultimo querı́amos recalcar lo fundamental que fue realizar este trabajo ya que pusimos en
juego la materia vista en clases, ademas de aprender/haciendo como realmente funcionan los socket’s
e servidores web, desde una perspectiva del servidor, lo que habitualmente se omite.
Informe de Proyecto 7
5. Anexos
5.1. Videos demostrativos
Server UDP: https://www.youtube.com/watch?v=2HYSTYhwV-A
Server HTTP:
1.- http://youtu.be/rZ2Ag0XRolg
2.- http://youtu.be/TAzDoK-yaiY
5.2.2. Código HTML para primera respuesta del servidor a petición GET hecha por
el cliente
1
2 <! DOCTYPE html >
3 < html >
4
5 < head >
6 < title > My first page in express </ title >
7 </ head >
8
9 < body >
10
11 <h1 > Hello World ! </ h1 >
12
13 <p > This is my first paragraph </ p >
14
15 <p > This is a POST
16 <p >
17 < form action = " http :// localhost :5000 " method = " post " >
18 First name : < input type = " text " name = " FirstName " placeholder = " First Name "
><br >
19 Last name : < input type = " text " name = " LastName " placeholder = " Last Name " ><
br >
20 < input type = " submit " value = " send " >
21 </ form >
22
23 </p >
24
25
26 </p >
27
28 </ body >
29
30 </ html >
Informe de Proyecto 9
5.2.3. Código HTML para la respuesta del servidor debido a un POST hecho por el
cliente
1
2 < head >
3 < title >
4 Response
5 </ title >
6 </ head >
7
8 <h1 > This is a responce for your Request </ h1 >
9
10 <p >
11 Hello <b > < %= firstname %> < %= lastname %></b >
12 Are you ready for use this java applet ?
13 </p >
14
15 < applet archive = " PhysicsLab . jar " code = PhysicsLabApplet . class width = " 1300 " height = "
500 " >
16 < param name = " title " value = " Physics Lab : 3 Experiencing with oscillations " / >
17 < param name = " fixedHookNum " value = " 2 " / >
18 <! - - < param name = " fixedHook . x " value = " position " / > -->
19 < param name = " fixedHook .1 " value = " 0.5 " / >
20 < param name = " fixedHook .2 " value = " 1.5 " / >
21 < param name = " ballNum " value = " 3 " / >
22 <! - - < param name = " ball . x " value = " speed ; mass ; pos_x ; radius " / > -->
23 < param name = " ball .1 " value = " 0; 1; 1; 0.1 " / >
24 < param name = " ball .2 " value = " 0; 1; 2; 0.1 " / >
25 < param name = " ball .3 " value = " 0; 1; 3; 0.1 " / >
26 < param name = " oscillatorNum " value = " 1 " / >
27 <! - - < param name = " oscillator . x " value = " amplitude ; frequency ; position " / > -->
28 < param name = " oscillator .1 " value = " 0.5; 1; 2.5 " / >
29 < param name = " deltaTime " value = " 0.001 " / >
30 < param name = " refreshTime " value = " 0.005 " / >
31 < param name = " maxPlotTime " value = " 30 " / >
32 </ applet >
33
34 < form action = " http :// localhost :5000/ " method = " get " >
35 < button type = " submit " > Reload </ button >
36 </ form >
Informe de Proyecto 10
5.4. Bibliografı́a
- http://nodejs.org/
- http://en.wikipedia.org/wiki/Node.js
- https://medium.com/@edwardoregan/why-node-js-matters-bb49dbf688af
- http://devopsangle.com/2013/04/01/the-birth-of-node-where-did-it-come-from-creator-ryan-dahl-
shares-the-history/
- http://stackoverflow.com/questions/5062614/how-to-decide-when-to-use-node-js
- http://dsp.mx/blog/sistemas-de-informacion/49-sockets-tcp-udp