Mostrando entradas con la etiqueta udp. Mostrar todas las entradas
Mostrando entradas con la etiqueta udp. Mostrar todas las entradas

viernes, 13 de noviembre de 2020

Sockets Nodejs

Socket es un interfaz con la cual, se crearon las implementaciones de la pila de protocolos tcp-ip con la que permite que internet se creara, y con ello dos servicios colección 

TCP

Los tcp sockets son los que gestionan todo lo relacionado a los circuitos vistuales conectando tanto a clientes como a sevidores. Tiene una serie de metodos como el connect que permite establecer el circuito desde el cliente hasta el servidor,destruirlos datos , crear eventos y utilixando el modelo de cliente servidor.

El socket de server sirve para escuchar eventos de forma pasiva y establecer la comunicación con el cliente.

El  socket de cliente que son las estructuras de datos despues de haberse establecido todo el circuito permitiran la interacción con el servidor.

UDP

Es la alternativa mas rapida y simple, enviando datagramas sin establecer un enlace obligatorio como es el 3 handshake, que utiliza tcp para establecer la conexión entre el cliente y servidor. El envio de datagramas, tiene unos datos asociado con un tamaño maximo.Es una comunicacion sensilla, sin embargo, no hay garantía de la integridad de los datos. Al  no establecer una conexión con el receptor de los datos, no se espera mensajes de respuesta, mucho menos el orden de llegada de los datos o si los paquetes están completos, haciéndolo un caso de uso muy especifico primando la velocidad de transmisión como lo son o servicios de voz y vídeo.

Ejemplo  

ServerUdp.js

En la primer linea se implementa la libreria dgram nativa de nodejs, la siguiente línea se crea un socket con ipv4 y la almacena en la variable server, e inicializa el socket con el método bind que recibe por parámetro un puerto por donde escuchara a los clientes. Los demás son eventos, el primero se emitee cuando un nuevo datagrama esta disponible en el socket, el segundo dgram.Socket es direccionable y puede recibir datos y el tercero si ocurre un error. 

Para entrar mas en detalle lo que esta haciendo el código, en el evento message, lo que esta haciendo es retornar al cliente el mensaje enviado, el evento listening esta guardando los datos del socket y los retorna en consola y el evento close si detecta un error, va a mostrarlo por consola y cerrara la conexión.

ClientUdp.js


De manera similar, tenemos al cliente que es muy similar al servidor, en este caso los process.stdin y
process.stdout fueron utilizados para que desde la consola se pudiera escribir e imprimir texto. Como se había mencionado antes los eventos del servidor son pasivos y necesita que el cliente los active. En este caso en la linea ocho, el socket llama al método send, que lo que hace es mandar datos al servidor. En el evento message su funcion aquí sera escribir en consola la respuesta  del servidor ypor último el evento error, mostrar por pantalla el error, cerrará la conexión y cerrara todolo demás. 

 

ClientTcp.js

Para trabajar con sockets tcp se debe cargar la libreria net que es nativa de nodejs, en la 2 linea se almacena un socket en una variable, en la linea siguiente, en el evento connect se le pasa el host y puerto del servidor al que se quiere conectar.

Cuando se trabaja con sockets los datos no se transmiten en texto plano sino en secuencia de bytes llamado buffer, por eso en la linea 5 se esta convirtiendo a texto legible por humanos. En la linea 7 se envia datos en el socket y en la linea 9, se espera el evento data que envie datos y los muestre por consola.

ServerTcp.js

En las primeras 2 lineas se carga la libreria, se crea y almacena una variable del servidor tcp, en la 4 linea se emite cuando hay una nuevo socket conectado, imprime por consola el host y el puerto del socket que se conecto. En la linea 7 en evento data, recibe los datos y los imprime en pantalla y devulve al socket lo que envio. En la linea 8 imprime en pantalla 2 valores, el primero el buffer recibido y el segundo, ese mismo buffer convertido a texto con el metodo .toString.

Con esto se ha profundizado un poco sobre protocolo y como nodejs desde sus librerías nativas permite realizarlo probando con un servidor eco.

ref: https://nodejs.org/api/