Desarollo de Sistemas Informáticos

Contenido del Tema 3: Networking with Sockets y ejercicios del libro "Noje.js 8 the Roght Way".

View on GitHub

Listening for Socket Connections

Los servicios de red tienen dos funciones principales: Connectar puntos finales (endpoints) y transmitir información entre ellos. En este apartado veremos como crear servicios basados en sockets utilizando Node.

Binding a Server to a TCP Port

Las conexiones de socket TCP constan de dos puntos finales; uno se une a un puerto numerado mientras que el otro se conecta a un puerto. En Node.js las operaciones de enlace y conexión son proporcionadas por el módulo de red (net module). La forma de enlazar un puerto TCP para escuchar conexiones es la siguiente:

imagen01

Donde:

La siguiente figura nos muestra un ejemplo del funcionamiento, donde existe un proceso Node.js enlazado a un puerto TCP y donde cualquier número de clientes pueden conectarse al puerto enlazado.

imagen02

Writing Data to a Socket

Como fuente de información para el servicio de red que crearemos a continuación, utilizaremos los cambios producidos en un archivo a partir de las utilidades desarrolladas en prácticas anteriores.

Primero crearemos un directorio networking para almacenar el código que vamos a escribir. Después creamos el siguiente archivo:

imagen03

En el archivo se observa que:

Por último la callback se transmite a serven.listen al final. Node.js invoca esta función después de que haya enlazado el puerto 60300 con éxito y esté listo para recibir conexiones.

Connecting to a TCP Socket Server with Netcat

A continuación comprobamos la ejecución del programa net-watcher. Trabajamos con tres terminales distintas:

watch -n 1 touch target.txt

imagen04

imagen05

imagen06

imagen07

Veamos la configuración creada en el siguiente diagrama, donde el proceso de net-watcher enlaza un puerto TCP y observa un archivo. En este caso es posible que varios usuarios se conecten y reciban actualizaciones simultaneas:

imagen08

Listening to Unix Sockets

Los sockets de Unix son una alternativa más eficiente si se quiere comunicar procesos en un mismo equipo. Pueden ser más rápidos que los sockets TCP porque no requieren invocar hardware de red. Para ver cómo el módulo net usa este tipo de sockets, modificamos el programa cambiando el .listen de la siguiente forma:

imagen09

Volvemos a ejecutar el programa y para connectar el cliente utilizaremos de nuevo nc pero con la opción -U para usar el archivo socket.

imagen10